/ Research · AI search · October 2026

Is the IBEX 35 ready for AI search?

I read the robots.txt of Spain’s 35 largest listed companies, then knocked on every front door pretending to be Chrome, Googlebot, GPTBot, ClaudeBot and friends. Same machine, same IP, only the name changes. To tell an AI block from a generic bot block, I invented a control group: PlaceBot, the placebo bot.

Companies
35, IBEX 35 on 2 Oct 2026
Measured
robots.txt and llms.txt on 4 Oct, doors on 6 Oct
Scope
Corporate site, home page only
Identities tested
9 User-Agents, incl. a placebo
Tools
Node, real Chrome via playwright-core, curl
Data
CSV · JSON

What is not on this page: nothing exploitable. Which bots a public page lets in is visible to any visitor. A certificate-chain finding from 4 October did not reproduce on 6 October, so it was dropped.

The numbers

0/35block AI search bots in robots.txt
31/34robots.txt files that do not name a single AI bot
9/35have an llms.txt
3block AI bots by name at the firewall
29/35let PlaceBot in with full content

What “ready for AI” means

It is not having an llms.txt. It is classic SEO: a bot can get in, read the page without JavaScript, understand it and find it. Plus a conscious decision about AI bots, which come in two kinds:

KindReads your site toExamplesIf you block it
Traininglearn (train models)GPTBot, ClaudeBot, Google-Extended, CCBot, BytespiderNot used for training. A legitimate choice.
Searchcite you when someone asksOAI-SearchBot, Claude-SearchBot, PerplexityBotYou disappear from those answers.
Useropen a page a person asked forChatGPT-User, Claude-User, Perplexity-UserThat person cannot read you from the chat. OpenAI notes robots.txt may not apply.

Google-Extended is not a crawler: it is a robots.txt token for Gemini training and does not affect Google Search or AI Overviews, which use regular Googlebot. Block Googlebot or Bingbot and you also leave the AI features built on them.

robots.txt: the sign on the door

robots.txt is a polite note, read with the RFC 9309 rules: if a bot has no group of its own, the User-agent: * group applies. Inditex has none (it redirects to the home page), so 34 files.

Measured 4 October 2026, confirmed 6 October. “Words no JS” counts the raw HTML; 0 means a bot that does not run JavaScript sees an empty page.
CompanySiteNames AI botsBlocksllms.txtJSON-LDWords no JS / JS
Banco Santanderwww.santander.com··no·1,326 / 986
Inditexwww.inditex.comno robots.txt·no·371 / 339
Iberdrolawww.iberdrola.com··yes·0 / 819
BBVAwww.bbva.com··no41,640 / 1,030
CaixaBankwww.caixabank.com··no2820 / 883
ArcelorMittalcorporate.arcelormittal.com··no·992 / 729
Endesawww.endesa.com··yes·3,566 / 1,534
Aenawww.aena.es··no·1,491 / 678
Ferrovialwww.ferrovial.com··no1754 / 158
Repsolwww.repsol.com··yes31,640 / 796
Naturgywww.naturgy.com··no61,428 / 787
ACSwww.grupoacs.com··no·1,098 / 853
IAGwww.iairgroup.com··no·452 / 381
Amadeusamadeus.com··yes·1,595 / 1,164
Telefónicawww.telefonica.com··no4944 / 723
Banco Sabadellwww.grupbancsabadell.com··no·1,112 / 399
Cellnexwww.cellnex.com··no62,993 / 1,310
Bankinterwww.bankinter.comChatGPT-User GPTBot·yes48,963 / 747
Mapfrewww.mapfre.com··no42,512 / 943
Accionawww.acciona.com··yes·2,178 / 410
Indrawww.indragroup.comBytespider ClaudeBot ChatGPT-UserBytespiderno3823 / 780
Puigwww.puig.com··no27256 / 313
Unicajawww.unicajabanco.es··no11,431 / 1,361
Redeiawww.redeia.com··no·1,785 / 733
Merlin Propertieswww.merlinproperties.com··yes5341 / 218
Acciona Energíawww.acciona-energia.com··no·509 / 260
Grifolswww.grifols.com··no·1,616 / 1,061
Logistawww.logista.comChatGPT-User GPTBot Google-Extended ClaudeBot PerplexityBot·yes·543 / 483
Enagáswww.enagas.es··yes31,243 / 398
Acerinoxacerinox.com··no·859 / 112
Fluidrawww.fluidra.com··no·0 / 1,543
Sacyrsacyr.com··no11,310 / 854
Colonialwww.colonial-sfl.com··no·385 / 303
Rovirovi.es··no·5,866 / 583
Solariasolariaenergia.com··no·917 / 908

The door: same client, nine names

robots.txt is a request; the firewall is what lets a bot in or not. Each site was requested with the same client and IP, changing only the User-Agent. Doubtful cases ran twice in random order with 5-second pauses.

ok 200 with content · verif. 200 but a verification or near-empty page · 403 forbidden · 429 too many requests · empty: not tested. “Chrome” is the same client claiming to be Chrome, not a real browser.

Measured 6 October 2026 from a home IP. CDN detected from response headers; “none seen” does not mean there is none.
CompanyCDNChromeGooglebotBingbotGPTBotClaudeBotOAI-SearchBotChatGPT-UserPerplexityBotPlaceBot
Banco SantanderAkamai + Impervaokokokokokokokok
InditexAkamaiokokokokokokokok
IberdrolaAkamaiverif.403403403403403403403403
BBVAAkamaiokokokokokokokok
CaixaBankCloudflareok403403okokokokokok
ArcelorMittalCloudflare403403403403403403403403
EndesaImpervaokokokokokokokok
AenaAkamaiokokokokokokokok
Ferrovialnone seenokokok403okok403okok
Repsolnone seenokokokokokokokok
NaturgyRadwareverif.verif.verif.verif.verif.verif.verif.verif.verif.
ACSnone seenokokokokokokokok
IAGCloudflareokokokokokokokok
AmadeusImpervaokokokokokokokverif.
TelefónicaCloudflareokokokokokokokok
Banco SabadellAkamaiokok403403403403ok403403
CellnexImpervaokokokokokokokok
BankinterCloudflare403403403403403403403ok
Mapfrenone seenokokokokokokokok
Accionanone seenok403403403403403403403ok
IndraCloudflareokokokokokokokok
PuigCloudflare403403403403403403403ok
UnicajaAkamaiok403403403403403403403ok
RedeiaImpervaokokokokokokokok
Merlin Propertiesnone seenokokokokokokokok
Acciona Energíanone seenok403403403403403403403ok
GrifolsF5okokokokokokokok
Logistanone seenokokokokokokokok
Enagásnone seenokokokokokokokok
AcerinoxRadwareverif.okokokokokokok
FluidraImpervaverif.verif.verif.verif.verif.verif.verif.verif.
Sacyrnone seenok403ok403okokokokok
ColonialCloudflareokokok403403okokokok
Rovinone seenokokokokokokokok
Solarianone seenok429429429429429429429ok

PlaceBot, the control group

In medicine the control group takes a sugar pill. Here the drug is the bot’s name. PlaceBot is an honest, unknown bot: Mozilla/5.0 (compatible; PlaceBot/1.0; +https://www.linkedin.com/in/hache-cervera). Nobody has a rule for it.

If GPTBot is blocked and PlaceBot too, the site blocks any bot. If PlaceBot gets in but a fake Googlebot does not, the site blocks impersonators. Only if both get in is the rule really about that AI. Without the placebo, all three look like “they block AI”.

The twist: Bankinter and Puig block the fake Chrome and let PlaceBot in with full content. Lying about who you are closes more doors than being a nobody.

The rules look at the exact User-Agent: at Colonial, a bare “GPTBot” gets in; the full official string gets 403.

What stood out

  • Iberdrola, the paradox. The biggest llms.txt in the index (2.4 MB, 7,291 links), and a door that returns 403 to every bot name, placebo included. Without JavaScript its home page has 0 words. Generic anti-bot, not anti-AI, but it says one thing with the file and another with the guard.
  • Colonial does it by the book, silently. Blocks training bots (GPTBot, ClaudeBot), lets search bots in (OAI-SearchBot, ChatGPT-User, PerplexityBot). All in Cloudflare; robots.txt says nothing.
  • Ferrovial probably filters “GPT”. GPTBot and ChatGPT-User fall; OAI-SearchBot passes. A hypothesis.
  • Acciona, Acciona Energía, Unicaja. Every famous bot is blocked, the fake Googlebot too, and PlaceBot gets in: anti-impersonation, not anti-AI.
  • Sabadell and Solaria. Sabadell blocks Bingbot and most “…Bot/” strings. Solaria answers 429 to any known bot from the first request.
  • Bankinter’s llms.txt describes bankintercard, its consumer-credit subsidiary, not Bankinter.
  • Indra is the only one blocking a bot in robots.txt: Bytespider (ByteDance). Logista names five AI bots to invite them.

llms.txt is a 2024 proposal

Proposed by Jeremy Howard in September 2024: a short Markdown file at /llms.txt with a title, a summary and key links, meant to fit in a model’s context. Google says you do not need “new machine readable files, AI text files, or markup” to appear in AI Overviews or AI Mode, and John Mueller has said Google does not use it. In a corporate site it is a curiosity, not a score.

Is a site ready for AI search?

CheckHow
Get in (sign)robots.txt does not block Googlebot, Bingbot or OAI-SearchBot, Claude-SearchBot, PerplexityBot.
Get in (guard)curl.exe -s -o NUL -w "%{http_code}" -A "<full bot User-Agent>" https://site/, then the same with an invented bot. 403 versus 200 means a rule by name.
ReadDevTools, Disable JavaScript, reload. The content must still be there.
UnderstandClear titles and headings, answers in text, JSON-LD.
FindSitemap, internal links, indexed in Google and Bing.
DecideAllow or block training bots knowingly; it does not change search visibility.
MeasureAI referrals in analytics, bot hits in server logs.

Security layers, and how I handled them

LayerWhat it doesHow it was handled
CDNServes and filters trafficLogged the provider, never read as intent
Bot managementScores every visitCounted words, not only status codes
Verified botsLets real crawlers in by IPThe limit: I test the name, not the IP
Anti-impersonationBlocks fake famous botsThe placebo exposes it
Client fingerprintChecks a “Chrome” behaves like ChromeThe fake Chrome is a baseline, not a user
JS challengeAsks to run JavaScript firstMarked “verif.”, not an AI block
Rate limitSlows fast clientsPauses and random order

Between 15 and 35 requests per site over two days, home page only. The limit: real crawlers come from verified IP ranges and may get a different answer. This shows that some rules look at the bot’s name, not what the real GPTBot sees.

Sources: Google: AI features and your website · OpenAI crawlers · llms.txt proposal · RFC 9309, robots.txt

/ Next

I check before I publish.

I wrote the scripts with help from Claude. The control groups, the second rounds and the findings I threw away were my call. If your team needs that kind of checking, email me.