Case study: TRINTA, the tender-intelligence platform we built and run. Read the case

SO-MA Index 2026 · original research

Are Portuguese online stores ready for AI agents?

We measured 379 Portuguese brand stores. 215 are ready. The median score is 85 out of 100. Measured on 19 October 2026 with SO-MA's public checker, public pages only.

  • 379 stores measured
  • 10 checks
  • 19 October 2026

what we found

What an AI agent finds when it visits a Portuguese store.

  • 230

    of 379 stores publish an llms.txt

    60.7%

    168 of these are the file Shopify generates on its own. Outside Shopify: 57 of 201.

  • 137

    of 183 product pages carry price, currency and stock in structured data

    74.9%

  • 2

    of 379 stores block at least one AI crawler in robots.txt

    0.5%

  • 220

    of 379 stores describe the brand in structured data

    58%

How the stores split

  • 215 Ready (85 to 100) · 56.7%
  • 156 Partly ready (60 to 84) · 41.2%
  • 8 Not ready (0 to 59) · 2.1%

Score distribution

Number of stores per score band (0 to 100), across 379 stores measured.
ScoreStoresShare
90 to 100 169 44.6%
85 to 89 46 12.1%
80 to 84 64 16.9%
70 to 79 65 17.2%
60 to 69 27 7.1%
50 to 59 7 1.8%
40 to 49 0 0%
30 to 39 1 0.3%

By sector

Average score and ready stores per sector. Sectors with fewer than 10 stores measured are grouped under Other.
SectorStoresAverageReady
Fashion and apparel 70 88 48 (68.6%)
Footwear and leather goods 69 88.1 49 (71%)
Home and interiors 48 84.3 29 (60.4%)
Food and wine 74 80.8 28 (37.8%)
Beauty and personal care 33 85 18 (54.5%)
Jewellery and watches 40 87.5 25 (62.5%)
Retail and electronics 10 80.3 3 (30%)
Other sectors 35 81.9 15 (42.9%)

By platform

Platform detected in the home page code, only when the signature is unambiguous. Platforms with fewer than 10 stores are grouped under Other.
PlatformStoresAverageReady
Shopify 178 93.4 152 (85.4%)
WooCommerce 77 76.2 15 (19.5%)
Squarespace 14 80.6 4 (28.6%)
Wix 14 78.4 7 (50%)
WordPress (no WooCommerce detected) 12 76.3 3 (25%)
Other or not detected 84 78.6 34 (40.5%)

Without the product check (see the limits in the method), the average becomes Shopify 96.6, WooCommerce 82.7, Squarespace 88.9, Wix 86.4, WordPress (no WooCommerce detected) 84.4, Other or not detected 86.4, on a 0 to 100 scale.

Other: not detected 64, PrestaShop 9, Salesforce Commerce Cloud 7, Magento 3, VTEX 1.

the five most common gaps

What stands between a store and an agent that wants to buy.

  1. Brand not described as an entity

    42% · 159 of 379 stores

    The home page does not describe the brand in structured data (schema.org Organization, Store or Brand). A model has to guess who the company is from the text and mixes it up more easily with a similar name.

    How to fix it An Organization JSON-LD block with name, logo, site URL and official profiles in sameAs.

  2. No llms.txt

    39.3% · 149 of 379 stores

    There is no /llms.txt: the plain-text map of the store for language models, with what it sells, its collections and its policies. It is a recent convention, not yet a standard, and no major answer engine confirms that it reads it; it is cheap to add.

    How to fix it Publish /llms.txt with a short brand summary and links to collections, shipping and returns policies and the sitemap.

  3. Incomplete share preview

    29.8% · 113 of 379 stores

    The Open Graph title or image is missing on the home page. It is the card that shows when a person, or an assistant, shares the link in a chat.

    How to fix it og:title and og:image on every page. On most platforms it is a theme setting.

  4. Product without price, currency or stock in structured data

    25.1% · 46 of 183 stores where we found a product page

    We found a product page, but its structured data (schema.org Product with Offer) lacks price, currency and availability, or does not exist. This is the data a shopping agent uses to compare offers and confirm it can buy.

    How to fix it Product with offers.price, offers.priceCurrency and offers.availability on every product page, generated from the catalogue.

  5. Missing title, description or canonical

    24.3% · 92 of 379 stores

    At least one of the three lines an answer engine quotes about the store is missing.

    How to fix it A written title and meta description for each page, and the right canonical.

leaders

20 of the 83 stores that scored 100 out of 100

83 stores scored 100. 39 of them also pass all three basic accessibility checks. We name the 20 of those 39 with the most text readable without JavaScript, in alphabetical order and unranked: within a tie, the order does not mean one store is better prepared than another. The other 359 stores measured are not named, here or in the data file.

The 20 named stores, in alphabetical order.
StoreSectorPlatformScore
Arcopedico arcopedico.com Footwear and leather goods Shopify 100
Armazém das Malhas armazemdasmalhas.com Fashion and apparel Shopify 100
Catarina Barbosa Skincare catarinabarbosaskincare.com Beauty and personal care Shopify 100
Coelima coelimastore.pt Home and interiors Shopify 100
Comporta Perfumes comportaperfumes.com Beauty and personal care Shopify 100
Essências de Portugal essenciaspt.com Beauty and personal care Shopify 100
EXÉ exe.pt Footwear and leather goods Shopify 100
Imago imagoportugal.com Fashion and apparel Shopify 100
Joana Mota Capitão joanamotacapitao.com Jewellery and watches Shopify 100
Let It Soap letitsoap.com Beauty and personal care Shopify 100
LUR Natural Skinfood lurskinfood.com Beauty and personal care Shopify 100
More is Better moreisbetter.pt Footwear and leather goods Shopify 100
Näz naz.pt Fashion and apparel Shopify 100
Next Memory nextmemory.eu Beauty and personal care Shopify 100
Raquel Poço raquelpocojewellery.com Jewellery and watches Shopify 100
Sementes Vivas sementesvivas.bio Other sectors Shopify 100
Sopro Jewellery soprojewellery.com Jewellery and watches Shopify 100
Templars Arena templarsarena.com Other sectors Shopify 100
Toworkfor toworkfor.pt Footwear and leather goods Shopify 100
Versus Gamecenter versusgamecenter.pt Other sectors Shopify 100

basic accessibility

Three accessibility checks, read from the same HTML.

They are not part of the score and do not replace an accessibility audit: they are what can be measured reliably in the home page HTML without running scripts.

  • 367 of 379

    declare the page language (html lang)

    96.8%

  • 224 of 377

    stores with images give every image alternative text

    59.4%

  • 167 of 344

    stores with form fields give every field a name

    48.5%

your store

See your score with the same checker.

It is the tool we used for the study, with the same ten checks. Free, no sign-up, public pages only. Once you see the result, you can ask for the fix plan by email.

free toolno sign-upread-only, public pages

Is your store agent-ready?

Customers now ask ChatGPT, Gemini and Perplexity what to buy, and AI agents are starting to buy for them. Type your store's address and see what those agents actually read.

Tip: a product page gives the most complete result.

what we check

Ten checks, each one explained.

  • Readable without JavaScriptMost AI crawlers do not run scripts. We count the words they actually get.
  • Product data agents can buy fromPrice, currency and availability in structured data on a real product page.
  • AI crawlers allowedWhether robots.txt lets in GPTBot, ClaudeBot, PerplexityBot, Google-Extended and others.
  • Brand described as an entityOrganization data, so a model can tell your brand from a similar name.
  • Title, description and canonicalThe lines an answer engine quotes when it cites you.
  • Speed, HTTPS, sitemap, llms.txt, share previewThe basics that decide whether an agent waits for you or moves on.

We read public pages only, the way a crawler would. We never log in, never submit anything and do not store the address you check. If you ask for the fix plan, the address goes in your request.

method

How we measured

Sample

400 online stores of Portuguese brands and retailers, each on its own domain, gathered from 197 public pages on 41 sites: trade and producer association lists, award lists and press articles that name Portuguese brands by sector. Each store has its source on file.

We left out marketplaces, foreign retailers with a Portuguese site, stores whose only source was sponsored or more than ten years old, repeated brands (one store per brand), and the stores of current and past SO-MA clients, so we are not grading our own work.

The sample is not random: these are brands visible enough to appear on those lists. The results describe these 379 stores, not all Portuguese e-commerce.

Measurement

On 19 October 2026, from Lisbon, using the code of SO-MA's public checker (the one on this page), run from a script rather than the site's server. The reader identifies itself as "SO-MA-research (+https://so-ma.studio/indice)".

One request at a time per store, with a one-second pause between requests; home page redirect hops and the two robots.txt files (with and without www) follow without a pause, as in a browser. Before anything else we read each server’s robots.txt and request no path it disallows. Public pages only: home page, robots.txt, sitemap.xml, llms.txt and one product page linked from the home page. No logins, no forms, no stored cookies.

We keep only the check results and counts (words, images, fields): no page content and no data about the stores’ customers. The measurements behind these figures made 2472 requests, robots.txt included.

Corrections

We published the Index on 16 October 2026 with 204 ready stores, 17 below 60 and 79 scoring 100. We then found two errors in our reader. The errors were in our code, not in the stores.

The first read any response larger than 2 MB as empty: 12 home pages, 1 product page and 2 sitemaps. On 19 October 2026 we fixed it and measured those 15 stores again, and the figures became 212, 5 and 83. The reader now reads the first 2 MB of each response, like SO-MA's public checker.

The second counted the time each request spent waiting in our queue as the store's time: we make one request at a time per store, and the time limit started when the request joined the queue. On a slow store, a sitemap or product page that existed could run out of time before it was requested. Each request's time limit (8 seconds, 10 in total with redirects) now starts when it leaves the queue, as in the public checker, where requests run in parallel.

With both errors fixed, we measured all 400 stores in the sample again on 19 October 2026. Every figure in the Index comes from that measurement: 215 ready stores, 8 below 60 and 83 scoring 100.

Score from 0 to 100

Ten checks with fixed weights, the same as the checker. Ready: 85 or more. Partly ready: 60 to 84. Not ready: below 60.

The ten checks and their weights
CheckPointsRule
Served over HTTPS10Home page served over HTTPS.
Answers quickly10Home page first response: under 1.5 s scores 10; under 3 s scores 5.
Readable without JavaScript20Words in the HTML before any script runs: 150 or more scores 20; 50 or more scores 10.
Title, description and canonical10Title, meta description and canonical link on the home page (3, 6 or 10 points).
Brand described as an entity5Organization, OnlineStore, Store or Brand structured data on the home page.
Product data agents can buy from15On a product page linked from the home page: Product with price, currency and availability (15), incomplete Product (8), product page without Product (0), no product page found (5).
AI crawlers allowed15robots.txt lets in GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, PerplexityBot and Google-Extended (15); blocks some (7); blocks all (0); no robots.txt (10).
Sitemap5Sitemap at /sitemap.xml or listed in robots.txt.
llms.txt for language models5An /llms.txt file is published (text, not an HTML page).
Share preview5og:title and og:image on the home page.

The 20 we name

We pick the 20 with the highest score. When the cut falls in a tie, ties are broken, in this order, by more basic accessibility checks passed (0 to 3), a higher share of images with alternative text, more words readable without JavaScript and the alphabetical order of the domain. Word count is not one of the ten checks, so the 20 appear in alphabetical order and unranked. No other store is named.

Limits

The product check looks on the home page for a link with /products/, /product/ or /produto/ in the address, and only counts the page if it is still a product page after redirects (/produtos/ is left out: in Portuguese stores it is almost always a listing). In 196 of 379 stores we found no product page that answered (more common outside Shopify, where product pages use other address formats); those stores get 5 of 15 points on this check, as in the checker. A product page without product data scores 0, so finding one can lower the score compared with finding none. That is why the "product without data" gap is counted only among stores where a product page was found.

We read the first 2 MB of each response, like the checker on this page: on a very large page, anything after that (for example product data at the end of the code) does not count. A store that takes more than 8 seconds to answer a request (10 with redirects) goes without that response, also as in the checker.

The 21 stores we could not measure, especially the 15 that refused even an identified reader, are probably among the most closed to agents. They are outside every figure, which makes the picture look better.

We only read robots.txt. Blocks at the firewall or CDN, such as the AI bot blocking Cloudflare offers, are not visible in this measurement.

Speed was measured from Lisbon on an office connection and varies through the day. It is a snapshot of the day each store was measured: stores change.

The study measures whether a store can be read and bought from by agents. It does not measure whether ChatGPT, Gemini or Perplexity actually recommend each brand.

Stores not measured

21 of the 400 stores on the list were not measured and are not in any figure: 15 stores refused our reader; 4 stores had a robots.txt that returned an error or did not answer, and the rule in that case (RFC 9309) is not to read; 1 store did not answer within 8 seconds; 1 store redirected too many times. Refusing the reader means a 4xx response (403 or 429), almost always bot protection.

Stores that did not answer, or whose robots.txt did not answer, got a second attempt the same day; stores that refused the reader (403 or 429) did not.

Since 19 October 2026, a home page read with no text and no title, or a bot check page served instead of the store, never gets a score: the store counts as not measured. The rule also applies to earlier measurements. No store in this edition is in that case.

Interests

SO-MA sells the Agent-Ready Audit and builds Shopify stores. That is why we publish the whole method, use a checker anyone can run, and leave our clients’ stores out.

Sample sources

See the 41 sites behind the 197 source pages

By site, with the number of stores and pages. The exact source of each store is on file; we do not publish it because many pages carry the brand name in the title, and we only name the top 20.

how to cite

Use the numbers, say where they come from.

The aggregated data is public under CC BY 4.0: you can reuse it with attribution.

SO-MA Studio (2026). SO-MA Index 2026: are Portuguese online stores ready for AI agents? Measurement of 379 stores on 19 October 2026. https://so-ma.studio/en/portuguese-stores-ai-readiness-index/

SO-MA Index 2026: are Portuguese online stores ready for AI agents? Also in Portuguese.

Go further