Blog

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
Illustration: the settings in this guide, and what they change in a search result.

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.

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

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

SettingWhereOn a new install
Search Engine Friendly URLsGlobal Configuration › SiteYes
Use URL Rewriting, Add Suffix to URL, Unicode AliasesGlobal Configuration › SiteNo
Site Name in Page TitlesGlobal Configuration › SiteNo
Force HTTPSGlobal Configuration › ServerNone
Remove IDs from URLsArticles › Options › IntegrationYes (often No on sites upgraded from Joomla 3)
Strict Routing, Strict handling of index.phpSystem - SEF pluginOn for installs since 5.2; off on upgraded sites
Site Domain (canonical tag)System - SEF pluginEmpty, so no canonical
System - Redirect, Language Filter, Page CachePluginsDisabled

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

Illustration: one article, six addresses, merged into one.

Turn on URL rewriting to remove index.php

  1. Open System › Global Configuration › Site › SEO. Search Engine Friendly URLs should already say Yes; it's the default.
  2. 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).
  3. 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; }

Watch out

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.

OptionWhat it doesOur advice
Strict Routing301-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.phpRedirects /index.php/news/... to /news/... when URL rewriting is on.Yes
Trailing slash for URLsForces one form, with or without the slash (only when Add Suffix is off).Enforce URLs without trailing slash
Enforce a suffix by redirectRedirects addresses missing the .html suffix.Yes, if you use suffixes
Site DomainAdds 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.

FieldWhere to find itWins when
Menu item titleMenus › your menu › item › Page Display › Browser Page TitleThe menu item links straight to that page
Article titleContent › Articles › article › Options › Browser Page TitleThe menu item field is empty, or the article has no menu item
Article descriptionContent › Articles › article › Publishing › Meta DescriptionAlways, when filled in
Menu item descriptionMenus › item › Metadata › Meta DescriptionThe article or category has none of its own
Site-wide descriptionSystem › Global Configuration › Site › MetadataNothing 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.

SP Page Builder

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

  1. Enable System › Manage › Plugins › System - Redirect. It's off by default. Leave Collect URLs on.
  2. Each address that returns 404 now appears, unpublished, in System › Manage › Redirects, with the page that linked to it and a hit count.
  3. 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.

Illustration: JSON-LD for a made-up company. Core Joomla builds the Organization, WebSite and WebPage part; Service and Offer need the Custom plugin or an extension.

Set it up

  1. 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.
  2. 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.
  3. 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.

TypeWhat Google does with itJoomla core?
OrganizationHelps choose your logo and knowledge panel detailsYes, base graph
BreadcrumbListShows where the page sits in your site (desktop results only)Yes, Breadcrumbs module
ArticleBetter title, image and date informationYes, typed by hand
ProductPrice, availability and reviews in resultsNo
LocalBusinessDetails for a business with premisesNo (Custom plugin)
FAQPageNothing since 7 May 2026No
HowToNothing since September 2023No
Watch out

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.

Illustration with sample values, not client data.

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:

99Performance score with EasySpeed, 63 without
1.9 sLargest Contentful Paint, 7.1 s without

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

  1. 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.
  2. 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.
  3. Create one home menu item per language, each set to its language.
  4. 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

  1. 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.
  2. Upgrade a copy, never the live site. Then request every address on your list from the copy and note what each one returns.
  3. 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.
  4. Add the redirects. Patterns in .htaccess, single addresses in System › Manage › Redirects (remember it only catches addresses that Joomla answers with a 404).
  5. 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.
Tip

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 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.

  1. 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.
  2. Create a named Joomla account in Users › Manage › New. Never share your own login.
  3. 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.
  4. 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.
  5. Check the trail in Users › User Actions Log, which records who changed what.
  6. 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.

Image

Production-ready Joomla extensions and expert development services to help you build better, faster.

Products

Services