Joomla SEO

A technical SEO guide to Joomla — enabling SEF URLs (and the htaccess.txt rename that actually makes them work), fixing Joomla's default duplicate content, sitemaps and schema via extensions, and what changed across Joomla 4, 5, and 6.

First published: Jun 27, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #2 in CMS#17 in Platform SEO#165 in Technical SEO#213 on the site
1 evidence signal on this page

Joomla 5 has strong built-in SEO — SEF URLs, per-article metadata, a native Schema plugin, and an excellent performance baseline — but the defaults bite you. Enabling SEF URLs only works after you rename htaccess.txt to .htaccess; even then the legacy ID-based URLs stay reachable and Joomla can emit multiple competing canonical tags, so duplicate content is a real out-of-the-box problem you fix with canonicals, redirects, or an extension. There's no native XML sitemap (use OSMap, Aimy Sitemap, Route66, or 4SEO), and sh404SEF — the old dominant extension — was never ported to Joomla 4/5, so Route66 (free) and 4SEO (premium) are the current picks. Joomla 6 is now out (October 2025) and is getting active updates alongside a still-maintained Joomla 5.x line, so version-check any Joomla site before assuming which settings apply. I've worked with Joomla since at least 2012, when I spoke on technical SEO at Joomla Day Chicago.

TL;DR — Joomla 5 is genuinely capable: SEF URLs, per-article metadata, a native Schema plugin, and a strong Core Web Vitals baseline. But the defaults need work. SEF URLs only function after you rename htaccess.txt to .htaccess (Apache) — the #1 missed step. Even then the non-SEF ID URLs stay reachable and Joomla can output up to 3 competing rel=canonical tags for one article, so duplicate content is real out of the box — fix it with canonicals, redirects, or an extension. No native XML sitemap (OSMap / Aimy Sitemap / Route66 / 4SEO). sh404SEF was never ported to Joomla 4/5 — use Route66 (free) or 4SEO (paid). Joomla 5 adds native schema and hreflang (the 5.2 self-referencing hreflang bug was fixed in 5.3). Joomla 6 shipped in October 2025 and is the current major, with Joomla 5.x still getting security/bugfix updates alongside it — check which major a site is on before trusting any settings path.

Where I’m coming from

I’ve described my background as working with “Drupal, Joomla, WordPress, and tons of different e-commerce systems,” and Joomla goes back a while for me — I gave a talk, Technical SEO, at Joomla Day Chicago in 2012. So this isn’t a tour of a CMS I read about; it’s the platform I’ve actually configured. The short version of my opinion: the myth that “Joomla is bad for SEO” is wrong. Joomla 5 is comparable to WordPress technically. The real issues are UX (settings are scattered) and a few harmful defaults.

Global Configuration: the SEO settings that matter

Everything starts at System → Global Configuration → Site tab → SEO Settings:

  • Search Engine Friendly URLs → Yes. Converts index.php?option=com_content&view=article&id=2 into a readable slug. Google has long recommended readable, word-based URLs over ID strings, so this is the baseline.
  • Use URL Rewriting → Yesbut only after the .htaccess rename below. Removes index.php from the path.
  • Adds Suffix to URL → No (usually). Appends .html; leave off for clean URLs unless a legacy site already relies on it.
  • Unicode Aliases → No in most cases. Transliterated slugs are cleaner than raw non-Latin characters; only enable for genuine international need.
  • Include Site Name in Page Titles — choose Before/After to control how your site name appears in the <title>.

Then two more, elsewhere in Global Configuration:

  • Server → Force HTTPS → Entire Site to enforce HTTPS sitewide. Evidence for this claim Joomla provides an Entire Site Force HTTPS configuration option. Scope: Joomla global configuration after HTTPS is functional on the server. Confidence: high · Verified: Joomla: Global configuration help
  • Metadata Settings — set a global meta description and confirm the default Robots value is “Index, Follow.”

The .htaccess rename — the single most-missed step

Joomla ships a file named htaccess.txt (not .htaccess) in the root directory. Until you rename it to .htaccess, the “Use URL Rewriting” toggle does nothing — this is the #1 cause of SEF URL failures on Apache. Do the rename before (or at least at the same time as) enabling URL rewriting in Global Configuration, or you’ll flip the switch and watch your clean URLs break. On Nginx there’s no .htaccess; you add the equivalent rewrite rules to the server config instead.

Joomla’s duplicate content problem

This is Joomla’s biggest out-of-the-box SEO issue, and it’s worth understanding precisely. Joomla manufactures multiple URLs for the same content:

  • The non-SEF URL (/index.php?option=com_content&view=article&id=2) — always reachable, even with SEF on.
  • SEF URL via menu vs. SEF URL via category — different paths to the same article if it appears in multiple places.
  • www vs. non-www, HTTP vs. HTTPS, trailing-slash variants, and ?layout=print appended to any URL.

The JoomlaSEO.com checklist puts the core of it well: “Even when you have SEF links turned on in your Joomla global configuration, the non-SEF URL still exists, meaning 2 URLs with the same content, and often there are more,” and notes that “Non-SEF URLs are still reachable, despite SEF-URLs being activated, like this: /index.php?option=com_content&view=article&id=2.” As JoomUnited frames the stakes, “Any duplicate content could have harmful effects on your SEO because search bots cannot determine which version deserves indexing priority.”

It gets worse than just two URLs. In some configurations — opening the same article by category ID, article ID, or query parameters — Joomla outputs three different rel="canonical" links by default. Multiple canonicals is a self-defeating signal: as Google’s canonicalization guidance makes clear, declare more than one and they tend to get ignored. So before launch, run a single-page audit (URL Inspection, or a crawler) and confirm each page emits exactly one canonical.

How to fix it:

  • Use the per-article Canonical URL field (Publishing tab → Metadata).
  • 301-redirect non-SEF URLs to SEF via .htaccess.
  • Use the System – SEF plugin’s strict routing / “strict handling of index.php” (Joomla 4/5) to strip index.php and redirect older URLs.
  • Or let an extension (4SEO, Route66) add canonicals and redirect non-SEF URLs automatically.

For the underlying concepts, see canonicalization and the canonical tag.

Per-article and per-category metadata (and the UX trap)

Joomla lets you set metadata at the article level — but the fields are split across tabs, which is the single most annoying thing about Joomla content SEO:

  • SEO title (Browser Page Title): Edit Article → Options tab.
  • Meta description: Edit Article → Publishing tab → Metadata.
  • Robots (Index/Follow, NoIndex/NoFollow): Edit Article → Publishing tab → Metadata.
  • Canonical URL: Edit Article → Publishing tab → Metadata.

So the page title is in one tab and the description is in another. Seobility’s review captures the broader pattern — “Basic SEO settings are buried” in Joomla’s standard interface, making them “easy to miss.” Categories have their own metadata under Edit Category → Options. And ignore the meta keywords field Joomla still exposes — Google has ignored meta keywords since 2009; it’s harmless but worthless.

XML sitemaps — no native solution

Joomla does not generate an XML sitemap on its own. You install an extension: Evidence for this claim Sitemap generation for Joomla is supplied by extensions rather than the cited core global configuration features. Scope: Joomla Extensions Directory ecosystem; extension compatibility must be checked against the installed Joomla version. Confidence: medium · Verified: Joomla Extensions Directory: Site map

  • OSMap (Weeblr/JoomlaShack) — the most widely used; free and pro.
  • Aimy Sitemap — supports Joomla 3/4/5/6, highly configurable.
  • JSitemap — XML, HTML, image, and video sitemaps.
  • Route66 and 4SEO — both bundle sitemap generation into a broader SEO suite.

After generating it, add Sitemap: https://example.com/sitemap.xml to your robots.txt and submit it in Google Search Console and Bing Webmaster Tools.

robots.txt — full manual control

Joomla places a real robots.txt in the site root (same level as index.php), fully editable via FTP or your host’s file manager. The default sensibly blocks /administrator/, /api/, /cache/, and /components/ — admin and system directories you don’t want crawled. Just remember the universal rule: robots.txt controls crawling, not indexing — don’t use it to try to deindex pages.

Extensions: what to use (and what to avoid)

  • Route66 (Firecoders, free) — Seobility calls it “as close as you’ll get to a WordPress SEO plugin like YOAST for Joomla.” SERP previews, sitemap, canonical management, SEO scoring.
  • 4SEO (Weeblr, premium) — Weeblr describes it as software that “works exactly like a search engine, crawling your site to understand it then adds metadata, structured data, builds a sitemap, replace content, helps your social networks sharing or finds broken links.” Pair with 4SEF for URL management.
  • sh404SEF — do not use on Joomla 4/5. This is the critical migration gotcha. After 15+ years as the dominant Joomla SEO extension, Weeblr chose not to port it: “After more than 15 years of duty, sh404SEF won’t be ported to Joomla 4. It will not run on Joomla 4.x. To move to Joomla 4, consider newer extensions, including 4SEF to maintain your site SEF URLs and 4SEO for metadata.” And be careful even on older sites — Joomlashack warns that “If you have an existing site that is already using the built in SEF, activating this extension may change all of your URLs.” Switching URL-management extensions on a live site can rewrite URLs and break inbound links; always test on staging and prepare redirect maps first.
  • JCH Optimize (performance) — combines and minifies CSS/JS.

Structured data

Structured data handling depends on your Joomla version:

  • Joomla 5 ships a native Schema plugin supporting BlogPosting, Event, Product, and Organization (plus Book, Vacancy, Person, Recipe) — configured via Edit Article → Schema tab. No extension needed.
  • Joomla 4 and older require an extension (Google Structured Data, 4SEO, or tassos.gr’s) — or manual JSON-LD in the template <head>.
  • Manual JSON-LD always works regardless of version, and Joomla’s built-in Breadcrumbs module pairs naturally with BreadcrumbList markup.

Multilingual SEO and hreflang

Joomla has a strong built-in multilingual system. Install languages via System → Extensions → Languages, then enable the Language Filter plugin and turn on “Add alternate meta tags” to generate hreflang tags automatically; the Language Code plugin keeps the BCP47 codes correct. Each language gets a URL prefix (/en/, /fr/, /de/).

One historical caution, now resolved: Joomla 5.2 shipped with the self-referencing hreflang tag missing — the tag pointing to the current page itself was omitted (GitHub issue #44297). That was fixed in the 5.3 release, and the issue is closed. If you’re on 5.3 or later (including Joomla 6), you shouldn’t hit it — but if you’re auditing an old, unpatched 5.2 install, verify hreflang output directly before assuming it’s correct.

Performance: Joomla’s quiet strength

Joomla’s Core Web Vitals baseline is better than many expect. Seobility found the default Cassiopeia template “scored 93/100 on PageSpeed Insights with ‘absolutely nothing’ done for optimization,” and concluded “Joomla 5 is even better, with great performance and many SEO features built in.” Enable Gzip Page Compression and Cache in Global Configuration → Server; add JCH Optimize, image compression, and a CDN for more. Because Joomla doesn’t carry WordPress’s typical plugin stack (separate SEO + cache + security plugins), bare Joomla often beats bare WordPress on performance — which matters for Core Web Vitals.

Joomla 3 vs. 4 vs. 5 vs. 6 for SEO

  • Joomla 3 (end of life Dec 2023): basic SEF URLs; nearly everything else needed an extension; sh404SEF was the dominant solution.
  • Joomla 4 (Aug 2021): cleaner admin, improved SEF routing — but sh404SEF was abandoned, and Route66 / 4SEO emerged as the alternatives.
  • Joomla 5 (Oct 2023): native Schema plugin, extended meta descriptions (~300 chars), trailing-slash control and strict index.php handling in the System – SEF plugin, AVIF support, Organization/Website schema, and a better performance baseline.
  • Joomla 6 (Oct 2025, currently on the 6.1.x line): the current major version. It carries forward Joomla 5’s SEO feature set — I haven’t found first-party documentation of SEO-specific settings changes between 5 and 6, so treat the Global Configuration paths above as still accurate on 6 until you’ve confirmed otherwise on the actual install you’re auditing. Joomla 5.x remains on active security/bugfix support in parallel, so plenty of live sites are still on 5, not 6.

If you’re auditing a Joomla site, the first three questions are: which major version (check Joomla’s own version number in the admin footer or System Information, don’t assume from the theme), are SEF URLs actually working (check the .htaccess rename), and is the non-SEF duplicate URL handled? Get those right and Joomla behaves.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin an expert quote first.