Guide Joomla 4, 5 and 6 · Updated October 2026
Joomla SEO in 2026: the complete guide for Joomla 4, 5 and 6
Joomla SEO (search engine optimisation) is the work of setting up a Joomla site and writing its pages so that Google, Bing and AI answer tools understand each page and find it at one clean address. Joomla core does more of this than most people think, and leaves a few real gaps. This guide covers both, setting by setting, with the exact admin paths.
- Settings checked in the Joomla 6.0.2 source
- Google and Bing rules linked to their own pages
How to check your Joomla SEO in 15 minutes
These ten checks catch most of the Joomla SEO faults we come across. Tick them off now; each links to the part that explains why.
- Use URL Rewriting is on (htaccess.txt renamed to .htaccess) and Remove IDs from URLs is Yes.
- Strict Routing and Strict handling of index.php are on (after a test on a copy).
- Every page answers at one https address and prints exactly one canonical tag.
- Your home page has an h1 that says what you do, not "Home".
- Your main pages have their own title and meta description.
- robots.txt doesn't block /components/, /media/ or /templates/, and it names your sitemap.
- The System - Redirect plugin is enabled and collecting 404s.
- The main image at the top of each page is not lazy-loaded.
- Search Console and Bing Webmaster Tools are verified, with your sitemap submitted.
- Your CDN or firewall lets Googlebot, Bingbot and the AI search bots through.
Stuck on one of them? Ask our Joomla developers and say which.
Latest Google Search and Joomla updates
This box lists the latest entries from the Google Search Status Dashboard, the Search Central blog, the Bing Webmaster blog and the Joomla Security Centre, and it refreshes itself every hour. When a Google core update is rolling out (the March and May 2026 ones each took about twelve days), change nothing in a hurry: watch Search Console and judge after the rollout ends. A Joomla security release is different. Install it the same day, and if someone got in first, see how we repair a hacked Joomla site.
Latest search updates
Checked 13 Oct 2026, 15:44 UTC- BingIntroducing Topics Portfolio (Beta) in AI Performance
- Search CentralNew learning paths: curated YouTube playlists for Search fundamentals and Technical SEO
- Joomla securityCore - XSS filter bypass in InputFilter via whitespace characters in HTML data URIs
- Joomla securityCore - XSS filter bypass in InputFilter via HTML5 entity decode mismatch
- Google rankingSeptember 2026 spam update
- Search CentralAnnouncing web multimodal Search performance reporting in Search Console
From the Google Search Status Dashboard, the Search Central blog, the Bing Webmaster blog and the Joomla Security Centre. Refreshed every hour.
Part 1
Is Joomla good for SEO?
Yes. Joomla core gives you search-engine-friendly URLs, a title and meta description for every page, robots settings per menu item, multilingual versions linked with hreflang and, since Joomla 5, schema.org structured data. It also returns a real 404 status for missing pages and has its own Redirects component (more on both in part 5).
Core doesn't build an XML sitemap or print Open Graph tags, and its only canonical tag (off until you fill in Site Domain) copies the query string, so tracking and sorting variants stay separate. Each of those needs your template or an extension.
Joomla's SEO settings and their defaults
| Setting | Where | On a new install |
|---|---|---|
| Search Engine Friendly URLs | Global Configuration › Site | Yes |
| Use URL Rewriting, Add Suffix to URL, Unicode Aliases | Global Configuration › Site | No |
| Site Name in Page Titles | Global Configuration › Site | No |
| Force HTTPS | Global Configuration › Server | None |
| Remove IDs from URLs | Articles › Options › Integration | Yes (often No on sites upgraded from Joomla 3) |
| Strict Routing, Strict handling of index.php | System - SEF plugin | On for installs since 5.2; off on upgraded sites |
| Site Domain (canonical tag) | System - SEF plugin | Empty, so no canonical |
| System - Redirect, Language Filter, Page Cache | Plugins | Disabled |
Where Joomla sites lose rankings
Rarely in Joomla itself. Most of the damage we see comes from what sits around it:
- Settings nobody revisited. A site upgraded from Joomla 3 keeps its old URL options and its old robots.txt, because upgrades don't touch either.
- Templates and page builders that print a second canonical, hide text behind JavaScript, or load far more CSS than the page uses (see part 7).
- Extensions that create their own URLs for the same content, or were abandoned in the Joomla 3 days and still run.
The rest of this guide goes through each one with the setting that fixes it. For the short version, we list the faults we meet most often on our Joomla SEO service page.
Part 2
Clean URLs in Joomla: SEF, rewriting, IDs and Strict Routing
A clean Joomla address such as /news/spring-offer comes from a menu item for its category plus four settings working together: Search Engine Friendly URLs, URL rewriting, Remove IDs from URLs and the Strict Routing option in the System - SEF plugin. Get them wrong and one article answers at several addresses:
/index.php?option=com_content&view=article&id=12&catid=8 /index.php/news/12-spring-offer /component/content/article/spring-offer?catid=8 /news/spring-offer
Turn on URL rewriting to remove index.php
- Open System › Global Configuration › Site › SEO. Search Engine Friendly URLs should already say Yes; it's the default.
- Prepare the server before you touch Use URL Rewriting. On Apache or LiteSpeed, rename htaccess.txt in the site root to .htaccess. On IIS, rename web.config.txt to web.config. Nginx has no such file: the rule goes in the server block (Joomla's Nginx page has the full set).
- Set Use URL Rewriting to Yes and save, then open a few inner pages. If they 404, the server part isn't working yet. Switch it back and recheck step 2.
location / { try_files $uri $uri/ /index.php?$args; }
If a .htaccess already exists, read it before you replace it: old sites often keep redirects there, and some hosts add their own rules. In a subfolder install you may also need to uncomment the RewriteBase line.
Suffix and Unicode aliases: decide once
Add Suffix to URL (off by default) puts .html on article addresses. It's a matter of taste, but switching it on a live site changes every article URL, so also turn on Enforce a suffix by redirect in the System - SEF plugin (Joomla 5.2 and later). With Unicode Aliases off, also the default, Joomla turns über into ueber. Turn it on only if your readers search in a non-Latin script; it changes only aliases saved from then on.
Remove IDs from URLs
Go to Content › Articles › Options › Integration › Routing and set Remove IDs from URLs to Yes. Fresh Joomla 4, 5 and 6 installs already have it on, but a site carried over from Joomla 3 often still shows /news/12-spring-offer. Since Joomla 5.3, the old numbered address answers with a 301 to the new one while the System - SEF plugin is enabled. On older versions, check that the old addresses don't return 404, and redirect them if they do.
The System - SEF plugin: Strict Routing, index.php and trailing slashes
Open System › Manage › Plugins and search for System - SEF. Since Joomla 5.2 it has five options. Fresh 5.2+ installs switch on the strict ones; sites upgraded from Joomla 4 or early 5.x keep them off.
| Option | What it does | Our advice |
|---|---|---|
| Strict Routing | 301-redirects non-SEF addresses to the SEF one, and stops Joomla attaching an article to whatever menu item the visitor happened to be on. | Yes, after testing on a copy |
| Strict handling of index.php | Redirects /index.php/news/... to /news/... when URL rewriting is on. | Yes |
| Trailing slash for URLs | Forces one form, with or without the slash (only when Add Suffix is off). | Enforce URLs without trailing slash |
| Enforce a suffix by redirect | Redirects addresses missing the .html suffix. | Yes, if you use suffixes |
| Site Domain | Adds a canonical tag on your chosen domain. | See duplicates |
Your menu tree is your URL structure
Joomla builds each address from the aliases of the menu items above it: /services/seo is a menu item with the alias seo under one with the alias services. Rename an alias or move an item to another parent and every address beneath it changes. No automatic redirect covers that, so plan the menu before launch and add 301s whenever you reorganise it.
When no menu item points to an article or its category, Joomla falls back to /component/content/article/spring-offer?catid=8. That address carries a query string and changes the day someone adds a menu item for the category. Give every category a home instead: a Category Blog or Category List menu item, in a hidden menu if you don't want it in the navigation. And note that the default robots.txt line Disallow: /components/ doesn't cover these /component/ addresses.
Part 3
Duplicate content and canonical tags in Joomla
A canonical tag (<link rel="canonical">) tells search engines which address is the original when one page answers at several. Joomla core prints none by default, so Google decides for itself, and it doesn't always pick yours. The URL settings in part 2 remove most duplicates. Query parameters create most of the rest:
- Pagination: category blog and list pages use ?start=10, ?start=20 and so on.
- List controls: category lists also accept ?limit=, filter-search, filter_order and filter_tag, and each combination is another crawlable address.
- Tracking tags: newsletter links with utm_source, and ChatGPT, which adds utm_source=chatgpt.com to links it sends.
- Feeds: category, featured and tag pages link to RSS and Atom versions (?format=feed&type=rss). If nobody reads them, set RSS Feed Link to Hide in Content › Articles › Options › Integration, and again in Components › Tags › Options › Integration for tag pages.
One address for the whole site: https, with or without www
Pick one form of your domain and send every other form to it with a 301. System › Global Configuration › Server › Force HTTPS is None on a new install. Once https works on your server, set it to Entire Site and Joomla redirects http to https with a 301. Joomla has no setting for www. Its htaccess.txt has an empty Custom redirects block for that rule, so add it there yourself. This one sends www to the bare domain:
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
The Site Domain canonical keeps the query string
In System › Manage › Plugins › System - SEF, the Site Domain field switches on Joomla's only core canonical tag. Enter the full address you want, such as https://www.example.com (Joomla treats www and non-www as different domains). The tag then uses that domain plus the path and query string of whatever was requested. That names one host in the tag, but it doesn't merge parameter variants. Each one claims to be its own original:
<link rel="canonical" href="https://example.com/news/spring-offer?utm_source=newsletter">
So Site Domain is worth filling in, and it isn't the whole answer. A canonical that drops tracking and sorting parameters needs your template, an SEO extension or a few lines in a template override, the kind of small job we do in Joomla extension development.
When two canonical tags disagree
View the source of any page and search for canonical. Templates, page builders and SEO extensions often print their own, and two that disagree are common, such as https://example.com/services and https://www.example.com/services/. Google treats a canonical as a strong signal, not a guarantee, and two that contradict each other leave it to make its own choice. Keep the one you trust and switch the other off; part 14 has a quick count to run after installing anything.
Paginated pages name themselves as canonical
Google's pagination guide says to give each page of a list its own canonical, not to point page 2 at page 1, and it no longer uses rel="next" and rel="prev". So /news?start=10 should name itself as canonical, without any ?limit= or ordering parameters tacked on.
Reading the Search Console report
The Pages report under Indexing tells you how Google sees your duplicates:
- Duplicate without user-selected canonical: Google found copies with no canonical and chose one itself.
- Duplicate, Google chose different canonical than user: your tag was overruled. Check that your internal links, sitemap and canonical all name the same address.
- Alternate page with proper canonical tag: nothing to fix. The canonical is doing its job.
Part 4
Page titles, headings and meta descriptions in Joomla
Joomla takes an article's page title from its menu item first, then from the article, and its meta description from the article first, then the menu item, then the site-wide default.
| Field | Where to find it | Wins when |
|---|---|---|
| Menu item title | Menus › your menu › item › Page Display › Browser Page Title | The menu item links straight to that page |
| Article title | Content › Articles › article › Options › Browser Page Title | The menu item field is empty, or the article has no menu item |
| Article description | Content › Articles › article › Publishing › Meta Description | Always, when filled in |
| Menu item description | Menus › item › Metadata › Meta Description | The article or category has none of its own |
| Site-wide description | System › Global Configuration › Site › Metadata | Nothing else is set (a multilingual site tries the content language's description first) |
Titles
Give each page that matters a title that says what's on it, in the words people search with. System › Global Configuration › Site › SEO › Site Name in Page Titles is set to No by default. Set it to After and you get "Spring offer - Your Company", which matches Google's advice to put the site name at the start or end with a separator. Google cuts long titles to fit the screen, so put those words first.
Headings: which text becomes the h1
Joomla prints the menu item's Page Heading as the h1 when Show Page Heading is on, and the article or category title when it's off. A fresh install's Home menu item has Show Page Heading on and Page Heading empty, so Joomla falls back to the menu item's name: the home page's h1 reads "Home", and so does its browser title. Fill in Page Heading and Browser Page Title in Menus › Main Menu › Home › Page Display with what the site does, or switch the heading off if your template or page builder prints its own. Each page should end up with one h1 that names it.
Meta descriptions
Google says there's no length limit and trims the snippet to fit the device, and that identical descriptions on every page aren't helpful. Joomla's site-wide fallback is the usual cause: every page without its own description gets the same sentence. Write descriptions for the pages that matter, then consider emptying the global one, so the rest get a snippet Google writes from the page instead of a copy. With hundreds of articles and no descriptions, start with the twenty that get the most impressions in Search Console, or have our Joomla SEO service write them page by page.
When SP Page Builder builds an article, the description still comes from the article's Publishing tab. The builder leaves the intro text empty and keeps only a plain-text copy of the page, without headings or links, so extensions that write descriptions or Open Graph text automatically cut it from that flat copy. Write it by hand.
Open Graph and robots
Joomla core prints no Open Graph tags, so link previews on Facebook, LinkedIn and messaging apps depend on your template, your page builder or an extension. Use one of them, not two.
The global Robots setting "index, follow" prints nothing at all, which is fine: it's what search engines assume anyway. Set noindex per menu item in its Metadata tab for thank-you pages, Smart Search results, login and registration. Joomla doesn't do that for you, though it does mark the print view noindex. Meta keywords are history: Joomla 6 doesn't print them for articles, and Google doesn't use them. The Keywords field still has one use: the Articles - Related module lists other articles that share a keyword, which gives you internal links without extra work.
Part 5
robots.txt, XML sitemaps and 404s in Joomla
Joomla writes robots.txt once, at install, and never updates it; it ships no XML sitemap; and it only records 404s if you turn on the System - Redirect plugin. All three deserve ten minutes.
robots.txt
The file Joomla 4, 5 and 6 install blocks fifteen folders for every crawler, including /components/, /modules/ and /plugins/. That's where many extensions keep the CSS and JavaScript their pages load. SP Page Builder, for one, loads its files from /components/com_sppagebuilder/assets/. Google asks you not to block files a page needs to be understood.
Sites that started on early Joomla 3 can be worse off: those files also blocked /media/ and /templates/, and Joomla 3.2 blocked /images/ too. Because updates never touch robots.txt, a file from those days can still be live. Joomla has no screen for it, so open it through your host's file manager or FTP. A sensible starting point:
User-agent: * Disallow: /administrator/ Disallow: /api/ Disallow: /bin/ Disallow: /cache/ Disallow: /cli/ Disallow: /includes/ Disallow: /installation/ Disallow: /language/ Disallow: /layouts/ Disallow: /libraries/ Disallow: /logs/ Disallow: /tmp/ Sitemap: https://www.example.com/sitemap.xml
Remember that robots.txt stops crawling, not indexing. To keep a page out of Google, let it be crawled and give it noindex.
XML sitemaps
Joomla core has no sitemap generator. Extensions such as OSMap or JSitemap build one. A good sitemap lists only addresses you want in search: the canonical version, returning 200, without noindex, redirects or /component/ duplicates. Google ignores priority and changefreq, and uses lastmod only when it's consistently accurate. Each file holds up to 50,000 URLs or 50 MB. Submit it in Search Console's Sitemaps report and in Bing Webmaster Tools, and add the Sitemap line above.
404s and the Redirect plugin
- Enable System › Manage › Plugins › System - Redirect. It's off by default. Leave Collect URLs on.
- Each address that returns 404 now appears, unpublished, in System › Manage › Redirects, with the page that linked to it and a hit count.
- Add the new address and publish the entry. Joomla sends it as a 301.
It has limits. It only catches 404s that Joomla itself produces, not missing images the web server answers, and it can't redirect an address that still loads something. On sites that bots probe a lot, the list grows fast, so clear the noise weekly. A burst of 404s for pages you never made, full of pharmacy words or Japanese text, often means spam pages left behind by a hack; see part 11, or our hacked Joomla site cleanup.
Three Search Console statuses worth knowing
- Not found (404): map it in Redirects if the page had links or traffic; otherwise let it go.
- Crawled - currently not indexed: Google fetched the page and left it out for now. On Joomla sites it's often thin tag pages or near-copies.
- Discovered - currently not indexed: Google knows the address but hasn't fetched it yet. Internal links help.
Part 6
Structured data (schema.org) in Joomla 5 and 6
Joomla 5 and 6 print schema.org structured data out of the box, but only on single article and contact pages, and only with the details you type in by hand. The System - Schema.org plugin and nine type plugins ship enabled: Article, BlogPosting, Book, Event, JobPosting, Organization, Person, Recipe and Custom. On those pages Joomla builds one JSON-LD graph with your Organization (or Person), a WebSite and a WebPage, and links the article to them.
Set it up
- Open System › Manage › Plugins › System - Schema.org. Choose Organization or Person as the Base Type, add your name, logo and social media profiles, and save. Until the plugin has been saved once, the Schema tab in articles won't work.
- In an article, open the Schema tab, pick a Schema Type (Article or BlogPosting for most content) and fill in the headline, author, dates and image. Joomla doesn't copy them from the article for you.
- Publish the Breadcrumbs module where you want breadcrumbs. It prints its own BreadcrumbList on every page it appears on, category pages included.
Types and pages core doesn't cover
There's no FAQPage, Product, LocalBusiness, Service or HowTo type, and the schema plugins print nothing on a Featured home page, on category pages or on other components' pages, where only the Breadcrumbs module adds its BreadcrumbList. The Custom plugin accepts any JSON-LD you paste into an article. Shop components and SEO extensions add Product and other types; if a component of yours should describe its own items (a directory, a booking system), a developer can plug it into Joomla's schema system, the sort of custom Joomla extension we write.
What still earns a rich result in 2026
Organization, BreadcrumbList, Article, Product and LocalBusiness markup still shape how Google shows a page. FAQPage and HowTo markup no longer show anything.
| Type | What Google does with it | Joomla core? |
|---|---|---|
| Organization | Helps choose your logo and knowledge panel details | Yes, base graph |
| BreadcrumbList | Shows where the page sits in your site (desktop results only) | Yes, Breadcrumbs module |
| Article | Better title, image and date information | Yes, typed by hand |
| Product | Price, availability and reviews in results | No |
| LocalBusiness | Details for a business with premises | No (Custom plugin) |
| FAQPage | Nothing since 7 May 2026 | No |
| HowTo | Nothing since September 2023 | No |
Markup has to match what visitors can see on the page, and a business can't mark up reviews of itself to get stars (Google's review snippet rules). A visible FAQ section is still worth writing for readers and AI answers; just don't expect FAQ markup to show anything in Google. And AI Overviews don't need special schema either; part 12 quotes Google on that.
Part 7
Joomla speed and Core Web Vitals
Google's Core Web Vitals ask for the main content to appear within 2.5 seconds (LCP), the page to respond to a tap or click within 200 milliseconds (INP) and the layout to move no more than 0.1 (CLS), measured at the 75th percentile of real visits (web.dev). INP replaced First Input Delay on 12 March 2024, so older guides that talk about FID are out of date.
Keep speed in proportion. Google says Core Web Vitals are used by its ranking systems, but it still shows the most relevant page even when its page experience is poor. Speed settles close calls between pages that answer the query equally well. It also decides whether someone on a phone waits for your page or goes back to the results. One more distinction: the PageSpeed Insights score is a lab test. Passing Core Web Vitals is about real visitors' data, shown at the top of the same report when Chrome has enough of it.
Where Joomla sites lose the time
- Page builders and templates load the CSS and JavaScript for every element they could show, on every page, often as a long row of separate files in the head.
- Images uploaded straight from a camera, served at full size to a phone, and the main one lazy-loaded (more in part 8).
- Web fonts that hide text until they arrive, or make it jump when they do.
- Third-party widgets: chat boxes, reCAPTCHA on every page, several trackers.
- Joomla itself, which builds each page from the database for every visitor unless something stores the result.
Joomla's own cache and Gzip settings
System › Global Configuration › System › Cache caches modules and component views, not whole pages. Whole-page caching comes from the System - Page Cache plugin in System › Manage › Plugins, which is off by default. Turned on, it stores pages for logged-out visitors for the Cache Time in Global Configuration, 15 minutes on a new install, keyed by the full URL. So pages expire often, every utm variant becomes another copy, and the CSS, scripts and images stay as heavy as they were.
Then there's System › Global Configuration › Server › Gzip Page Compression. Joomla's own help text says to leave it off if your server already compresses pages. Many hosts do, some with Brotli, and Joomla's gzip would then replace it. Check the content-encoding header in your browser's developer tools before you switch it on.
What we measured on our own site
We build EasySpeed, a Joomla plugin that deals with most of the list above, from unused CSS to whole-page caching. On joomlamax.com (SP Page Builder and Helix Ultimate), the same page with the plugin off and on, Lighthouse 12 mobile, median of three runs, 28 September 2026:
That's a lab test of our own plugin on our own site, so treat it as an example, not a promise. The EasySpeed documentation explains every switch, and each feature can be turned off on its own.
Part 8
Image SEO in Joomla
Give every meaningful image alt text and a descriptive file name, upload it at roughly the size it's shown, and never lazy-load the main image at the top of the page.
Alt text
For intro and full article images, the field is Content › Articles › article › Images and Links › Image Description (Alt Text). Leave it empty without ticking No Description and Joomla drops the alt attribute altogether, and many screen readers then read out the file name instead. For purely decorative images, tick No Description; that gives an empty alt, which is correct. Google uses alt text, with the page around it, to work out what an image shows. Describe it as you would to someone on the phone. Don't stuff it with keywords.
File names, sizes and formats
Rename before you upload: Google's own example is that my-new-black-kitten.jpg beats IMG00023.JPG. Google Search supports JPEG, PNG, GIF, WebP, SVG, BMP and AVIF. Joomla core doesn't create WebP copies or srcset sizes for you, but it can stop giant uploads: set an Image Max Width in System › Manage › Plugins › Media Action - Resize and images saved through the Media manager are scaled down to it.
Lazy loading, and the one image to leave alone
Joomla adds loading="lazy" to intro and full article images whenever it knows their size, and the editor's image button ticks "Image will be lazyloaded" by default. That's right for images further down the page. For the large image at the top, usually the Largest Contentful Paint element, it's wrong: the browser waits before fetching it, and LCP suffers. Untick the box for images you insert at the top. For a full article image at the top, you need a template override or a plugin that knows which image comes first. EasySpeed does that.
Part 9
Multilingual Joomla sites and hreflang
Multilingual SEO needs no extension in Joomla: the System - Language Filter plugin gives each language its own URL prefix and prints hreflang links, x-default included, for every page whose translations are linked through Associations. What it can't do is guess which pages are translations of each other.
The setup, in order
- Install the languages in System › Install › Languages. Joomla adds an unpublished content language for each one: publish it in System › Manage › Content Languages and check its URL Language Code, such as en or de.
- Enable System › Manage › Plugins › System - Language Filter. It's off by default. Item Associations, Add Alternate Meta Tags and Add x-default Meta Tag already default to Yes; leave them.
- Create one home menu item per language, each set to its language.
- Link every translated article, category and menu item to its counterparts, in the Associations tab of each item or all at once in Components › Multilingual Associations.
What breaks it
- Missing associations. Joomla prints hreflang for a page only for languages that have an associated version of it, and none at all when fewer than two languages qualify.
- Content set to All languages. It takes the prefix of whichever language the visitor is browsing, so one article can live at /en/... and /de/... at once. Give each page its own language.
- Redirecting by browser language. Language Selection for new Visitors can send people to a version based on their browser. Google advises against automatic language redirects, and notes that its crawler usually comes from the US without an Accept-Language header. Site Language, the default, is the safer choice.
- Switching Remove URL Language Code later. It drops the prefix for the default language, so every address in that language changes and Google has to learn them all again. Decide before launch.
Joomla uses the full language tag from the content language, such as en-GB, in hreflang, and the x-default Language setting decides which version is offered to everyone else. Adding a language to a live site is a project in itself; get a quote for a multilingual Joomla set-up if you'd like a hand.
Part 10
Moving from Joomla 3 to Joomla 5 or 6 without losing rankings
You keep your rankings through a Joomla upgrade by keeping your URLs, and where they must change, by sending every old address to its new one with a 301 redirect and watching for 404s for the following two to three months.
Plenty of sites still have this ahead of them. Joomla 3's extended support ended on 17 February 2025, and W3Techs still counted 51.9% of Joomla sites on version 3 in October 2026. The route runs from 3.10 to 4, from 4.4 to 5, and from 5.4 to 6. URLs often change along the way: Joomla 4 dropped the old Legacy router, menus get reorganised, aliases get tidied, and an old SEF component gets left behind.
The steps that protect your traffic
- Inventory first. Export every address that matters before you touch anything: Search Console's Pages tab in the Performance report (it keeps 16 months), the top linked pages in its Links report, your old sitemap and your analytics landing pages.
- Upgrade a copy, never the live site. Then request every address on your list from the copy and note what each one returns.
- Map one to one. Each old address goes to the page that now answers the same question. Sending everything to the home page throws away what each old page ranked for.
- Add the redirects. Patterns in .htaccess, single addresses in System › Manage › Redirects (remember it only catches addresses that Joomla answers with a 404).
- Go live and watch. Submit the new sitemap, then check the Pages report and the Redirects list every week for 8 to 12 weeks. Google says a medium-sized move can take a few weeks or more to settle, and to keep redirects for at least a year.
On Joomla 5.3 and later, the System - SEF plugin already redirects articles requested under an old ID or alias. It doesn't know about menu paths that no longer exist, so those still need your map.
The same rules apply to a new template or page builder on the same Joomla version. Check that titles, descriptions, headings and structured data survived the switch, because they often live in the old template's settings.
Some Joomla 3 extensions have no Joomla 5 version. When the one you depend on is gone, we can rebuild it as part of our Joomla extension development work, or quote for the whole migration.
Part 11
Hacked Joomla sites and SEO
A hack hurts SEO in two ways: spam pages appear under your domain, often hundreds of them, and Google can put a "This site may be hacked" warning on your results.
The spam is usually invisible to you. Hacks often serve the junk only to search engines, or only on addresses nobody in your team would open. Signs to look for:
- A site: search for your domain shows pages in Japanese, or about pharmacy, casinos or replica goods.
- Search Console's Pages report suddenly lists thousands of addresses you never made, or the Sitemaps report shows a sitemap you didn't submit.
- The Security issues report (under Security & Manual Actions) names content injection, code injection, URL injection or malware.
After the cleanup
Close the hole first: an outdated extension, a reused password, a forgotten admin account. Then remove the spam pages so they return 404 or 410, and in the Security issues report choose Request Review. Google says reviews take several days or weeks. Any recovery in rankings follows Google recrawling the cleaned pages, so it doesn't happen overnight.
Keep it from happening
Install Joomla security releases as they appear (the live box near the top of this guide lists them), keep every extension current, uninstall what you don't use, and turn on Joomla's built-in multi-factor authentication for every administrator. If your site shows the signs above, we clean hacked Joomla sites.
Part 12
Joomla and AI search: ChatGPT, AI Overviews, Copilot and Perplexity
For Google, optimising for AI search is still SEO: Google says AI Overviews and AI Mode need no special files or markup, only pages that are indexed and eligible to show with a snippet. Its May 2026 guide adds that "chunking" and rewriting for AI can be ignored. Generative engine optimisation (GEO), the name for work aimed at being read and quoted by AI answer tools, adds one job on top: each AI company runs its own bots, and each one has to be let in.
Let the right bots in, one at a time
| Bot or token | What it's for | Block it? |
|---|---|---|
| OAI-SearchBot | ChatGPT search answers | No, unless you want out of ChatGPT search |
| GPTBot | OpenAI model training | Your call; ChatGPT search is unaffected |
| Claude-SearchBot | Claude's search answers | No |
| ClaudeBot | Anthropic model training | Your call |
| PerplexityBot | Perplexity search, not training | No |
| Google-Extended | Gemini training and grounding, not Google Search | Your call; rankings are unaffected |
| Googlebot | Google Search, AI Overviews and AI Mode | Never |
| Bingbot | Bing search and Copilot | Never |
Sources: OpenAI's bot list and Google's crawler list. Joomla's default robots.txt has a single User-agent: * group that every bot follows, so all of these can crawl your content unless you add rules. To keep search and refuse training, add a group per bot:
User-agent: GPTBot Disallow: / User-agent: ClaudeBot Disallow: / User-agent: Google-Extended Disallow: /
A bot with its own group ignores the User-agent: * group completely, so copy any rules you still want it to follow. Bots fetching on a person's request (ChatGPT-User, Perplexity-User) may not obey robots.txt at all.
Check Cloudflare and the firewall
Since 15 September 2026, choosing Block for AI training in Cloudflare also stops Googlebot, Bingbot and Applebot, search included; Disallow AI Training is the setting you want. AI Crawl Control and Bot Fight Mode block at the edge, so robots.txt can look perfect while bots get a 403. Only Cloudflare's event log or your server logs show which requests were refused.
Make the text readable without JavaScript
Tests by Vercel and MERJ (December 2024) found the main crawlers of OpenAI, Anthropic and Perplexity didn't run JavaScript. Joomla renders pages on the server, which helps, but some sliders, tabs, review feeds and page-builder add-ons load their text afterwards. View the page source (not the inspector) and search for a sentence that matters. If it isn't there, the crawlers in those tests wouldn't have seen it, so put it in the HTML your server sends.
Write pages that are easy to quote
Answer each heading in its first sentence and give facts with a date and a source. Then check that your business details match. On most Joomla sites the address sits in a Contact item and again in a footer module, so change both together, and keep your Google Business Profile the same.
Bing Webmaster Tools and IndexNow
Copilot uses Bing's crawling, index and ranking, and ChatGPT search draws on partner search providers, Microsoft among them. Verify the site in Bing Webmaster Tools and send changed URLs through IndexNow (Google doesn't take part). Joomla core has no IndexNow; that's an extension's job.
Tracking visits from AI answers
- GA4's AI Assistant channel (since May 2026) groups visits from ChatGPT, Gemini, Claude, Copilot and others. Clicks from AI Overviews stay in Organic Search.
- ChatGPT adds utm_source=chatgpt.com to the links it sends.
- Search Console's Generative AI report (since 31 August 2026) shows AI Overview and AI Mode impressions, without clicks or queries.
- Since the same date, Search Console also has a setting that takes a site out of AI Overviews and AI Mode. Sites are included by default; if your AI impressions are zero, check nobody switched it off.
- Bing Webmaster Tools' AI Performance report (a preview since February 2026) shows citations in Copilot.
And llms.txt? Joomla core doesn't make one, Google Search ignores it (the same May 2026 guide says so), and the crawler pages of OpenAI, Anthropic and Perplexity don't mention it. It's cheap to add. Just don't expect anything from it, and be wary of anyone who promises citations.
Part 13
Measuring Joomla SEO, and giving an SEO company access safely
Measure Joomla SEO in Google Search Console and Bing Webmaster Tools, which show what the search engines see, and in GA4, which shows what visitors do once they arrive.
- Search Console: add a Domain property. It's verified with a DNS record and covers http, https, www and non-www in one place.
- Average position is the topmost position your link reached, averaged across all queries. A page at 3 for one query and 70 for another lands somewhere in the middle, so follow single queries, not the site-wide figure.
- Bing Webmaster Tools can import a site you've verified in Search Console. It covers Copilot too.
- GA4: mark form sends, phone taps and WhatsApp clicks as key events. Rankings that bring no enquiries aren't the goal.
Free Joomla SEO tools worth having
URL Inspection in Search Console shows the canonical Google chose and the HTML it rendered, so you can see whether page-builder text made it in. The Rich Results Test checks your schema, and PageSpeed Insights your Core Web Vitals (part 7). All three are free.
How to give an SEO company access to Joomla
Give them their own Joomla user in the lowest group that does the job, Restricted access in Search Console, and none of your own logins. Then remove all of it when the work ends.
- Start with Search Console. Add them in Settings, Users and permissions, as a Restricted user; Google's own advice on hiring an SEO suggests read-only access while they audit.
- Create a named Joomla account in Users › Manage › New. Never share your own login.
- Pick the lowest group that does the job. For article titles, descriptions and content, Manager is enough: by default it can manage articles, categories and media, but not menus, plugins, templates or redirects. Administrator adds those, including the template's PHP files, so treat it as near-full access. It still can't open Global Configuration (Super Users only) or install extensions.
- Need Super User for a few changes? Grant it for an agreed period, then downgrade or block the account. Turn on multi-factor authentication for it.
- Check the trail in Users › User Actions Log, which records who changed what.
- Close it when the work ends. Block the Joomla account, remove them from Search Console and GA4, and change any password you shared. If they need files such as robots.txt or .htaccess, create a separate SFTP account in your hosting panel instead of handing over your hosting login.
A staging copy is safer still. Our service FAQ explains what access we ask for, and how we avoid breaking anything.
Part 14
Joomla SEO plugins and extensions: what they can and can't do
A Joomla SEO plugin or extension can fill the gaps in core (XML sitemaps, Open Graph tags, canonicals that drop tracking parameters, schema types core lacks), but it can't write your pages, fix a slow template or undo a bad URL structure on its own.
One owner per tag
Most trouble starts when two or three things print the same tag. The template adds a canonical, the page builder adds Open Graph, the SEO extension adds both, and Joomla 5 adds a schema graph on article pages. After installing anything, view the source and count:
- One title and one meta description.
- One rel="canonical", pointing where you expect.
- One set of og: tags.
- No two JSON-LD blocks describing your organisation differently.
If any line comes out at two, keep the copy you trust and switch the other off in whichever template, builder or extension prints it.
Choosing one
- It supports your Joomla version natively, rather than running through the backward compatibility plugin.
- It's maintained. Look at the release dates in its changelog. Abandoned Joomla 3-era extensions that survived an upgrade are a security risk as well as an SEO one.
- Every output has its own switch, so it can live next to your template.
- It doesn't take over your URLs unless that's what you want. Components that replace Joomla's router, such as sh404SEF on Joomla 3 (discontinued in August 2023), can change every address when you remove them.
For speed, we'd naturally point you at our own EasySpeed. If you're wondering why anyone pays for a service when extensions exist, our Joomla SEO service FAQ answers that question.
Part 15
Joomla SEO questions people ask
Short answers to the questions we hear most, with links to the part of the guide that goes deeper.
Is Joomla good for SEO?
Yes. Core has search-engine-friendly URLs, per-page titles and descriptions, hreflang and, since Joomla 5, schema.org. It lacks an XML sitemap, Open Graph tags and a canonical that ignores tracking parameters, so most sites add one or two extensions. See part 1.
How do I do SEO on a Joomla website?
Start with the settings: URL rewriting on, IDs out of URLs, one https address and one canonical per page, and its own title, h1 and meta description on every main page. Then add an XML sitemap, fix robots.txt, enable the Redirect plugin and verify the site in Search Console and Bing. The 15-minute checklist goes through it in order.
Is Joomla or WordPress better for SEO?
Neither ranks better by itself; search engines rank pages, not CMSs. WordPress core has an XML sitemap (since 5.5) but needs a plugin for meta descriptions. Joomla core has meta descriptions, multilingual associations and schema.org but needs an extension for a sitemap. When a Joomla site slips, the cause is usually settings, the template or the content, and moving CMS fixes none of those.
What is the best Joomla SEO plugin?
There isn't one that suits every site, so start from the gap you have. For an XML sitemap, OSMap and JSitemap are the two you'll meet most. For Open Graph, check your template and page builder first; many already print it. Avoid anything that repeats a tag something else prints, or that was last updated in the Joomla 3 days. See part 14.
How do I remove index.php from Joomla URLs?
Rename htaccess.txt to .htaccess (Apache or LiteSpeed) or add the rewrite on Nginx, then set Use URL Rewriting to Yes in System › Global Configuration › Site › SEO. On Joomla 5.1 and later, also turn on Strict handling of index.php in the System - SEF plugin. See part 2.
How do I remove IDs from Joomla URLs?
In Content › Articles › Options › Integration › Routing, set Remove IDs from URLs to Yes. Since Joomla 5.3, old addresses with the ID redirect automatically while the System - SEF plugin is on; on older versions, redirect them yourself. See part 2.
Does Joomla have an XML sitemap?
Not in core, in Joomla 4, 5 or 6. Use a sitemap extension, list only canonical pages that return 200, and submit it in Search Console and Bing Webmaster Tools. See part 5.
Does Joomla support schema markup?
Yes, since Joomla 5. Core prints a schema.org graph on single article and contact pages, with fields you fill in by hand, and the Breadcrumbs module adds BreadcrumbList. There's no core FAQPage, Product or LocalBusiness type. See part 6.
How long does Joomla SEO take?
Technical fixes show up as Google recrawls the affected pages: days for busy pages, weeks for quiet ones. If the work changes URLs, Google says a medium-sized site move can take a few weeks or more to settle. New content and links take longer, and anyone who promises a position or a date is guessing. Our service sets out what happens in the first 90 days.
Should I block AI bots on my Joomla site?
Block the training bots (GPTBot, ClaudeBot, Google-Extended) if you object to training; each is separate from its company's search bot. Keep the search bots (OAI-SearchBot, Claude-SearchBot, PerplexityBot, Bingbot) allowed, or you drop out of those answers. Check Cloudflare too. See part 12.
How do I give an SEO company access to Joomla?
Give Restricted access in Search Console first. In Joomla, create a named account in the lowest group that does the job: Manager for articles and their metadata, Administrator if they must change menus and plugins. Grant Super User only for an agreed period, and close the account when the work ends. See part 13.
Can I still do SEO on Joomla 3?
You can fix titles, content and redirects, but Joomla 3's extended support ended on 17 February 2025, so it gets no security fixes, and it has none of the newer SEF options or schema.org. Plan the upgrade with the steps in part 10, or let our Joomla SEO service handle it.
Does Joomla 6 change anything for SEO?
Not much. The Joomla 6.0 announcement of 14 October 2025 lists no new SEO features. The recent additions came in Joomla 5: schema.org in 5.0, the SEF redirect options in 5.1 and 5.2, and redirects for outdated article addresses in 5.3.
Rather have someone do this for you?
We've been Joomla developers since 2016, and our Joomla SEO service does the work in this guide on your own site, from URL settings to AI crawler access. It starts with an audit and a 90-day plan and costs $1,499 a month, with a three-month minimum. We don't guarantee rankings, and Google itself tells site owners to be wary of anyone who does.
