AEO Portugal study 2026

We read the robots.txt, llms.txt and home page of 13,000 randomly drawn .pt domains. The results describe 10,160 active sites, weighted to correct sampling bias, and measure how prepared they are for search engines and AI assistants.

Data collected on 9 and 10 November 2026

  • 3.1% block at least one AI agent in robots.txt
  • 11.0% have a valid llms.txt (7.4% excluding Wix and Shopify)
  • 40.4% declare JSON-LD structured data
  • 62.5% have a meta description on the home page
  • 32.2% meet 3 or 4 of the 4 readiness index elements
  • 9.1% meet none of the 4 elements

Summary

  • Few sites shut the door on AI: 3.1% block, by name, at least one of the 12 agents measured. On top of that, 1.2% of the domains drawn block all agents (User-agent: *) or the study bot and were left out of the analysis.
  • When they block, they do it in bulk: the average is 6.7 agents per site and 65.2% block between 6 and 11. The pattern points to copied lists or plugin-generated rules, not agent-by-agent decisions.
  • 88.5% of sites that block only block training agents. Agents that answer user requests or search (ChatGPT-User, OAI-SearchBot and PerplexityBot) are blocked by 0.1% to 0.3% of sites.
  • Only 11.0% have a valid llms.txt, and part of that is not the owner's decision: Wix and Shopify generate the file by default (92% to 93% of sites on these platforms). Without them, the rate is 7.4%.
  • 40.4% declare JSON-LD, but almost all of it describes the website (WebSite, 33.9%) or the organisation (25.8%). LocalBusiness appears in 1.6% and FAQPage in 1.1%.
  • A simple 4-element index (robots.txt without AI blocking, llms.txt, JSON-LD and meta description) puts 32.2% of sites at 3 or 4 elements, 41.0% at 0 or 1 and only 7.0% at all 4.
  • E-commerce leads the index (54.0% with 3 or 4 elements) and is also the sector that blocks agents the most (7.5%). Institutions and associations lag behind: 49.9% have 0 or 1 element.
  • The technical basics are covered: 98.8% use HTTPS, 99.7% have a title and 92.8% declare a viewport. Preparation specific to AI is what is missing.

What was measured

Four technical elements that an AI agent or search engine finds at a site's entrance. The study measures what the site declares, not results in the engines.

robots.txt

What it is: File at the domain root that tells each automated agent what it may read.

Why it matters: Each AI agent identifies itself by name. The file lets you allow or block training agents and search agents separately.

How it was measured: By-name blocking of 12 agents (Disallow: / in the agent group) and whether rules exist.

llms.txt

What it is: Text file at the root with a summary of the site and links to the main pages, designed for language models.

Why it matters: It is a proposal, not a standard. It gives a model a short description of the site without parsing the HTML.

How it was measured: A 200 response at /llms.txt with text (not HTML) and more than 20 characters.

JSON-LD

What it is: Schema.org structured data inside the page that describes the organisation, services or products.

Why it matters: It states explicitly who the company is, where it is and what it offers, without depending on page text.

How it was measured: Presence of JSON-LD blocks on the home page and declared types (@type).

Meta description

What it is: Sentence on the home page that summarises what the site offers.

Why it matters: It is the shortest text a search or answer engine has to describe the site. Without it, the summary depends on what the engine extracts.

How it was measured: Existence of <meta name="description"> with content.

AI agent access

21.7% of sites have no robots.txt with rules. Among those that do, 93.3% have no rule for AI agents, and 3.1% explicitly allow at least one. The chart shows the percentage of sites blocking each agent by name (Disallow: /).

  • Bytespider 2.6%
  • GPTBot 2.5%
  • Amazonbot 2.3%
  • meta-externalagent 2.3%
  • ClaudeBot 2.2%
  • CCBot 2.2%
  • Google-Extended 2.0%
  • Applebot-Extended 2.0%
  • anthropic-ai 1.9%
  • ChatGPT-User 0.3%
  • PerplexityBot 0.2%
  • OAI-SearchBot 0.1%

Training agents: Bytespider, GPTBot, Amazonbot, meta-externalagent, ClaudeBot, CCBot, Google-Extended, Applebot-Extended, anthropic-ai. Search and user-request agents: ChatGPT-User, PerplexityBot, OAI-SearchBot.

How many agents each site blocks

Among sites that block at least one agent. The average is 6.7 agents per site.

  • 1 agent 13.6%
  • 2 to 5 agents 20.1%
  • 6 to 11 agents 65.2%
  • All 12 agents 1.1%

11.5% of sites that block also stop at least one search or user-request agent. The other 88.5% only block training agents.

Blocking by platform

  • PrestaShop 5.8%
  • None detected 4.1%
  • Joomla 2.8%
  • WordPress 2.2%
  • WooCommerce 2.2%
  • Shopify 2.0%
  • Wix 0.0%

None of the 156 Wix sites block AI agents. On sites with no detected platform (custom code or unidentified platforms), blocking is 4.1%. PrestaShop, Joomla and Wix have 131 to 195 sites in the sample, so the differences are indicative.

llms.txt

11.0% of sites have a valid llms.txt. The distribution depends on the platform: Wix and Shopify generate the file by default.

Platform Share of sites Valid llms.txt
WordPress 48.9% 8.0%
WooCommerce 18.2% 7.5%
Shopify 2.6% 92.8%
Wix 1.6% 92.3%
Joomla 2.0% 0.5%
PrestaShop 1.3% 5.8%
None detected 41.2% 6.4%

A WooCommerce shop also counts as WordPress. SEO plugins for WordPress may generate the file, which the study does not distinguish.

Adoption outside Wix and Shopify, by sector

  • SaaS and technology 14.2%
  • E-commerce 12.3%
  • Tourism, food service and leisure 10.5%
  • Professional services 9.9%
  • Real estate and automotive 8.7%
  • Health 7.9%
  • Education and training 7.7%
  • Industry and B2B trade 7.3%
  • Other identified sectors 7.1%
  • Media, culture and personal sites 7.0%
  • Institutions and associations 4.0%

E-commerce drops from 29.0% to 12.3% without Shopify. SaaS and technology leads with 14.2% adoption outside platforms that generate the file. 9.5% of sites answer /llms.txt with a generic HTML page, which was discarded.

Structured data

40.4% of sites declare JSON-LD on the home page. The most common types describe the page and the site, and few describe the business.

  • WebSite 33.9%
  • Organization 25.8%
  • BreadcrumbList 20.0%
  • Article 4.4%
  • LocalBusiness 1.6%
  • FAQPage 1.1%
  • Product 0.3%

Only the home page was read. Product usually sits on product pages, so the 0.3% figure does not describe shops as a whole.

Business types by sector

Sector Organization LocalBusiness FAQPage
E-commerce 36.7% 1.8% 0.8%
Real estate and automotive 25.7% 1.6% 1.3%
Media, culture and personal sites 27.8% 0.6% 0.4%
SaaS and technology 33.6% 2.5% 5.0%
Tourism, food service and leisure 25.9% 2.1% 1.2%
Education and training 28.2% 3.2% 1.0%
Health 23.0% 2.6% 1.3%
Institutions and associations 17.8% 0.8% 0.1%
Industry and B2B trade 29.8% 1.5% 0.3%
Professional services 30.1% 2.7% 2.2%
Other identified sectors 26.4% 1.1% 3.2%
Not enough information 18.1% 0.7% 0.1%

SaaS and technology has the most FAQPage (5.0%). Health and professional services, sectors with local customer service, declare LocalBusiness on 2.6% and 2.7% of sites.

By page language: 44.9% of Portuguese-language sites declare JSON-LD, against 34.4% of English-language sites.

Description and technical basics

62.5% of sites have a meta description. Sites without a description are also the hardest to classify: among the 2,225 without enough information to assign a sector, only 21.5% have a meta description, against 58% to 87% in the other sectors.

Element Sites
Final URL on HTTPS98.8%
Title on the home page99.7%
viewport92.8%
Language declared in HTML91.9%
Meta description62.5%

The basic elements of a page are almost universal. The difference is in elements that depend on a decision: description, structured data and llms.txt.

Readiness index

Sum of 4 elements, 1 point each: robots.txt with rules and without AI agent blocking, valid llms.txt, JSON-LD on the home page and meta description. It is a simple index with equal weights, not validated against results in AI engines.

  • 0 elements 9.1%
  • 1 element 31.9%
  • 2 elements 26.8%
  • 3 elements 25.2%
  • 4 elements 7.0%

Sites with 3 or 4 elements, by sector

  • E-commerce 54.0%
  • SaaS and technology 42.8%
  • Professional services 42.1%
  • Health 41.8%
  • Tourism, food service and leisure 40.1%
  • Education and training 38.4%
  • Industry and B2B trade 38.3%
  • Media, culture and personal sites 35.7%
  • Other identified sectors 35.0%
  • Real estate and automotive 34.6%
  • Institutions and associations 20.2%
  • Not enough information 9.3%

The index stays stable across the two sample groups (32.1% in group 1 and 33.2% in group 2).

Results by sector

The sector was assigned by a language model from the title and description of the home page. The 95% confidence interval refers to AI agent blocking.

Sector Sites AI blocking llms.txt JSON-LD Meta description Mean index
E-commerce 948 7.5% (5.9 - 9.0) 29.0% 50.9% 87.0% 2.47
Real estate and automotive 416 5.1% (3.5 - 7.3) 10.2% 40.6% 83.0% 2.12
Media, culture and personal sites 717 4.6% (3.2 - 6.0) 8.2% 44.7% 70.8% 1.99
SaaS and technology 463 3.9% (2.7 - 5.7) 14.9% 48.3% 82.1% 2.17
Tourism, food service and leisure 868 3.1% (2.0 - 4.4) 14.2% 46.7% 71.7% 2.09
Education and training 331 3.1% (1.5 - 4.9) 11.5% 45.4% 65.5% 1.99
Health 480 2.4% (1.4 - 3.5) 11.5% 48.3% 73.0% 2.14
Institutions and associations 952 2.2% (1.5 - 3.1) 5.9% 27.5% 58.0% 1.66
Industry and B2B trade 905 2.1% (1.4 - 3.0) 8.9% 42.7% 76.8% 2.06
Professional services 1,459 1.8% (1.2 - 2.4) 11.9% 47.0% 74.6% 2.13
Other identified sectors 396 4.6% (2.9 - 6.9) 9.6% 42.0% 76.5% 2.03
Not enough information 2,225 1.8% (1.3 - 2.3) 5.4% 28.2% 21.5% 1.23

What sets each sector apart

E-commerce. It has the highest index (2.47) and the most agent blocking (7.5%, interval 5.9 to 9.0%, with no overlap with professional services). llms.txt drops from 29.0% to 12.3% without Shopify.

SaaS and technology. It leads in own llms.txt adoption (14.2%) and FAQPage (5.0%), but agent blocking (3.9%) is higher than in professional services and health.

Professional services. They have the lowest blocking (1.8%) and 42.1% with 3 or 4 elements. LocalBusiness appears on only 2.7% of sites, even though these are businesses with a local presence.

Health. 41.8% have 3 or 4 elements and 48.3% declare JSON-LD, above the overall average. llms.txt is on 11.5% of sites.

Institutions and associations. It is the most behind: 5.9% with llms.txt, 27.5% with JSON-LD, 58.0% with a meta description and 49.9% with 0 or 1 index element.

What to check on your site

Five checks matching the elements measured. They do not guarantee citations by AI engines: they make the site readable to them.

Where you stand

Tick what your site already has and compare with the 10,160 sites in the study.

Tick the elements your site already has.

  1. Open your robots.txt

    21.7% have no rules. Among those that do, 93.3% do not mention AI agents.

    The file decides, agent by agent, what can be read. Without rules, every agent has access. Training agents and search or user-request agents can have different rules.

    How to check: Type your-domain.pt/robots.txt in the browser. Look for names such as GPTBot, ClaudeBot, ChatGPT-User, OAI-SearchBot and PerplexityBot followed by Disallow: /.

    Example of per-agent rules: one training agent blocked and search agents allowed

    User-agent: GPTBot
    Disallow: /
    
    User-agent: ChatGPT-User
    Allow: /
    
    User-agent: OAI-SearchBot
    Allow: /
    
    User-agent: PerplexityBot
    Allow: /
  2. Create or review llms.txt

    11.0% have one. Without Wix and Shopify, 7.4%.

    A text file at the root with the company name, a two or three sentence description and links to the main pages.

    How to check: Open your-domain.pt/llms.txt. If a page of the site appears instead of text, the file does not exist. On Wix and Shopify the file is generated: confirm the text describes the business.

    Example llms.txt

    # Company name
    
    > What the company does, for whom and where, in two sentences.
    
    ## Services
    
    - [Service A](https://example.com/service-a): short description
    - [Service B](https://example.com/service-b): short description
    
    ## Contact
    
    - [Contacts](https://example.com/contacts): address, phone and email
  3. Declare structured data

    40.4% have JSON-LD. 26.9% declare Organization or LocalBusiness.

    Organization or LocalBusiness on the home page (name, address, contacts), FAQPage on frequently asked questions and Product on product pages.

    How to check: Paste the home page address into validator.schema.org and confirm the declared types.

    Example JSON-LD for a local business

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "LocalBusiness",
      "name": "Company name",
      "description": "What it does, for whom and where.",
      "url": "https://example.com",
      "telephone": "+351 000 000 000",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "1 Example Street",
        "addressLocality": "Lisboa",
        "addressCountry": "PT"
      }
    }
    </script>
  4. Write the meta description

    62.5% have one. 37.5% do not.

    One sentence saying what the company does, for whom and where.

    How to check: Open the home page source (Ctrl+U or Cmd+Option+U) and search for name="description". On WordPress, the field is usually in the SEO plugin.

    Example meta description

    <meta name="description" content="Accounting for freelancers and small businesses in Braga. Tax returns and payroll processing.">
  5. Measure the result

    All four points in one report.

    The AEO audit checks these points on your domain and shows what is missing.

    How to check: Enter your domain in the audit and compare the result with the figures in this study.

Run the AEO audit

Methodology and limits

  • Domain list: .pt domains from the Common Crawl index (CC-MAIN-2026-43), including domains whose robots.txt blocks CCBot, and from the Tranco and Majestic lists. .gov.pt, .edu.pt, .org.pt and subdomains were removed.
  • Sample: a random draw of 10,000 domains from 70,759 with crawled pages (group 1) and 3,000 from 13,901 that only have a robots.txt record (group 2). The second group corrects the bias of the first: in it, 16.1% of sites block AI agents, against 1.2% in the first.
  • Weighting: each site weighs the inverse of its probability of being drawn within its group (7.08 in group 1 and 4.63 in group 2). The 95% confidence intervals come from 300 resamples per group.
  • Reading: one GET request to the home page, to robots.txt and, for sites with HTML, to llms.txt, using the RodrigoSilvanoResearchBot agent, at most one request per second per domain and without following links. Sites whose robots.txt blocks the bot were excluded.
  • Readiness index: 1 point for each of 4 elements (robots.txt with rules and without AI agent blocking, valid llms.txt, JSON-LD on the home page, meta description). Sum from 0 to 4, equal weights.

From sample to analysed sites

Group 1 Group 2
Domains drawn 10,000 3,000
Active sites analysed 8,347 1,813
Inactive or empty (suspended account, under construction, default page) 823 222
Gambling and spam 142 91
Unreachable or without HTML 612 775
Excluded because robots.txt blocks the bot 76 99

Limits

  • Domains come from Common Crawl: sites with no external links pointing to them are left out.
  • The study reads only the home page, robots.txt and llms.txt. It does not assess inner pages or content quality.
  • Sector accuracy is estimated at about 90%, from a manual review of 60 sites. Confidence intervals reflect sampling only, not classification errors.
  • A valid llms.txt is a text file with a 200 response. Content quality was not assessed.
  • robots.txt is guidance for agents, not a technical barrier. The study measures what sites declare, not whether agents comply or whether AI cites the sites.
  • Agents blocked by a general rule (User-agent: *) are not counted in the by-name measure. The platform is detected by patterns in the page code and remains unidentified for 41.2% of sites.
  • The readiness index is a simple sum. It was not validated against results in AI engines.

FAQ

What is llms.txt?

A text file at the domain root (/llms.txt) with a summary of the site and links to the main pages, designed for language models. It is a proposal, not a standard. The study records whether the file exists and returns text, and does not assess its content.

Does blocking GPTBot stop a site from being cited by AI?

robots.txt controls access agent by agent, by name. Blocking one agent does not block the others: 88.5% of sites that block only block training agents and leave search and user-request agents open. The study measures what sites declare, not whether AI cites them.

How was each site's sector assigned?

A language model read the home page title and description and assigned one of 12 sectors. Estimated accuracy is about 90%, from a manual review of 60 sites. The 2,225 sites without enough information sit in a separate group.

Does the study identify sites?

No. Only totals and aggregated percentages are published. There are no site names or per-domain data.

Can I use the figures?

Yes, citing the source. Aggregated results are in CSV at the bottom of the page, with a suggested citation.

My domain was read. How do I exclude it?

Add "User-agent: RodrigoSilvanoResearchBot" followed by "Disallow: /" to your robots.txt, or write to info@rodrigosilvano.pt with the domain. Data for that domain is deleted.

Data and citation

Aggregated results are available as CSV: totals, sectors, agents, platforms and readiness index. No site names or per-domain data are published.

Download the aggregated data (CSV)

Suggested citation

Silvano, R. (2026). AEO Portugal study 2026. rodrigosilvano.pt/en/aeo-study-portugal

If your domain was read and you want it excluded, see the research bot page. Research bot.