SEO in Joomla
Search engine optimisation (SEO) sounds like a dark art, but most of it is plain housekeeping: clean URLs, honest page titles, a clear description, and pages that load fast. Joomla gives you all of these out of the box, long before you install a single extension.
Many site owners pay for an "SEO plugin" without realising that Joomla core already controls the page title, the meta description, the canonical link, the URL shape, and the robots rules. Used well, the built-in settings cover the large majority of on-page SEO.
This article explains how SEO works inside Joomla. It covers the basics for owners and editors, the daily setup for administrators, and the technical details for developers. You will see where each setting lives, what HTML it produces, and how to avoid the mistakes that quietly cost you search traffic.
How Joomla turns clean settings into clean search results
The goal is simple: help you understand Joomla SEO well enough to rank on your own work, not on hype.
1. The Basics
1.1 What SEO Means in a CMS
SEO is the work of making your pages easy for search engines to find, read, and rank. In a Joomla context it breaks into three layers:
- Technical SEO - URLs, redirects, sitemaps, speed, crawlability. Mostly administrator work.
- On-page SEO - titles, headings, descriptions, internal links, images. Mostly editor work.
- Content SEO - writing pages that answer a real question better than the competition. Everyone's work.
Joomla cannot write your content, but it gives you strong control over the first two layers without touching code.
1.2 What Joomla Controls Out of the Box
Before any extension, Joomla core already sets:
- The browser page title (the
<title>tag). - The meta description for each page.
- The robots instruction (index or not, follow or not).
- The URL shape (search-engine-friendly URLs, with or without
index.php). - The canonical link when several menu items reach the same content.
- hreflang tags on multilingual sites.
The job of this article is to show you each of these and how they fit together.
1.3 The Three Places SEO Settings Live
Almost every core SEO option sits in one of three places. Learn these three and you know where to look:
| Level | Where | Scope |
|---|---|---|
| Site-wide | System → Global Configuration → Site |
Defaults for the whole site. |
| Per menu item | Menus → [item] → Page Display + Metadata |
One page or one view. |
| Per article | Content → Articles → [article] → Publishing |
One specific article. |
The rule of precedence is "most specific wins". An article meta description overrides the menu item, which overrides the site default.
Back to top2. Search Engine Friendly URLs
2.1 Three Switches, One Result
Joomla builds its URL shape from three options in System → Global Configuration → Site → SEO Settings:
| Option | Off | On |
|---|---|---|
| Search Engine Friendly URLs | index.php?option=com_content&view=article&id=42 |
index.php/the-article |
| Use URL Rewriting | keeps index.php/ in the path |
removes index.php/ → /the-article |
| Adds Suffix to URL | /the-article |
/the-article.html |
The combination almost every site wants is SEF URLs = Yes, URL Rewriting = Yes, Adds Suffix = No. That gives short, clean paths like /about-us.
2.2 The One File You Must Rename
Use URL Rewriting needs the web server to send unknown paths to Joomla. On Apache this means renaming the shipped file:
htaccess.txt → .htaccess
If you switch on URL Rewriting without that rename, every clean URL returns a 404. On NGINX you add a try_files rule instead. This is the single most common reason "nice URLs" break right after launch.
2.3 Unicode Aliases
The Unicode Aliases option decides how Joomla turns a title into a URL alias:
- No (default): transliterate to plain ASCII. "Cafe München" becomes
cafe-munchen. - Yes: keep the original characters. The alias becomes
cafe-münchenin the URL.
ASCII aliases are safer for sharing, copying, and old systems. Keep the default unless you have a clear reason and an audience that expects native-script URLs.
2.4 Include Site Name in Page Titles
The last SEO setting controls the global page title pattern:
No → About Us
Before Title → My Company - About Us
After Title → About Us - My Company
"After Title" is the usual choice: the unique part of the page comes first, where it carries the most weight, and the brand follows.
Back to top3. Metadata and the Document
3.1 The Site Defaults
In Joomla's configuration Global Configuration → Site → Metadata Settings you set the fallbacks used when a page has nothing more specific:
| Setting | What it does |
|---|---|
| Site Meta Description | Default <meta name="description"> when a page has none. |
| Robots | Default crawl rule: index, follow and the three opposites. |
| Content Rights | A rights statement exposed as metadata. |
| Author Meta Tag | Show or hide a <meta name="author"> tag. |
The old Site Meta Keywords field still exists, but search engines have ignored the keywords tag for many years. Leave it empty and spend the effort on the description instead.
3.2 The Meta Description That Actually Shows
The meta description rarely changes your ranking directly, but it often becomes the snippet under your title in the results. A good description earns the click. Set it per article in Content → Articles → [article] → Publishing → Meta Description.
Practical rules:
- Keep it around 150 to 160 characters. Longer text gets cut.
- Write a sentence that sells the page, not a keyword list.
- Make every important page unique. Duplicated descriptions waste the snippet.
3.3 The Robots Instruction
The Robots dropdown writes a <meta name="robots"> tag and accepts four values:
| Value | Meaning |
|---|---|
index, follow |
Index this page and follow its links (the normal case). |
noindex, follow |
Keep out of the index, but still crawl the links. Good for thin tag or search pages. |
index, nofollow |
Index the page, ignore its links. Rarely useful. |
noindex, nofollow |
Hide the page completely from search. |
Robots cascades like everything else: an article value overrides its menu item, which overrides the site default. Setting an article to noindex while the menu item says index is fine - the article wins on its own page.
4. Page Titles and Headings
4.1 Title vs Heading: Two Different Things
New editors often confuse these. They are separate:
- The browser page title is the
<title>in the page head. It shows in the browser tab and in search results. - The page heading is the visible
<h1>at the top of the content.
They can differ on purpose. The title can read "Joomla SEO Guide - My Company" while the on-page heading reads simply "SEO".
4.2 Setting Them on a Menu Item
Open any menu item and look at Page Display:
| Field | Controls |
|---|---|
| Browser Page Title | The <title> tag. Empty falls back to the menu item title. |
| Show Page Heading | Whether the <h1> appears at all. |
| Page Heading | Override text for the <h1>. |
For SEO, every important page should have exactly one clear <h1> and a descriptive title.
4.3 The Heading Hierarchy
Search engines read your heading structure to understand the page. Keep it ordered:
h1 One per page - the main topic
h2 Major sections
h3 Subsections under an h2
Inside article bodies, use the editor's paragraph format to pick Heading 2 and Heading 3 rather than just making text big and bold. Visual size is not structure; the tag is. A page with five <h1> tags or with headings that jump from h2 to h4 reads as messy to a crawler.
5. Aliases, Canonicals, and Duplicate Content
5.1 The Alias Is Your URL
Every article, category, and menu item has an Alias. It becomes the slug in the URL. Joomla fills it automatically from the title, lowercased and hyphenated, but you should review it:
- Keep it short and readable:
joomla-seo-guide, notjoomla-seo-guide-2026-final-v2. - Set it once and leave it. Changing an alias changes the URL and breaks inbound links (see section 10).
- Never reuse the same alias inside one category - Joomla will append a number and you lose the clean slug.
5.2 How the Full URL Is Built
A clean Joomla URL is not one field. The router stitches it together from the aliases along the path:
/services/seo/joomla-seo-guide
│ │ │
│ │ └─ article alias
│ └─ category alias (or sub-menu alias)
└─ menu item alias
This means a tidy menu and category tree produces tidy URLs for free, while a messy tree produces deep, confusing paths. Plan the structure before you publish hundreds of articles.
5.3 Why Duplicate Content Happens in Joomla
Joomla can legitimately reach the same article through several routes:
/seo-guide (its own menu item)
/blog/seo-guide (through a blog category menu)
/component/content/article/42 (the routeless fallback)
Three URLs, one article. Left alone, search engines may index all three and split the ranking signal between them.
5.4 How Joomla's Canonical Link Helps
When several menu items point at the same content, Joomla emits a canonical tag that names the URL it considers primary:
<link rel="canonical" href="https://site.tld/seo-guide">
This tells the crawler "index this one, treat the rest as copies". The catch: Joomla picks the primary itself, and after a menu refactor that choice can flip. Always verify the canonical on key pages after you reorganise navigation. To force one clean path with several navigation entries, use a menu item of type System Link → Menu Item Alias instead of two real items pointing at the same content.
Back to top6. Images, Media, and Accessibility
6.1 Alt Text Is SEO and Accessibility at Once
The image alt attribute describes a picture for screen readers and for image search. Joomla's editor and the article Images tab both have an Image Alt field. Fill it with a short, honest description:
<img src="/joomla-dashboard.jpg"
alt="The Joomla 6 administrator dashboard">
Leave it empty only for purely decorative images, where Joomla offers an "alt empty" option so screen readers skip them correctly.
6.2 File Names and Size
- Name files in words:
red-running-shoes.jpg, notIMG_4821.jpg. - Resize before upload. A 4000px photo on a 600px slot wastes bandwidth and hurts speed.
- Prefer modern formats. Joomla's media tools and many templates support WebP and AVIF, which are far smaller than JPEG at the same quality.
6.3 Lazy Loading
Joomla can add loading="lazy" to images below the fold so the browser defers them until needed. This improves the Largest Contentful Paint score that Google measures. Many templates and the core editor add it automatically; check your output and do not lazy-load the single most important image at the top of the page.
7. Internal Linking and Breadcrumbs
7.1 Why Internal Links Matter
Internal links are the quiet workhorse of SEO. They do three jobs at once:
- Discovery - crawlers follow links to find new pages. An article nobody links to is an orphan that may never get indexed.
- Link equity - ranking strength flows along links. Pointing strong pages at important ones lifts the targets.
- Context - the words you use in a link (the anchor text) tell search engines what the target page is about.
7.2 Joomla's Internal-Linking Tools
You do not need an extension for solid internal linking. Joomla core gives you several routes:
| Tool | What it links |
|---|---|
| Category Blog layout | Lists articles in a category, each linked - a natural hub page. |
| Tags | Group related articles across categories; each tag page links them together. |
| Articles - Related module | Shows articles that share tags with the current one. |
| Editor link button | Link words inside the body to other articles by search, not by raw URL. |
Always link from inside the body text with descriptive words ("read our Joomla redirects guide"), not a bare "click here". The anchor text is free SEO signal.
7.3 Topic Clusters
The strongest internal-linking pattern is the topic cluster: one broad "pillar" page links down to several detailed pages, and every detail page links back up to the pillar and across to its siblings.
Pillar: /joomla-seo (broad overview)
├─ /joomla-seo/sef-urls (detail)
├─ /joomla-seo/redirects (detail)
└─ /joomla-seo/multilingual (detail)
In Joomla you build this with one category (the pillar) plus a shared tag, so the Related module wires the siblings together automatically.
7.4 Breadcrumbs
Breadcrumbs are the small "Home → Services → SEO" trail near the top of a page. Joomla generates them from the menu and category path through the Breadcrumbs module (publish it to a module position in your template):
Extensions → Site Modules → New → Breadcrumbs
They help two audiences. Visitors see where they are and can climb back up. Search engines read the trail as site structure, and with BreadcrumbList structured data (section 8) they can show the trail directly in the results instead of a raw URL.
8. Structured Data and Social Sharing
8.1 What Structured Data Does
Structured data (usually JSON-LD) describes your page in a machine-readable form: this is an Article, here is its author, its date, its image. Search engines use it to build rich results - star ratings, FAQ drop-downs, breadcrumbs, article cards.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Joomla SEO Guide",
"datePublished": "2026-06-06",
"author": { "@type": "Person", "name": "Peter Martin" }
}
</script>
Useful schema types for a Joomla site include Article and BlogPosting for content, BreadcrumbList for the trail, FAQPage for question lists, and Organization or Person for the author and brand.
8.2 Open Graph and Twitter Cards
When someone shares your link on social media, the preview comes from Open Graph tags:
<meta property="og:title" content="Joomla SEO Guide">
<meta property="og:description" content="How Joomla handles SEO out of the box.">
<meta property="og:image" content="https://site.tld/images/seo.jpg">
8.3 Where This Comes From in Joomla
Joomla core does not emit JSON-LD or Open Graph automatically. You get them from one of three sources:
- Your template - many modern Joomla templates output Open Graph from the active article.
- A plugin or component dedicated to structured data.
- A small custom plugin that hooks
onBeforeCompileHeadand adds the tags from the current document.
Because they are not core, audit them. A template that hard-codes the same og:image on every page is worse than none.
8.4 Custom Fields Feed Schema
Joomla's Custom Fields are a clean source of structured data. When you add fields such as Rating, Author Bio, or FAQ Question/Answer to an article type, a template override or plugin can read those values and emit matching schema. The editor fills a normal form field; the page gains a precise, consistent @type without anyone hand-writing JSON. This keeps the structured data up-to-date as content changes.
9. Sitemaps and robots.txt
9.1 robots.txt Ships With Joomla
Joomla includes a file called robots.txt.dist in the site root. Rename a copy to robots.txt to use it. The default blocks crawlers from system folders:
User-agent: *
Disallow: /administrator/
Disallow: /api/
Disallow: /cache/
Disallow: /cli/
Disallow: /components/
Disallow: /includes/
Disallow: /installation/
Disallow: /language/
Disallow: /libraries/
Disallow: /logs/
Disallow: /tmp/
Two warnings. First, do not disallow /images/ or /media/ if you want image search to work. Second, robots.txt blocks crawling, not indexing - to truly hide a page from results use the robots meta tag (section 3.3), not just Disallow.
9.2 The XML Sitemap
An XML sitemap is a list of your URLs that you submit to Google Search Console so crawlers find every page. Joomla core does not generate one. You add it with a well-known extension such as OSMap or JSitemap. Once generated, reference it at the bottom of robots.txt:
Sitemap: https://site.tld/index.php?option=com_osmap&view=xml&id=1
9.3 Google Search Console
Whatever extension you choose, connect the site to Google Search Console. It is free and it tells you what no setting can: which pages are indexed, which queries bring visitors, which URLs return errors, and where crawlers get stuck. SEO without Search Console is guessing. Submit the same sitemap to Bing Webmaster Tools as well, so Bing and Copilot discover your pages too.
Back to top10. Redirects and Broken Links
10.1 Why Moved URLs Matter for SEO
When you rename an article or restructure the site, the old URL stops working. Every external link and every bit of search ranking that pointed at it now lands on a 404. That accumulated value, often built over years, simply evaporates.
10.2 The Redirects Component
Joomla solves this with the core Redirects component (com_redirect). It logs every 404, lets you map the old URL to a new one, and sends the correct status code:
Old URL: /old-seo-article
New URL: /joomla-seo-guide
Code: 301 Moved Permanently
A 301 tells search engines the move is permanent and passes the old page's ranking to the new URL. Enable the System - Redirect plugin first, because the component does nothing until that plugin is on.
10.3 The Custom Status Code Trap
By default the component forces every redirect to 301, ignoring the code on each row. To honour your per-row choice, switch on Components → Redirects → Options → Use Custom Redirect Status Codes = Yes before you import a migration file. (For the full workflow, see the separate Focus On article on Redirects.)
11. Performance and Core Web Vitals
11.1 Speed Is a Ranking Factor
Google measures real-world loading speed through the Core Web Vitals and uses them as a ranking signal:
| Metric | Measures | Good |
|---|---|---|
| LCP (Largest Contentful Paint) | Time to render the main content | under 2.5s |
| INP (Interaction to Next Paint) | Responsiveness to clicks | under 200ms |
| CLS (Cumulative Layout Shift) | Visual stability while loading | under 0.1 |
11.2 The Built-in Levers
Joomla gives you several speed controls without an extension, in Global Configuration and the system plugins:
- Caching (
System → Global Configuration → System → Cache) plus the System - Page Cache plugin for full-page caching. - Gzip Page Compression (
Servertab) to shrink the HTML sent over the wire. On servers that support it, Brotli at the web-server level compresses even better. - The HTTP Headers plugin to set caching headers for static assets.
- A modern PHP version. Each major PHP release runs noticeably faster, so keeping the server on a current, supported PHP is free speed.
11.3 The Bigger Wins
The largest gains usually live outside settings:
- Right-sized, modern-format images (section 6).
- A lean template that does not load five icon fonts and three sliders.
- HTTP/2 or HTTP/3 and a good host.
- A CDN in front of images, CSS, and JavaScript, so static assets load from a server near the visitor.
- Fewer third-party scripts. Each analytics or chat widget adds blocking JavaScript.
11.4 Keep the Database Healthy
A slow database drags every page down. A little routine maintenance keeps Joomla fast:
- Uninstall extensions you no longer use, rather than just disabling them.
- Clear old data: expired cache, the redirect 404 log, action logs, and stale sessions.
- Run an occasional
OPTIMIZE TABLEon large tables such as#__contentand#__finder_links.
Measure with Google PageSpeed Insights or Lighthouse before and after each change, so you know which one helped.
Back to top12. Multilingual SEO
12.1 hreflang Done For You
On a multilingual Joomla site, search engines need to know which page is which language. The hreflang link tag tells them. The good news: when you associate translated content in Joomla and run the System - Language Filter plugin, Joomla emits these tags automatically:
<link rel="alternate" hreflang="en-GB" href="https://site.tld/en/seo-guide">
<link rel="alternate" hreflang="nl-NL" href="https://site.tld/nl/seo-gids">
This only works when each article is correctly associated with its translations in the article's Associations tab. Miss the association and the hreflang tag is missing too.
12.2 One Language Per URL
Keep each URL inside its own language. A Dutch page should link to and redirect within /nl/, an English page within /en/. Cross-language redirects and mixed-language pages confuse both visitors and crawlers.
12.3 Translate the Metadata Too
Per-language SEO is not only the body text. Translate the meta description, the alias, and the browser page title for each language. A Dutch page with an English description and an English slug looks half-built to a Dutch searcher.
Back to top13. E-E-A-T and AI Search
13.1 What E-E-A-T Is
E-E-A-T stands for Experience, Expertise, Authoritativeness, and Trustworthiness. It is not a single ranking dial, but it shapes how Google's quality systems judge your content, especially for topics where bad advice can cost money or harm. For a specialist site, it is the difference between "a page about the topic" and "a page by someone who clearly does this work".
13.2 Building E-E-A-T in Joomla
Joomla gives you the building blocks without an extension:
- Author pages - use the Contacts component (
com_contact) and link a contact to a user. Joomla can then show a real author box with a biography, photo, and links. - The trust pages - a clear About, Contact, Privacy Policy, and Terms page. Simple articles, but search engines and visitors look for them.
- Freshness signals - the
publish_upandmodifieddates on each article. Show "Published" and "Last updated" so readers and crawlers see the content is maintained. - Evidence of experience - case studies, screenshots from real projects, and measured results. This article style, explaining how Joomla actually behaves, is itself an E-E-A-T signal.
13.3 Trust and Security Are SEO Too
Trust is the foundation of E-E-A-T, and a chunk of it is technical. A site that leaks data or runs old code does not look trustworthy:
- Serve everything over HTTPS.
- Set modern security headers with the core HTTP Headers plugin (see the separate Focus On article on HTTP Headers).
- Keep Joomla and every extension up to date, and protect admin logins with multi-factor authentication.
13.4 Optimising for AI Search
Search now includes AI answers - Google's AI Overviews, ChatGPT Search, Perplexity, and Bing Copilot. They pull from clear, well-structured pages and cite the sources they trust. To be quotable:
- Answer the question directly in the first paragraph, then expand.
- Use plain, descriptive headings that match how people ask questions.
- Add an FAQ section with
FAQPageschema (section 8) for the short, direct answers these systems prefer. - Be consistent about names and entities - your brand, your author, your products - so the systems can connect them.
The same habits that make a page good for E-E-A-T make it good for AI search: clear structure, honest expertise, and machine-readable signals.
Back to top14. Under the Hood (Developer View)
14.1 The Document Object
Almost every SEO tag comes from Joomla's Document object. A component, plugin, or template override can set them directly:
use Joomla\CMS\Factory;
$doc = Factory::getApplication()->getDocument();
$doc->setTitle('Joomla SEO Guide');
$doc->setMetaData('description', 'How Joomla handles SEO out of the box.');
$doc->setMetaData('robots', 'index, follow');
// Canonical link
$doc->addHeadLink(
'https://site.tld/joomla-seo-guide',
'canonical',
'rel'
);
The same setMetaData() call writes Open Graph if you pass an attribute flag:
$doc->setMetaData('og:title', 'Joomla SEO Guide', 'property');
14.2 Where the Values Are Stored
For articles, the SEO fields live as columns on #__content:
metadesc the meta description text
metakey the legacy meta keywords (rarely used)
metadata a JSON blob: robots, author, rights
attribs per-article display params (JSON)
Menu items store the same idea in the params JSON column: menu-meta_description, robots, page_title, and so on. Categories carry their own metadesc and metadata columns. The router merges these by precedence at render time.
14.3 The SEF Router and Plugins
The clean URL you see is built by each component's router (for example ContentRouter for articles) and finished by the System - SEF plugin, which rewrites relative links and absolute paths in the final HTML. To add tags globally, a plugin can hook the head-compile event:
public function onBeforeCompileHead(): void
{
$doc = Factory::getApplication()->getDocument();
$doc->setMetaData('og:site_name', 'My Company', 'property');
}
This is the clean place to inject site-wide Open Graph or JSON-LD without editing the template.
Back to top15. Web Services and Headless SEO
15.1 SEO Fields Through the API
When you run Joomla as a headless backend for a separate front-end (React, Vue, a mobile app), the SEO metadata travels through the Web Services API. Enable the Web Services - Content plugin and the article endpoints return the SEO columns:
curl -H "X-Joomla-Token: <token>" \
https://site.tld/api/index.php/v1/content/articles/42
The JSON response includes metadesc, metakey, metadata, and the alias - everything the front-end needs to render its own <title>, description, and canonical.
15.2 SEO Moves to the Front-End
The key shift with headless: Joomla no longer renders the HTML head, so Joomla's automatic canonical and hreflang tags do not appear. Your front-end must rebuild them from the API fields. A few rules for a headless setup:
- Render real server-side HTML (SSR or static generation) so crawlers see the tags. A blank page hydrated only by JavaScript indexes poorly.
- Map the API
aliasto your front-end route, and emit your own canonical from it. - Build JSON-LD on the front-end from the structured fields the API returns.
Headless gives you total control of the output. The trade is that every SEO tag Joomla used to add for free becomes your responsibility.
Back to top16. Common Mistakes and Pitfalls
16.1 Clean URLs Return 404 After Launch
Symptom: you switched on URL Rewriting and now every page is a 404.
Fix: rename htaccess.txt to .htaccess (Apache) or add the try_files rule (NGINX). See section 2.2.
16.2 Every Page Has the Same Title or Description
Symptom: search results show the same snippet for many pages.
Fix: the site default is leaking through because individual pages have no value. Set a unique meta description and browser page title per important page.
16.3 The Wrong Page Ranks (Duplicate Content)
Symptom: Google indexes /component/content/article/42 instead of your clean URL.
Fix: give the content a real menu item so it has a stable route and canonical. Check the canonical tag after any menu change (section 5.4).
16.4 Changing an Alias Breaks Links
Symptom: you edited an alias for clarity and inbound links now 404.
Fix: create a 301 redirect from the old alias to the new one in com_redirect. Better still, decide the alias once and stop changing it.
16.5 robots.txt Used to Hide a Page
Symptom: a page you "blocked" in robots.txt still appears in search, sometimes with no snippet.
Fix: Disallow stops crawling, not indexing. To remove a page from results, set its robots meta tag to noindex and let crawlers reach it.
16.6 Noindex Left On After Launch
Symptom: a brand-new site gets no traffic and is not indexed at all.
Fix: check Global Configuration → Metadata → Robots. A development site is often set to noindex, nofollow and the switch is forgotten at go-live.
16.7 Orphan Pages and Broken Schema
Symptom: some pages never get indexed, or rich results never appear.
Fix: link every important page from at least one other page (section 7), and validate structured data with Google's Rich Results Test before relying on it.
16.8 Trusting an SEO Extension Blindly
Symptom: two extensions and the template all write an og:image, so the social preview is random.
Fix: pick one source for each tag. View the page source and confirm each SEO tag appears exactly once.
Back to top17. Best Practices
If you only remember a few things from this article, remember these:
- Turn on SEF URLs with URL Rewriting, and rename
htaccess.txtto.htaccess. - Write a unique browser title and meta description for every important page.
- Use one clear
<h1>per page and an ordered heading structure below it. - Set the alias once; never rename it without a 301 redirect.
- Link your pages together with descriptive anchor text, and publish breadcrumbs.
- Use the robots meta tag, not
robots.txt, to keep a page out of the index. - Fill in image
alttext and ship right-sized, modern-format images. - Add an XML sitemap extension and connect Google Search Console.
- Measure speed with PageSpeed Insights and chase the Core Web Vitals.
- On multilingual sites, associate translations so hreflang works.
- Show real authorship, keep the site updated and secure, and add FAQ schema for AI search.
- Verify the final HTML: each SEO tag should appear once and only once.
18. Quick Reference
SEF URLs Global Configuration → Site → SEO Settings
URL REWRITE rename htaccess.txt → .htaccess (Apache)
TITLE PATTERN Include Site Name in Page Titles: After Title
SITE META Global Configuration → Site → Metadata Settings
PER ARTICLE Articles → [item] → Publishing → Meta Description
PER MENU Menus → [item] → Page Display + Metadata
ROBOTS META index,follow / noindex,follow / ...
H1 / TITLE one h1 per page; title can differ from heading
ALIAS short, set once, 301 if changed
URL PATH menu alias / category alias / article alias
CANONICAL Joomla picks primary menu item; verify after changes
INTERNAL LINK descriptive anchors + tags + Related module
BREADCRUMBS Site Modules → Breadcrumbs + BreadcrumbList schema
IMAGES alt text + resized + WebP/AVIF + lazy-load below fold
SCHEMA / OG not core: template, plugin, or Custom Fields
ROBOTS.TXT copy robots.txt.dist; blocks crawl, not index
SITEMAP extension (OSMap / JSitemap) + Search Console
REDIRECTS com_redirect, 301, enable System - Redirect plugin
SPEED Page Cache + Gzip/Brotli + CDN + lean template + HTTP/2
MULTILINGUAL associate translations → automatic hreflang
E-E-A-T author pages + trust pages + updated dates
AI SEARCH direct answers + FAQ schema + consistent entities
DEVELOPER $doc->setMetaData() / setTitle() / addHeadLink()
DB FIELDS #__content: metadesc, metakey, metadata
HEADLESS API returns metadesc; front-end emits the tags
Back to top19. Summary
Joomla SEO is less about secret tricks and more about using the controls that already ship in core. Without installing any 3rd party extension, you can already:
- Shape clean URLs with the three SEO settings and a renamed
.htaccess. - Control the snippet through per-page titles and meta descriptions.
- Steer crawlers with the robots meta tag and a clean heading structure.
- Avoid duplicate content with sensible menus, stable aliases, and canonicals.
- Connect your pages with internal links, tags, and breadcrumbs.
- Protect ranking through 301 redirects when URLs move.
- Serve every language correctly with automatic hreflang from associations.
- Build trust with real authorship, security, and content that shows experience.
Extensions add the pieces core leaves out - an XML sitemap, structured data, and Open Graph - but they sit on top of a foundation Joomla already gives you for free. Start with the core settings, verify the HTML they produce, and connect Google Search Console so you can see the result.
If your search traffic is flat, or a site move has scattered your rankings, it pays to check these core settings before buying another plugin. The fix is often a forgotten noindex, a missing .htaccess, or a duplicate canonical - small things in Joomla that make a large difference in search.


Joomla specialist and Linux admin for fast, secure and scalable websites.


