I think this is a question everyone is interested in. It always comes with the same underlying implication: we’ll probably have to redo something from scratch. No. Most stores built on Joomla with VirtueMart or on OpenCart are already ready for AI-powered search. It’s just that no one has checked yet.

Here’s some more bad news. The few missing details sometimes completely block visibility, and the owner doesn’t even suspect it.

This article is a specific list: what to check, in what order, and why there are nuances on legacy platforms that do not exist on Shopify. Kyiv Stend is our own store on Joomla 5.x with VirtueMart 4.x and PHP 8.3, it serves as a live example. We test all our decisions on it before proposing them for client projects. We apply the same approach to OpenCart stores: we do not migrate, we modernize to modern standards.


AI search: it is not one system

Most store owners imagine AI search as a single platform with a single button. In reality it is four fundamentally different things, and each one requires separate attention.

Google AI Overviews. These are blocks with summarized answers that Google shows above the classic organic results. To land in them, Google officially does not require any technical measures beyond standard indexing. Your site is already in Google, so it is already a candidate. The only question is whether Google considers your content authoritative enough and technically accessible. There is an important nuance: Google AI Overviews activate significantly less often for transactional e-commerce queries like "buy something" and significantly more often for informational and comparative ones. According to BrightEdge data for February 2026, AI Overviews activate on 48 percent of tracked queries in the US on average; in e-commerce this share is lower.

ChatGPT Search. OpenAI’s full-fledged search engine. Three different agents here:

  • OpenAI’s training crawler (GPTBot),
  • ChatGPT Search’s search crawler (OAI-SearchBot),
  • the real time agent (ChatGPT-User).

Each one requires a separate entry in robots.txt. Blocking one does not affect the other. More detail in the robots.txt section.

Perplexity. This is an independent search engine. Two agents:

  • background indexer PerplexityBot,
  • agent Perplexity-User, which scans pages in real time for a specific query.

Perplexity cites from three to four sources per query and stands out with a stable core of authority: if a source got into rotation, it stays there for a long time.

Gemini. Here everything is complex. Google-Extended is a special agent (crawler) from Google that governs only whether Google can use your content for model training. Blocking Google-Extended does not affect either your positions in Google, or your appearance in AI Overviews, or in AI Mode. This is directly documented in Google Crawlers documentation. Gemini pulls information from Google Search’s main index.

We have seen stores where the owner diligently blocked “all AI bots” through Cloudflare and at the same time cut himself off from ChatGPT Search and Perplexity, staying only in Google. The difference between the systems here is fundamental.

[VISUAL: table with four rows. Columns: system (Google AI Overviews / ChatGPT Search / Perplexity / Gemini), crawler or agent, where access is configured (robots.txt / GSC), what actually blocks visibility.]

We put this table together after our client told us about the same situation: blocked “all AI”, and then wondered why Perplexity was silent.

ChatGPT Search and Perplexity require the most attention: separate crawlers, clear technical requirements. Google AI Overviews and Gemini are addressed through general SEO and signals of experience, expertise, authority, trust (EEAT).


Technical precondition: do you let crawlers into your site

Before thinking about Schema.org and authority, check whether AI bots can reach your site at all.

On old legacy platforms the standard robots.txt often contains lines that block folders with CSS and JavaScript. AI crawlers do not load styles as a separate request. They read the page as HTML. If CSS is blocked, the page looks empty or unreadable for the bot.

Open your site’s robots.txt (address: https://yourdomain.com/robots.txt) and compare it against the default robots.txt.dist of your Joomla version in the official joomla/joomla-cms GitHub repository. Watch two directives in particular:

  • Disallow: /media/ — this directive was never in the default robots.txt.dist of Joomla, neither in 3.x, nor in 4.x, nor in 5.x. If you find it in your file, it means a previous admin added it manually, following advice from blogs written around 2013. The /media/ folder holds CSS, JavaScript and fonts of Joomla core and extensions. Blocking this folder prevents Googlebot and AI crawlers from rendering the page and directly harms ranking. Google officially warned about it starting October 2014, and the position has not changed since.
  • Disallow: /templates/ — was in the Joomla 3.x default, but removed in Joomla 4.0 exactly because CSS and JS of templates live there. If your store is on Joomla 3.10 and the directive is present, it must be paired with Allow: /templates/*.css$ and Allow: /templates/*.js$ (this is how it has been done in upstream Joomla 3.x since 2014). If your store is on Joomla 4.x or 5.x, Disallow: /templates/ should not be there.

The Disallow: /components/ directive is present in the default of all Joomla versions and does not harm rendering: PHP entry points live in that folder, not static files.

This is a typical scenario we regularly see in audits of stores on Joomla 3.10: a Disallow: /media/ line added by a former admin following ten year old blog advice. After removing this line and re-crawling through Google Indexing API, citation in ChatGPT Search usually recovers within a few weeks after the next crawl cycle.

Here is an example AI crawlers configuration block that is worth adding to robots.txt before the User-agent: * block. OpenAI documents 3 different bots in its developer documentation, plus Perplexity, Anthropic Claude, a separate Google token for generative services, and a categorical exclusion for Bytespider:

# ChatGPT Search crawler - Allow required for visibility
User-agent: OAI-SearchBot
Allow: /
Disallow: /administrator/

# On-demand fetch by ChatGPT users and Custom GPTs
User-agent: ChatGPT-User
Allow: /
Disallow: /administrator/

# OpenAI training crawler - blocking does not affect ChatGPT Search
User-agent: GPTBot
Disallow: /

# Perplexity - Allow for visibility in Perplexity Answers
User-agent: PerplexityBot
Allow: /
Disallow: /administrator/

# Anthropic Claude
User-agent: ClaudeBot
Allow: /
Disallow: /administrator/

# Google-Extended - governs appearance in Gemini and AI Overviews
User-agent: Google-Extended
Allow: /

# ByteDance/TikTok - aggressive crawler, safer to block
User-agent: Bytespider
Disallow: /

GPTBot, OAI-SearchBot and ChatGPT-User are all from OpenAI, but they are three different entities with different purposes. The training crawler (GPTBot) collects data for model training. The search crawler (OAI-SearchBot) builds the index for ChatGPT Search. The real time agent (ChatGPT-User) loads the page at the moment a ChatGPT user asks something. OpenAI writes in its developer documentation: “Sites that are opted out of OAI-SearchBot will not be shown in ChatGPT search answers”. That is, blocking the search crawler removes your store from ChatGPT Search results entirely.

Google-Extended is a separate bot that Google introduced in 2023. It controls the use of your content in Gemini and in AI Overviews blocks. The standard Googlebot handles the classic search index. If you want to stay in Google search but exclude your content from Gemini training, those are two different lines with different rules. ClaudeBot from Anthropic behaves similarly: a separate bot for a separate use. Bytespider from ByteDance has been noted for excessively aggressive crawling and generally does not bring visibility in any popular system in Europe or Ukraine, so it is safer to block completely.

A live example of how it should look. Our own store https://kyivstend.com.ua/, which we have been modernizing for 11+ years on the Joomla + VirtueMart stack, uses exactly this set of rules. Open https://kyivstend.com.ua/robots.txt in a browser and you will see all the blocks described above in practice, together with standard Joomla directives for service folders and paired Allow entries for CSS and JavaScript.

Separately about Cloudflare. If your site sits behind it, check the Security → Bots section. Historically there was a “Block AI bots” toggle there. According to Cloudflare’s documentation, this toggle excluded search crawlers from the block list, meaning OAI-SearchBot was not blocked automatically. The real visibility risk comes from old Super Bot Fight Mode rules, Bot Fight Mode, and custom WAF rules: they do not distinguish AI bot categories and can accidentally cut off OAI-SearchBot and PerplexityBot. Starting September 2026, Cloudflare replaces the old toggle with three separate categories: Search, Agent and Training, where search crawlers stay allowed by default.

Practical recommendation: check Cloudflare Radar logs to see which AI bots actually reach your site. If OAI-SearchBot or PerplexityBot are missing from the list, one of the WAF filters is cutting them off. You can explicitly allow these two bots through Cloudflare Custom Rules by OpenAI’s official IP address ranges. OpenAI publishes three separate JSON files with IP ranges for three bots:

Ranges update, so set up automatic rule updates once a day.

[VISUAL: screenshot of the real https://kyivstend.com.ua/robots.txt with highlighted AI crawler blocks. Show the top of the file with blocks for OAI-SearchBot, ChatGPT-User, GPTBot, PerplexityBot, ClaudeBot, Google-Extended, Bytespider. Caption under the screenshot: “robots.txt of our store Kyiv Stend, Joomla + VirtueMart, July 2026”. The file is live and public, the reader can open it themselves.]


Schema.org for the store: a baseline requirement, not “advanced SEO”

GEO optimization (optimization for generative search engines) did not invent new rules. It confirms the rules the SEO community has been recommending for years: Schema.org structured data now affects not only Rich Snippets in Google, but also whether an AI crawler can correctly understand your product.

AI crawlers do not like to guess.

If the product price is absent from structured data, the crawler either records a zero price or ignores the product card. This is a real problem for stores where the product template has not been touched for years. We have seen stores with thousands of SKU, where every second product in ChatGPT looked like “price not specified”. Reason: old Microdata markup incorrectly generated the offers field.

What must be on the product page:

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Product name",
  "image": "https://yourdomain.com/images/product.jpg",
  "description": "Product description",
  "sku": "ART-001",
  "brand": {
    "@type": "Brand",
    "name": "Brand name"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://yourdomain.com/product/url",
    "priceCurrency": "EUR",
    "price": "1250.00",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-07-01T00:00:00+03:00"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "23"
  }
}

Stock VirtueMart 4.x generates old Microdata markup embedded directly in HTML templates. It produces syntax errors and is generally worse read by AI extractors than JSON-LD, which Google in 2026 calls the best structured data format for its search. On Joomla Extensions Directory there are several free and paid extensions that plug into VirtueMart, intercept product variables (price, stock, images, reviews) and generate clean JSON-LD. The optimal choice depends on your template and the set of already installed extensions. We select the specific solution for each store; the general criterion is that this extension must generate JSON-LD without Microdata duplicates and receive updates at least once a year.

For OpenCart versions 2.x and 3.x the picture is different. Out of the box, Schema.org is not there at all. Template files catalog/view/theme/*/template/product/product.tpl (for version 2.x) or .twig (for version 3.x) contain no markup. This is a consequence of architecture: OpenCart leaves this to modules. Two options: pick an SEO extension from OpenCart marketplace that generates JSON-LD in the header template, or write the markup directly in the template. Before installing an extension, check whether it injects markup through JavaScript: if so, the AI crawler will not see it.

Three more markup types that people often forget about:

  • Organization: store name, address, contacts, founding year (foundingDate). Without it the AI system does not understand what kind of site this is.
  • BreadcrumbList: for navigation trails (category, subcategory, product). A simple type, but it can be duplicated by module and template, which bots reading the same thing twice definitely will not like.
  • AggregateRating: customer reviews, if any. Displaying stars on the page is not enough, this is a separate markup type.

For checking: Rich Results Test from Google at https://search.google.com/test/rich-results. Enter a URL of any product page. Errors in the Product block are priority number one.

New Schema.org recommendations for 2024 and 2026: if you have discounted products, Google recommends adding validFrom and validThrough properties with exact time and timezone in ISO 8601 format, for example 2026-08-31T23:59:59+03:00. For products with variants (size, color) Google recommends using the ProductGroup class with variesBy and hasVariant properties, so that the search engine can group variants under a single parent product. Both recommendations are in the Merchant Listing Structured Data guide on Google Search Central.


PHP version and JavaScript rendering: the hidden blocker

There are technical issues in old online stores that owners usually do not connect with AI search.

PHP 7.x in 2026. Joomla 3.x officially reached end of support in August 2023 by the official Joomla team announcement. OpenCart 2.x has been officially unsupported since 2018. PHP 8.0 reached end of support in November 2023 by PHP.net Supported Versions. If your server is still on PHP 7.4 or 8.0, the site is vulnerable to known CVE issues. A hacked site with spam code gets excluded from the Google index through the Security Issues report in Search Console. Moving from PHP 7.x to PHP 8.2 or 8.3 significantly speeds up server response. For crawlers, Perplexity’s agent and ChatGPT’s agent, this affects indexing.

Joomla 4.x and 5.x are natively optimized for PHP 8.2 and 8.3. VirtueMart 4.x and 5.x are maintained for modern Joomla and PHP versions. OpenCart 3.0.3.9 and above officially supports PHP 8.0, but not all templates and modules are updated for it.

JavaScript rendering of prices. Modules for dynamic currency recalculation and AJAX filtering load actual prices into the browser after the initial page load. AI crawlers read the HTML they get from the server. If prices are absent from the initial HTML code, the crawler records a zero price or ignores the product. Prices must render on the server side.

Open a product page with JavaScript disabled in the browser (DevTools, Settings, Disable JavaScript). If the price disappeared, the problem is found.

We have seen how stores with perfect Schema.org markup. But the markup was generated dynamically, so there was no price in the initial HTML. Rich Results Test showed everything green, and ChatGPT saw an empty product.


Authority: why AI picks some sources over others

EEAT (experience, expertise, authoritativeness, trust) for an online store is a specific set of signals that LLM systems read when assessing a source.

BrightEdge tracks: the overlap between what Google AI Overviews cites and Google’s classic top 10. Only one in seven sites from the top ten makes it into AI Overviews. According to an Ahrefs study, the figure was 76 percent not long ago, and now around 38 percent. Both numbers mean one thing: authority for AI is measured not by position, but by something else.

For a store this “something else” comes down to specific things.

The “About us” page must contain not marketing text but facts: founding year, physical location, real name. Schema.org: Organization with foundingDate, address, contactPoint properties.

Customer reviews with Schema.org. If reviews exist but are not marked up as Review or AggregateRating, the AI crawler does not see them.

The pages “Contact”, “Payment and delivery”, “Returns”, their presence and text content with real business processes is a trust signal. Google Search Quality Rater Guidelines list the presence of these pages. Often on stores with a fifteen year history the “Returns” page contains text like “according to applicable legislation”.


Checking: what is going on with you

Do not deal with everything at once.

1. Rich Results Test

Open https://search.google.com/test/rich-results, enter a product page URL. Errors in the Product block are priority number one. Warnings are acceptable.

2. robots.txt check

Open https://yourdomain.com/robots.txt. For Joomla: whether there is no manually added Disallow: /media/ line (never in the default, harms rendering). For Joomla 4.x and 5.x: whether the old Disallow: /templates/ line from 3.x has not remained (it should not be in modern versions). For OpenCart: whether /catalog/view/theme/ and /image/ are not blocked.

Check: whether there is a User-agent: OAI-SearchBot line with Allow: /. If the ChatGPT Search crawler is not mentioned at all and there is a block for all bots, then ChatGPT Search does not see you.

3. nosnippet check in GSC

URL inspection in GSC. Enter the URL of an important product page. Section View crawled page, HTML. There you will find the full HTML code Google received. Look for the line <meta name="robots" content="...nosnippet..."> or <meta name="robots" content="nosnippet">.

DevTools in the browser. Open a product page, F12, Network tab, reload, click the first HTML request, Response Headers. Look for X-Robots-Tag: nosnippet or similar.

View Source (Ctrl+U). Look for <meta name="robots" in head. Check what is written there: index, follow is the norm. nosnippet, max-snippet:0 or noindex is a problem. If important pages have nosnippet, they are invisible in Google AI Overviews.

In June 2026 Google launched specialized Search Generative AI reports in GSC. They show clicks and impressions directly in Google AI Overviews blocks.

Step 4. Manual check in ChatGPT and Gemini

Open ChatGPT (the version with Search) and enter a query related to your product or niche: “buy [product name] in Germany” or “[category name] specifications comparison”. Do the same in Gemini (https://gemini.google.com) and Perplexity (https://perplexity.ai).

If you are not there, it does not mean something broke right now. But the robots.txt check and the Rich Results Test will show what to do next.

[VISUAL: screenshot of Rich Results Test with successful Product schema validation. Green checkmarks for required fields name, image, offers.]


Typical mistakes of online store owners

With stores on outdated PHP platforms we meet three main mistakes.

Mistake 1: robots.txt blocks everyone except Googlebot

The most common scenario. A developer once “protected” the site from unwanted bots: Disallow: / for User-agent: * and separately allowed only Googlebot. Result: neither ChatGPT Search crawler nor Perplexity crawler can get in.

Check robots.txt:

User-agent: *
Disallow: /

If this is there, and below there is no Allow: / for the ChatGPT Search crawler and the Perplexity crawler, fix it first.

Mistake 2: Schema.org only on the home page

The extension is installed, the markup is configured, and everyone assumes all is well. But crawlers look for products on product pages, not on the home page. Check Rich Results Test on different product pages. On OpenCart it is more often the opposite: JSON-LD is on products, but there is no Organization in the header. What to do if you are in that situation.

Mistake 3: noindex on pagination and review pages

Setting noindex on /category/?page=2 used to be standard practice, this blocked entire arrays of content, including reviews. For AI systems, reviews are an important authority signal. Review which pages are closed from indexing and assess whether that is really needed.


Priority of actions: what to do first

Three steps by increasing complexity. Relevant for any legacy stack.

Step 1: fix robots.txt

Open the file through FTP or your hosting file manager. For Joomla with VirtueMart, remove manually added lines Disallow: /media/ (harms rendering of core CSS and JS) and Disallow: /templates/ (should not be in 4.x and 5.x; in 3.x, if present, must be paired with Allow: /templates/*.css$ and Allow: /templates/*.js$). Keep the Disallow: /components/ line, it is in the default of all versions and does not harm. For OpenCart, check that /catalog/view/theme/ and /image/ are not blocked. Add a separate block with explicit rules for seven AI bots following the example from the “Technical precondition” section above. A live reference block you can copy the structure from is available at https://kyivstend.com.ua/robots.txt. Save and verify the result through https://yourdomain.com/robots.txt.

This is the only change that does not require extensions, or PHP knowledge, or template rebuild. At the same time it removes the most common technical blocker.

Step 2: install JSON LD Schema.org on product pages

For Joomla 4.x and 5.x with VirtueMart: pick an extension from Joomla Extensions Directory by the criteria “support for the current Joomla branch”, “generates JSON-LD without Microdata duplicates” and “updated at least once a year”. For OpenCart versions 2.x and 3.x: alternatively you can write JSON-LD directly in the product.tpl template (version 2.x) or product.twig (version 3.x), using $product variables.

Configure Product schema: bind fields for price, availability, images and reviews. Verify Rich Results Test on product pages.

Step 3: PHP version and EEAT signals

Check the current PHP version via phpinfo or the hosting panel. If below 8.1, plan an upgrade to 8.3. For Joomla 4.x and 5.x with VirtueMart 4.x this is a standard procedure, but requires testing on a staging environment. For OpenCart 2.x, moving to PHP 8.x without first upgrading the core to version 3.x or 4.x is guaranteed to break at least half of the modules. Core first, then PHP.

Extend the “About us” page with real data and check for the Organization schema.

[VISUAL: step diagram of three steps. robots.txt (30 minutes, free), Schema.org (from 2 to 4 hours), PHP + EEAT (from a day to a week). With time and complexity markers.]


CMS specifics

General principles are the same, but each CMS has its own pain point in details.

Joomla with VirtueMart (versions 3.x, 4.x, 5.x)

robots.txt out of the box blocks /administrator/ and /tmp/, and this is correct. But VirtueMart sometimes adds the ?option=com_virtuemart line to Disallow, which cuts off the entire catalog from crawlers. Check whether you have such a line.

Component rendering in Joomla means AI crawlers see clean HTML. But JSON-LD in the template must be written manually or through an extension. Out of the box, VirtueMart 4.x outputs Microdata, and with it ChatGPT Search regularly misses the price.

OpenCart versions 2.x and 3.x

Main problem: URL duplicates from filters. OpenCart generates parameters like ?sort=p.price&order=DESC&limit=25, and if SEO URLs are enabled incorrectly, every filter combination gets a separate URL without canonical. Crawlers either ignore such pages or index the same products several times under different URLs.

The SEO Pro module is the standard solution, but we have seen installations where canonical points to the home page instead of the current page. Checking <link rel="canonical"> in the source code of the page manually is mandatory.

PHP 7.x on most live OpenCart 2.x is not only security, but also speed. The Perplexity agent cuts off the request at TTFB above 2 seconds, and such a store simply does not get into the source rotation.


Kyiv Stend: a real Joomla + VirtueMart store in 2026

Kyiv Stend, our own online store on Joomla 5.x with VirtueMart 4.x and PHP 8.3, current stack as of 2026. It has been continuously modernized since 2015 and is constantly kept in current state: the store gets updated; when a new stable PHP release arrives, we move to it.

The fact that a legacy store, which was launched back on Joomla 2.5 and VirtueMart 2.0, today runs on Joomla 5 without loss of indexed URLs, is itself the main proof that modernization on this stack is a working path, not a theory.

Around 2,890 URLs have been steadily present in Google Search Console over 10 years. During Google Core Updates, when competitors on outdated CMS record coverage drops, Kyiv Stend holds its level. The answer to “can Joomla with VirtueMart index normally in 2026” is unambiguous: yes, it can, with correct technical maintenance.

[VISUAL: screenshot of the GSC “Page indexing” report for kyivstend.com.ua with a stable level of around 2,890 URLs. Without Performance data.]


AI readiness checklist for a legacy store

robots.txt:

  • For Joomla: no manually added Disallow: /media/ line (harms rendering of CSS and JS)
  • For Joomla 4.x and 5.x: no Disallow: /templates/ line (relevant only for 3.x, and only paired with Allow: /templates/*.css$ and *.js$)
  • For OpenCart: /catalog/view/theme/ and /image/ are not blocked
  • ChatGPT Search crawler (OAI-SearchBot) has an explicit Allow: /
  • Real time agent (ChatGPT-User) has an explicit Allow: /
  • OpenAI training crawler (GPTBot) is blocked with Disallow: / if you want to protect content from model training (does not affect visibility in ChatGPT Search)
  • Perplexity crawler (PerplexityBot) has an explicit Allow: /
  • Anthropic crawler (ClaudeBot) has an explicit Allow: /
  • Google’s generative services token (Google-Extended) has an explicit decision: Allow: / for visibility in Gemini and AI Overviews, or Disallow: / to exclude from training
  • ByteDance crawler (Bytespider) is blocked with Disallow: / as aggressive and useless for visibility
  • Live example for comparison: https://kyivstend.com.ua/robots.txt
  • Cloudflare Radar logs checked: ChatGPT Search crawler and Perplexity crawler actually reach the site, old Bot Fight Mode rules and custom WAF do not block them

Schema.org:

  • Product schema is on product pages (not only on the home page)
  • Required fields: name, image, offers.price, offers.priceCurrency, offers.availability
  • Organization schema on the “About us” page or in the site header
  • BreadcrumbList on product and category pages
  • Rich Results Test shows no errors

Technical blockers:

  • PHP version 8.1 or above (recommended 8.2 or 8.3)
  • Prices render in the initial HTML, verified with JavaScript disabled in DevTools
  • Platform on a supported version (Joomla 4.x or 5.x, OpenCart 3.x and above)
  • nosnippet is not present on important product and category pages

EEAT signals:

  • “About us” page contains the founding year, contacts, real data
  • There are “Payment and delivery”, “Returns” pages with specific text
  • Customer reviews are marked up as AggregateRating or Review

Practical checks:

  • Rich Results Test passed for 5 or more product pages
  • Manual check in ChatGPT Search and Perplexity for niche queries

If these items are closed, your store is already well ahead of most CMS.

Send us a screenshot of the “Performance” report in GSC for the last 3 months. We will tell you in 15 minutes whether there are Core Update patterns there and what exactly dropped.


FAQ

Do I need to optimize my site for AI search, or is regular SEO enough?

Depends on the system. For Google AI Overviews standard indexing is enough. For ChatGPT Search and Perplexity you need to check robots.txt and Schema.org. In fact the only real problem is in robots.txt.

What is GEO optimization and why do I need to know about it?

Two sentences. GEO optimization is optimization of a site for visibility in generative search engines: ChatGPT Search, Gemini, Perplexity, Google AI Overviews. It differs from classic SEO by focus: not SERP positions, but citations in AI system answers. For a legacy store GEO comes down to three things: accessibility for AI crawlers, presence of structured markup, EEAT signals.

What is llms.txt and do I need to add it?

No. Google officially ignores it: in Google Search’s May 2026 AI optimization guide it is stated directly that llms.txt is not needed either for AI Overviews or for AI Mode. In practice AI crawlers almost never touch this file: as of June 2026 only 5.61 percent of top 10,000 sites have a valid llms.txt, and even in those the share of AI bot requests specifically to this file remains negligible. For a legacy store there is no point in adding llms.txt right now.

Does the PHP version affect whether AI crawlers see my site?

Yes, and doubly. PHP 7.x means unclosed CVE issues, hack risk, and then Google and the ChatGPT Search crawler exclude the site from the index. PHP 8.x means a faster server, and real time crawlers will less often cut off the session on timeout. One pulls the other.

Is it worth moving to a new platform for AI visibility?

No, if your store is on Joomla 4.x or 5.x with VirtueMart 4.x and PHP 8.x, or on current OpenCart 3.x with PHP 8.x. All technical requirements of AI systems are covered on the current stack without migration. If you are still on Joomla 3.x or OpenCart 2.x, plan an upgrade. But this is an upgrade inside the same platform, not a stack change, and the URL structure, done correctly, stays intact.