GEO, AEO, and AIO optimization for Joomla
For twenty years the goal of SEO was a blue link near the top on the Google search results page. That goal is shifting. People now ask ChatGPT, Google's AI Overviews, Perplexity, and Bing Copilot a full question and read the answer the machine writes back. Your site can still win, but only if the AI can find it, read it, trust it, and quote it.
Three new abbreviations describe this work: GEO (Generative Engine Optimization), AEO (Answer Engine Optimization), and AIO (AI Optimization, or optimizing for AI Overviews). They overlap heavily, and Joomla already gives you most of the tools you need to compete in all three.
This article explains how to optimize a Joomla website for AI search. It covers the basics for owners and editors, the daily setup for administrators, and the technical details for developers. You will see what each term means, what the AI engines read, and how to use Joomla core to become a source the machines quote.
Old SEO got you the click. The new game is to be the answer.
The goal is simple: help you understand GEO, AEO, and AIO well enough to make your Joomla site quotable.
1. The Basics
1.1 What GEO, AEO, and AIO Mean
The three terms come from different corners of the industry and describe the same broad shift, each with a slightly different focus:
| Term | Full name | Focus |
|---|---|---|
| AEO | Answer Engine Optimization | Getting picked as the short, direct answer to a question. |
| GEO | Generative Engine Optimization | Getting cited inside text that an AI generates. |
| AIO | AI Optimization / AI Overviews | Appearing in Google's AI Overview box above the results. |
You do not have to treat them as three separate projects. The same well-structured, trustworthy page tends to win all three at once. Think of them as one discipline seen from three angles.
1.2 How This Differs From Classic SEO
Classic SEO asks "how do I rank this page?" AI search asks "how do I get my facts into the answer?" The differences that matter:
- No click is guaranteed. The AI may answer fully and never send a visitor. Your win is the citation and the brand mention, not only the click.
- Passages beat pages. AI engines pull a sentence or a paragraph, not a whole page. A clear, self-contained passage is worth more than a long, rambling one.
- Trust is read by a machine. The model weighs how authoritative and consistent your site looks across the whole web, not just one page.
The good news for Joomla owners: Google states that SEO is still relevant for generative AI search. The habits that already make a strong SEO page - clean structure, honest expertise, machine-readable markup - are exactly the habits AI engines reward. See also the article SEO in Joomla.
1.3 The Two Ways an AI Reaches Your Content
An AI engine can use your site in two distinct ways, and they need different things from you:
| Path | When it happens | What it needs |
|---|---|---|
| Training | The model learned from a past crawl of the web. | Your pages were crawlable and clear months or years ago. |
| Retrieval | The engine fetches live pages to answer "right now". | Fast, crawlable, well-structured pages today, plus crawler access. |
You cannot change what a model already learned, but you fully control retrieval. Most of this article is about making the retrieval path work in your favour.
Back to top2. How AI Engines Read Your Site
2.1 The AI Crawlers
Just as Googlebot crawls for search, the AI companies run their own bots. Each one identifies itself with a User-agent string you can see in your server logs:
| User-agent | Run by | Purpose |
|---|---|---|
GPTBot |
OpenAI | Collects pages to train future models. |
OAI-SearchBot |
OpenAI | Builds the ChatGPT Search index. |
ChatGPT-User |
OpenAI | Fetches a page live when a user asks. |
Google-Extended |
Opt-in token for Gemini training and grounding. | |
ClaudeBot |
Anthropic | Crawls for Claude. |
PerplexityBot |
Perplexity | Indexes pages for Perplexity answers. |
Bingbot |
Microsoft | Powers Bing search and Copilot answers. |
Applebot-Extended |
Apple | Opt-in token for Apple Intelligence. |
CCBot |
Common Crawl | Open dataset many models train on. |
You decide, per bot, whether to allow or block it (section 8). For most Joomla sites that want AI visibility, the answer is to allow the search and retrieval bots so your pages can be cited.
2.2 What the Crawler Actually Sees
Most AI crawlers fetch your raw HTML and do far less JavaScript rendering than a modern browser. This has a direct consequence for Joomla:
- Content that Joomla renders server-side (normal articles, modules, menus) is visible.
- Content loaded later by JavaScript - a slider that fetches via AJAX, a "load more" button, a tabbed widget that only fills on click - may be invisible to the bot.
- Text baked into an image is invisible. The AI reads the
alttext, not the picture.
The lesson: put the words you want quoted into plain server-rendered HTML. Joomla does this by default, which is an advantage - do not undo it with a template that hides core content behind scripts.
2.3 Clean HTML Helps the Machine Read
AI engines parse your page into a structure: this is a heading, this is a list, this is a table, this is the answer to that heading. The cleaner your semantic HTML, the more reliably the machine maps meaning. A Joomla article that uses real <h2>, <h3>, <ul>, and <table> tags reads far better to a model than a wall of <div> elements styled to look like headings.
2.4 Retrieval-Augmented Generation (RAG)
Most live AI answers run on a pattern called RAG, Retrieval-Augmented Generation. It is worth understanding because it explains exactly what to feed the machine:
1. Search the engine searches its index or the live web
2. Retrieve it pulls the few passages that best match the question
3. Generate it writes an answer from those passages and cites them
Your page competes at step two. The engine retrieves small, self-contained chunks, not whole articles, so it favours content broken into clear definitions, short paragraphs, lists, and tables over long unbroken prose. Every habit in this article - answer-first paragraphs, question headings, FAQ blocks, schema - exists to make your passages easy to retrieve and safe to quote at step three.
Back to top3. Answer Engine Optimization (AEO)
3.1 Answer the Question First
An answer engine wants the answer, not a build-up to it. The single most effective AEO habit is the inverted pyramid: give the direct answer in the first one or two sentences under a heading, then expand with detail.
Heading: How long should a meta description be?
Weak: Meta descriptions have a long and interesting history
that dates back to the early days of search engines...
Strong: A meta description should be about 150 to 160 characters.
Longer text gets cut off in the search result. Here is why
that length works and how to write one...
The "Strong" version can be lifted whole into an answer box. The "Weak" version forces the machine to hunt, and it often picks a competitor instead.
3.2 Write Headings as Real Questions
People ask AI engines full questions: "how do I create a menu in Joomla?" Match that. Use natural-language question headings in your articles, then answer immediately below:
- Turn
<h2>and<h3>headings into the questions your audience actually types. - Keep each answer self-contained, so it makes sense pulled out of the page.
- Use one idea per paragraph. A paragraph that answers exactly one question is easy to quote.
3.3 The FAQ Block
A short FAQ section near the end of an article is the highest-value AEO block you can add. It packages several question-and-answer pairs in the exact shape answer engines prefer. Build it as plain HTML, then mark it up with FAQPage schema (section 6) so the structure is machine-explicit:
Q: Does Joomla generate an XML sitemap by itself?
A: No. Joomla core does not generate an XML sitemap. You add one with
an extension such as OSMap or JSitemap.
Q: Where do I set a per-article meta description in Joomla?
A: In Content → Articles → [article] → Publishing → Meta Description.
In Joomla you can write this directly in the article body, or build it from Custom Fields so the questions and answers stay structured and reusable (section 6.4).
Back to top4. Generative Engine Optimization (GEO)
4.1 Be the Source a Model Wants to Cite
GEO is about getting your site woven into the text an AI generates, ideally with a citation link. Research into how these systems choose sources points at a few patterns that lift your chances:
- Cite numbers and facts. Concrete figures ("Joomla 6 requires PHP 8.3 or newer") are quoted far more often than vague claims ("Joomla needs a modern PHP").
- Quote experts and sources. Pages that themselves cite authorities read as more reliable to the model.
- Use clear, plain language. Simple, direct sentences are easier to extract and reuse than dense marketing prose.
- Stay on topic. A focused page about one subject beats a page that wanders.
4.2 Depth and Freshness Win
Generative engines favour pages that cover a topic thoroughly and that look maintained. Two practical Joomla habits:
- Cover the whole question. One in-depth article usually outperforms five thin ones. The topic-cluster pattern - a pillar article linked to detail articles - gives the model both breadth and depth to draw from.
- Show the date. Joomla stores
publish_upandmodifiedon every article. Display "Published" and "Last updated" dates so both readers and models see the content is current.
4.3 Consistency Builds an Entity
AI models think in entities: a person, a company, a product is a thing they try to recognise across the whole web. The more consistently you describe yourself, the more confidently a model connects the dots and trusts you. Keep your brand name, author name, address, and core facts identical everywhere - your Joomla site, your social profiles, and any directory listing. In Joomla, the Contacts component and a single, consistent Organization schema block are how you state "this is who we are" in one clear voice.
4.4 Tags Are Entities, Not Labels
Joomla's Tags are a ready-made entity layer if you use them with discipline. A tag should name a real thing the AI already knows - a technology, a product, a place, a person - not a vague mood:
| Good tags (entities) | Weak tags (labels) |
|---|---|
Joomla, PHP, MariaDB, Security |
News, Interesting, General, Misc |
Entity tags do double duty. Their tag pages link related articles into a cluster (an internal-linking win), and the same consistent terms feed the about or keywords fields of your schema, so the model sees the same entities named the same way across the whole site.
5. AI Overviews and How the Engines Differ
5.1 What the AI Overview Is
Google's AI Overview is the AI-written summary that now appears above the classic blue links for many queries. It pulls sentences from several pages and lists them as sources. Earning a place in that box is the AIO part of the job, and it rewards the same structure as AEO and GEO, plus a few Google-specific signals.
5.2 You Still Need Classic SEO
The AI Overview draws mostly from pages that already rank on the first page of normal Google results. This is the key point many people miss: AIO is built on top of solid SEO, not instead of it. If your page cannot reach page one for a query, it rarely shows up in the AI Overview for that query either. So the SEO foundation still matters:
- Clean SEF URLs and a fast, mobile-friendly Joomla site.
- Unique titles and meta descriptions per page.
- Strong internal linking and a logical menu and category tree.
5.3 Win the Passage, Not Just the Page
Google often quotes a single passage into the Overview. To make your passage the chosen one:
- Put a crisp, standalone answer directly under a clear heading.
- Use lists and small tables - Google lifts these into Overviews readily because they are already structured.
- Keep sentences short enough to quote without editing.
This is why a Joomla article with honest headings, short paragraphs, and the occasional table is well placed: its shape matches what the Overview wants to extract.
5.4 ChatGPT Search
ChatGPT Search builds its own index and also fetches pages live. It leans on entities and trust: it favours pages with a clear subject, a named author and publisher, recent dates, and a brand it recognises across the web. It usually cites only a handful of sources, so being one of them is the whole game.
What to do in Joomla:
- Write a precise, descriptive title: "Joomla Custom Fields Explained" beats "Everything About Joomla Stuff".
- Add
OrganizationandPersonschema, and show publish and update dates. - Keep the brand, author, and key facts consistent everywhere (section 4.3).
5.5 Perplexity
Perplexity is the most citation-driven of the engines. It surfaces several sources next to every answer and clearly favours pages that are well-sourced and verifiable. It rewards content that itself references authoritative material rather than asserting claims with nothing behind them.
What to do in Joomla:
- Cite your sources in the body, and link to official documentation where it backs a claim.
- State facts plainly and keep them current, so they are easy to verify.
- Use clean, stable URLs and clear headings so a single passage is easy to attribute.
The pattern across all three engines is the same: clear structure, named expertise, and verifiable facts. Tailoring is a matter of emphasis - freshness and entity signals for ChatGPT, ranking and extractable passages for Google, citations and sources for Perplexity - not three separate projects.
5.6 The Other Assistants: Gemini, Copilot, Claude, Mistral
The big three are not the whole field, but the rest mostly reuse a search index you already optimize for, so the same work carries over. The differences worth knowing:
| Assistant | Grounds its answers on | What that means for you |
|---|---|---|
| Google Gemini | Google Search | Your SEO and AI Overview work doubles up here - no separate task. |
| Microsoft Copilot | The Bing index | Submit your sitemap to Bing Webmaster Tools, not only Google. Let Bingbot crawl. |
| Claude | Its own web search, plus ClaudeBot |
Same signals: clean structure and verifiable facts. Allow ClaudeBot if you want citations. |
| Mistral (Le Chat) | A partner web search | Smaller reach today; the same structured, sourced content is all you need. |
The lesson is encouraging: there is no per-assistant checklist to chase. A page that already wins Google and Bing, with clear structure and honest sourcing, is the page these assistants reach for too.
5.7 Local LLMs (Ollama and Friends)
A growing number of people run models offline with tools such as Ollama, LM Studio, or llama.cpp. It is worth being clear about what you can and cannot do here, because it is widely misunderstood:
- A plain local model has no internet access. It answers only from its frozen training data, so you cannot influence it in real time. Your page reaches it only if it was in the open-weight model's training set - decided at the cut-off, and out of your hands.
- The exception is a RAG or web-search tool wired onto the local model. Then it fetches live pages, and your clean HTML, structured data, and self-contained passages (section 2.4) help exactly as they do for any retrieval engine.
So the rule holds across the whole landscape: you optimize for the retrieval layer that feeds a model, never for the model itself. Do that well and you are ready for whichever assistant a visitor happens to use.
Back to top6. Structured Data and Schema for AI
6.1 Why Schema Matters More for AI
Structured data (usually JSON-LD using the schema.org vocabulary) describes your page in a form a machine reads without guessing: this is an Article, here is its author, this is a question and that is its answer. For AI engines this removes ambiguity. Instead of inferring that a block of text is an answer, the model is told so explicitly.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to optimize Joomla for AI search",
"datePublished": "2026-06-21",
"dateModified": "2026-06-21",
"author": { "@type": "Person", "name": "Peter Martin" }
}
</script>
6.2 The Schema Types That Help Most
| Type | Use it for |
|---|---|
Article / BlogPosting |
Any content page, with author and dates. |
FAQPage |
A list of questions and direct answers. |
HowTo |
Step-by-step instructions. |
BreadcrumbList |
The navigation trail, so the AI sees site structure. |
Organization / Person |
Who publishes the site and who wrote the page. |
WebSite |
The site as a whole, with its name and search action. |
Product / SoftwareApplication |
A product, extension, or app, with version and price. |
Event |
A dated event, with start time and location. |
6.3 Joomla Core Does Not Emit This
Be clear about a limit: Joomla core does not output JSON-LD or Open Graph by itself. The same as for classic SEO, you get structured data from one of three sources:
- Your template, if it builds schema from the active article.
- A plugin or component dedicated to structured data.
- A small custom plugin that hooks
onBeforeCompileHeadand adds the JSON-LD from the current document (section 11).
Because schema is not core, audit it. Test every type with Google's Rich Results Test and validator.schema.org before you rely on it, and make sure each block appears once.
6.4 Custom Fields Are a Clean Schema Source
Joomla's Custom Fields turn structured content into structured data with no hand-written JSON. Add fields such as FAQ Question, FAQ Answer, Step, or Rating to an article type. A template override or plugin then reads those values and emits matching FAQPage or HowTo schema. The editor fills a normal form field; the page gains precise, machine-readable markup that stays accurate as the content changes. This is the most maintainable way to feed AI engines from Joomla.
The trick is to map each field to a schema property once, then let the plugin do the rest. For a software or product article the mapping might be:
| Joomla Custom Field | Schema property |
|---|---|
| Product Name | name |
| Version | softwareVersion |
| Release Date | datePublished |
| Price | offers.price |
| Author | author |
Define the mapping once and it scales to every article of that type, so a site with hundreds of products emits consistent, accurate schema without anyone editing JSON by hand.
Back to top7. Content Structure for Quotability
7.1 Make Each Section Stand Alone
An AI engine rarely quotes a whole article. It lifts the one passage that answers the query. So write every section as if it might be read in isolation. Avoid "as we saw above" or "the next point" - phrases that only make sense in place. State the subject inside the passage so it survives extraction.
7.2 The Building Blocks AI Loves
| Block | Why the AI likes it |
|---|---|
| Short answer paragraph | Drops straight into an answer box. |
| Bulleted list | Already broken into discrete points. |
| Small comparison table | Structured rows the engine can read as facts. |
| Numbered steps | Maps cleanly to a "how to" answer. |
| Definition sentence | "X is ..." gives the model a clean fact. |
Every one of these is plain HTML you can write in the Joomla article editor. You do not need an extension to be quotable - you need discipline in how you structure the body.
7.3 A Quotable Article Skeleton
h1 The question or topic (one per page)
p Direct answer in the first two sentences
h2 A sub-question, phrased as people ask it
p Self-contained answer
ul The key points as a list
h2 Another sub-question
table A small comparison the AI can read as facts
h2 FAQ
short Q and A pairs + FAQPage schema
This is the same skeleton these Focus On articles use. It serves human readers and AI engines at the same time, which is the whole point: you write once and both audiences win.
Back to top8. Controlling AI Crawlers
8.1 The robots.txt Decision
Joomla ships a robots.txt.dist file in the site root; rename a copy to robots.txt to use it. There you decide which AI bots may crawl. To allow AI engines (the usual choice if you want citations), simply do not block them. To block a specific bot, add a rule by its user-agent:
User-agent: GPTBot
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: Google-Extended
Disallow: /administrator/
Two important truths. First, blocking GPTBot stops training crawls but does not necessarily stop a live ChatGPT-User fetch - the bots are separate, so block the exact agent you mean. Second, robots.txt is voluntary; well-behaved bots obey it, but it is a request, not a wall.
8.2 The Trade-off to Weigh
Blocking AI crawlers protects your content from training, but it also removes you from the answers those engines give. For most Joomla sites that publish to be found - a business, a service provider, a publisher - the value of being cited outweighs the cost of being read. Block only if you have a clear reason, such as paid or private content.
8.3 Help Discovery With a Sitemap
Allowing a crawler is not the same as helping it find every page. An XML sitemap lists your URLs so search and AI crawlers discover new content quickly instead of relying on links alone. Joomla core does not generate one; you add it with a well-known extension such as OSMap or JSitemap, covering articles, categories, and tag pages. Reference it at the foot of robots.txt and submit it to Google Search Console and Bing Webmaster Tools:
Sitemap: https://petermartin.nl/nl/sitemap-xml
Faster discovery means your freshest answers reach the index - and the retrieval pool - sooner.
8.4 llms.txt: An Emerging Idea
A newer proposal, llms.txt, is a Markdown file in your site root that points AI engines to your most important, clean content. It is not yet an official standard and major engines do not all honour it, so treat it as optional and low-cost rather than essential. If you add one, keep it simple:
# Peter Martin - Joomla specialist
> Joomla support, maintenance, and development.
## Focus On articles
- [Joomla SEO](https://petermartin.nl/en/focus-on/joomla/seo): how Joomla handles SEO in core
- [AI search](https://petermartin.nl/en/focus-on/joomla/geo-aeo-and-aio-optimization): GEO, AEO, and AIO for Joomla
Spend your effort on clean HTML and schema first; llms.txt is a small extra, not a substitute.
Back to top9. E-E-A-T and Trust Signals for AI
9.1 Why Trust Decides the Citation
An AI engine will not quote a page it does not trust, because a wrong answer reflects on the engine. Google's E-E-A-T framework - Experience, Expertise, Authoritativeness, Trustworthiness - describes the signals these systems weigh. For AI search the same signals decide whether you become a cited source or get skipped.
9.2 Building Trust With Joomla Core
Joomla gives you the building blocks without an extension:
- Real author pages. Use the Contacts component (
com_contact) and link a contact to a user, so each article shows a genuine author with a bio, photo, and credentials. - Trust pages. A clear About, Contact, Privacy, and Terms page. Plain Joomla articles, but AI engines and people both look for them.
- Freshness. Show
publish_upandmodifieddates so the content reads as maintained. - Evidence of experience. Real screenshots, measured results, and case studies. Content that explains how something actually behaves is itself an experience signal.
9.3 Trust Is Also Technical
Part of trust is the state of the site itself. A site that leaks data or runs old code looks unreliable to both crawlers and quality systems:
- Serve everything over HTTPS.
- Set modern security headers with the core HTTP Headers plugin (see the separate Focus On article on HTTP Headers).
- Keep Joomla and every extension up to date, and protect admin logins with multi-factor authentication.
10. Setting It Up in Joomla
10.1 Where the Work Happens
Almost everything in this article maps to a place in Joomla you already have. This table ties the concept to the screen:
| Goal | Where in Joomla |
|---|---|
| Question headings + answers | The article body editor. |
| FAQ / HowTo structure | Components → Fields (Custom Fields) on an article type. |
| Author / entity | Components → Contacts, linked to a user. |
| Dates shown | Article options: show Created and Modified dates. |
| Crawler control | robots.txt in the site root. |
| Schema / Open Graph | Template, plugin, or a custom onBeforeCompileHead plugin. |
| Speed for retrieval | Global Configuration cache + Page Cache plugin. |
10.2 Custom Fields, Step by Step
To make a reusable FAQ that can feed schema, build it from fields instead of typing it into the body:
1. Components → Fields → New → type "Text" or "Editor"
2. Create paired fields, e.g. "FAQ Question 1" and "FAQ Answer 1"
3. Assign them to the article type you use for guides
4. Fill them per article in the Fields tab of the editor
5. A template override or plugin reads them and emits FAQPage schema
The payoff: the question and answer live as structured data, not loose text, so both the visible FAQ and the JSON-LD stay in sync automatically.
10.3 Speed Is Part of AIO
Live-retrieval bots and Google alike favour fast pages. The Joomla levers are the same as for general performance: turn on Caching and the System - Page Cache plugin, enable Gzip or server-level Brotli, ship right-sized WebP or AVIF images, run a lean template, and stay on a current PHP version. A page that times out is a page that never gets quoted.
Back to top11. Under the Hood (Developer View)
11.1 Inject Schema With a Plugin
The clean, template-independent way to add JSON-LD across a Joomla site is a small system plugin that hooks the head-compile event. It reads the current document and writes a script block into the head:
use Joomla\CMS\Factory;
public function onBeforeCompileHead(): void
{
$app = Factory::getApplication();
if (!$app->isClient('site')) {
return;
}
$doc = $app->getDocument();
$schema = [
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => $doc->getTitle(),
'datePublished' => '2026-06-21',
'author' => ['@type' => 'Person', 'name' => 'Peter Martin'],
];
$doc->addCustomTag(
'<script type="application/ld+json">'
. json_encode($schema, JSON_UNESCAPED_SLASHES)
. '</script>'
);
}
Hooking onBeforeCompileHead keeps the markup out of the template, so it survives a template change and applies site-wide from one place.
11.2 Read the Real Article Data
To build accurate schema you want the live article, not guesses. On a content view you can pull the active article and its fields through the modern MVC factory:
$app = Factory::getApplication();
$input = $app->getInput();
$id = (int) $input->getInt('id');
$article = $app->bootComponent('com_content')
->getMVCFactory()
->createModel('Article', 'Site', ['ignore_request' => true])
->getItem($id);
// Custom Fields for this article (e.g. FAQ pairs):
$fields = \Joomla\Component\Fields\Administrator\Helper\FieldsHelper::getFields(
'com_content.article', $article, true
);
From $article you get title, introtext, publish_up, modified, and metadesc; from $fields you get your FAQ or HowTo values. Feed those into the schema array so the JSON-LD always matches what is on the page.
11.3 The Meta Tags Still Come From the Document
Open Graph and the classic meta tags ride on the same Document object that classic SEO uses:
$doc->setMetaData('og:title', $doc->getTitle(), 'property');
$doc->setMetaData('og:type', 'article', 'property');
$doc->setMetaData('description', $article->metadesc);
AI engines and social platforms both read these, so a single plugin can set Open Graph, meta description, and JSON-LD together from the live article.
11.4 Where the Data Lives
Every AI-readable signal in this article ultimately comes from a Joomla database table. Knowing them helps when you build schema, export content, or debug what an engine actually receives:
| Table | Holds | Useful for AI |
|---|---|---|
#__content |
Articles: title, introtext, fulltext, metadesc, publish_up, modified. |
The body text and the freshness dates models prefer. |
#__categories |
The category tree. | A logical hierarchy that signals topic structure. |
#__tags |
Tag definitions. | Your entity layer (section 4.4). |
#__fields |
Custom Field definitions. | The shape of your structured data. |
#__fields_values |
The actual per-article field values. | The clean facts that feed FAQ, HowTo, and Product schema. |
The most valuable pair for AI work is #__fields and #__fields_values: they hold your facts as discrete, queryable values instead of prose buried in #__content, which is exactly the form a schema generator or an export pipeline wants.
12. Headless and the Web Services API
12.1 When Joomla Is the Back-End
If you run Joomla headless - a separate React, Vue, or static front-end pulling content through the Web Services API - the AI-readable markup becomes the front-end's job. Joomla still serves the data:
curl -H "X-Joomla-Token: <token>" \
https://site.tld/api/index.php/v1/content/articles/42
The JSON includes title, introtext, metadesc, publish_up, modified, and the alias - everything needed to rebuild the head and the schema on the other side.
12.2 Render Real HTML for the Bots
AI crawlers, like search crawlers, read HTML and run little JavaScript. A headless front-end must therefore render server-side (SSR) or generate static pages, so the bot sees finished content and tags. A blank shell that only fills in the browser is close to invisible to AI engines. The rule: every AEO and GEO signal - the answer paragraph, the FAQ, the JSON-LD - must exist in the server-rendered HTML, not appear only after hydration.
Back to top13. Measuring AI Visibility
13.1 You Cannot Manage What You Cannot See
AI search gives you less feedback than classic search, but you are not blind. Combine a few sources:
- Google Search Console. It is starting to fold AI Overview impressions into search performance, and it remains the truth source for which pages Google can index at all.
- Server log analysis. Filter your access logs for
GPTBot,PerplexityBot,ClaudeBot, and friends to see which AI engines crawl you and how often. - Manual prompts. Ask the engines your target questions and see whether you are cited. Crude, but direct.
- Referral traffic. Watch your analytics for visits from
chatgpt.com,perplexity.ai, and similar - proof an AI sent a real person.
13.2 Read the Logs in Joomla's Environment
On the Docker or hosting stack that runs Joomla, the web server access log is where AI bots show up first. A simple filter tells you who is reading you:
grep -E "GPTBot|PerplexityBot|ClaudeBot|OAI-SearchBot" access.log \
| awk '{print $1, $12}' | sort | uniq -c | sort -rn
If a bot you want never appears, check that robots.txt does not block it and that the pages it would want are fast and reachable. If a bot you do not want crawls heavily, that is your cue to add a block (section 8).
13.3 Track AI Referrals in Analytics
When an AI answer carries a citation and a real person clicks it, that visit shows up in your analytics as a referral. In Google Analytics 4 you can isolate this traffic by filtering the session source for the AI hostnames:
chatgpt.com
perplexity.ai
gemini.google.com
copilot.microsoft.com
Build a segment or an exploration in Reports → Acquisition → Traffic acquisition that matches those sources, then compare sessions, engagement rate, and conversions against normal organic search. This tells you not just that AI engines crawl you, but that they send visitors who act - the clearest proof the work pays off.
14. Common Mistakes and Pitfalls
14.1 Chasing AI and Ignoring SEO
Symptom: you add schema and an llms.txt but still appear nowhere in AI Overviews.
Fix: AI Overviews draw from pages that already rank. Fix the SEO foundation first - indexable, fast, well-linked pages - then layer AEO and GEO on top.
14.2 The Answer Is Buried
Symptom: your page covers the topic but never gets quoted.
Fix: move the direct answer into the first two sentences under each heading. Engines lift the clear passage, not the slow build-up (section 3.1).
14.3 Content Hidden Behind JavaScript
Symptom: the text you want quoted loads via a slider, tab, or "load more" and the AI never sees it.
Fix: put quotable content in server-rendered HTML. Joomla does this by default; do not let a script-heavy template hide it.
14.4 Blocking the Bots by Accident
Symptom: no AI engine crawls you, and you want them to.
Fix: check robots.txt for an over-broad Disallow and confirm the AI user-agents are not blocked. Remember a development-site noindex left on at launch blocks classic and AI search alike.
14.5 Schema That Does Not Match the Page
Symptom: you mark up an FAQPage, but the visible page has no FAQ, or the numbers differ.
Fix: schema must describe what a visitor actually sees. Generate it from the real content (Custom Fields are ideal) and validate with the Rich Results Test.
14.6 Thin, Scattered Content
Symptom: many short pages, none of them authoritative on anything.
Fix: consolidate into deeper pillar articles with linked detail pages. Depth and consistency feed the entity signals GEO rewards (section 4).
14.7 Inconsistent Brand and Author Facts
Symptom: your name, business, or address reads differently across pages and profiles, and AI engines mix you up.
Fix: state the same facts everywhere, anchor them with one Organization or Person schema block, and link a real Contact to each author.
15. Best Practices
If you only remember a few things from this article, remember these:
- Build AI optimization on top of solid SEO, never instead of it.
- Answer the question in the first one or two sentences under every heading.
- Phrase headings as the questions people actually ask.
- Add an FAQ block and mark it up with
FAQPageschema. - Keep each section self-contained so it survives being quoted alone.
- Put quotable content in server-rendered HTML, not JavaScript widgets.
- Feed schema from Custom Fields so the markup matches the content.
- Expose your structure - an XML sitemap, entity tags, and clean categories - so engines discover and connect your pages.
- Cite concrete facts, numbers, and sources - they get quoted most.
- Show real authorship with the Contacts component and consistent entity facts.
- Decide your AI-crawler policy in
robots.txton purpose, not by accident. - Keep the site fast, secure, and up to date so retrieval bots can read it.
- Measure with Search Console, server logs, and direct prompts.
16. Quick Reference
AEO Answer first, 1-2 sentences under each heading
GEO Cite facts/numbers; deep, consistent, on-topic pages
AIO Win a first-page rank, then the AI Overview passage
RAG search → retrieve → generate; win the retrieved chunk
HEADINGS Phrase h2/h3 as the questions people ask
FAQ Q and A block + FAQPage schema near the end
SCHEMA Article / FAQPage / HowTo / BreadcrumbList /
Organization / Person / Product / Event
SCHEMA SOURCE not core: template, plugin, or Custom Fields
CUSTOM FIELDS Components → Fields → feed FAQ/HowTo schema
TAGS use as entities, not loose labels
AUTHOR/ENTITY Contacts component + consistent Person/Organization
SERVER HTML quotable text must be server-rendered, not JS-only
CRAWLERS GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot,
PerplexityBot, Google-Extended, CCBot
ROBOTS.TXT allow = do not block; block = Disallow per user-agent
SITEMAP XML sitemap (OSMap/JSitemap) speeds AI discovery
LLMS.TXT emerging, optional; clean HTML + schema come first
SPEED Page Cache + Gzip/Brotli + WebP/AVIF + lean template
TRUST HTTPS + security headers + updates + real authorship
DEVELOPER onBeforeCompileHead plugin adds JSON-LD site-wide
DATA bootComponent('com_content') → getMVCFactory()
DB TABLES #__content, #__fields_values, #__categories, #__tags
HEADLESS API returns fields; front-end must render HTML + schema
MEASURE Search Console + access-log grep + manual prompts
Back to top17. Summary
Optimizing a Joomla site for GEO, AEO, and AIO is less about new tricks and more about doing the fundamentals so well that a machine can read, trust, and quote you. With Joomla core and a little discipline you can:
- Answer cleanly by giving the direct answer first, under question-shaped headings.
- Structure for extraction with lists, small tables, and self-contained passages.
- Mark up meaning using FAQ, HowTo, and Article schema, fed from Custom Fields.
- Build an entity with consistent brand and author facts and the Contacts component.
- Stay readable to bots by serving real HTML and keeping the site fast and secure.
- Control access deliberately through
robots.txt, allowing the engines you want to cite you. - Measure with Search Console, server logs, and your own test prompts.
The throughline is that good SEO and good AI optimization are the same craft seen twice. A clear, fast, trustworthy Joomla page that answers a real question well is exactly what both a search engine and a generative engine reward.
If your traffic is sliding while AI answers rise, or you are unsure whether the engines can even read your site, it pays to check these foundations before chasing the next shortcut. The fix is often a buried answer, content hidden behind JavaScript, or schema that does not match the page - small things in Joomla that decide whether the machines quote you or your competitor.
Back to top

Peter is a Joomla specialist and a Linux admin for fast, secure and scalable websites.
Frequently Asked Questions
SEO remains the foundation of online visibility and is not being replaced by GEO, AEO, or AIO. Instead, these newer approaches build on traditional SEO principles. Search engines and AI systems still rely on crawlable websites, high-quality content, authority, and trust signals. The difference is that modern optimization also focuses on how content is interpreted, summarized, and cited by AI-powered search and answer engines. A strong SEO foundation is therefore essential for success in GEO, AEO, and AIO.
Start by improving your existing content rather than creating entirely new content. Focus on answering real user questions with clear, well-structured content. Use logical headings, concise paragraphs, bullet points, and consistent terminology. Strengthen internal links, implement structured data where appropriate, and ensure your technical SEO is in good shape. AI systems are more likely to reference content that is easy to understand, well-organized, trustworthy, and directly answers user intent.
Schema markup helps search engines and AI systems understand the meaning and structure of your content. While schema alone will not guarantee visibility in AI-generated answers, it provides valuable context about topics, entities, products, organizations, and FAQs. Structured data is therefore an important supporting element for GEO, AEO, and AIO strategies, especially when combined with high-quality content and strong technical SEO.
There is currently no universal ranking report for AI visibility. The best approach is to test relevant questions in platforms such as ChatGPT, Google AI Overviews, Gemini, and Perplexity, while monitoring referral traffic and brand mentions from AI-driven sources. Visibility in AI systems is often measured through citations, mentions, and traffic quality rather than traditional rankings.
Content that clearly answers questions, demonstrates expertise, and is logically structured performs best. AI systems prefer content that is easy to interpret and cite, including concise explanations, question-and-answer sections, lists, examples, well-organized headings, and original insights based on real experience.
Yes. Many AI platforms can access and analyze public web pages, either through their own crawlers or via search integrations. To increase the likelihood that your content is referenced, your pages should be publicly accessible, technically sound, and contain clear, trustworthy information that AI systems can understand and cite. SEO fundamentals remain essential for this process.


