Joomla SEF URLs: Enable, Rewrite, and Fix Clean Links
How to enable Joomla SEF URLs and URL rewriting on versions 3 to 6, remove index.php, set aliases, avoid duplicates, and fix 404s with a verification checklist.
- Published
- Updated
- Reading time
- 9 min read

On this page 16 sections
- What you will learn
- Quick URL transformation table
- SEF vs rewriting: do not conflate them
- Global Configuration SEO panel (all modern versions)
- Step 1: Decide the target URL shape
- Step 2: Activate the server rewrite file
- Step 3: Turn on SEF, then rewriting
- Step 4: Control aliases like a product manager
- Step 5: Multilingual SEF
- Step 6: Joomla 4+ API routes vs site SEF
- Duplicate URLs and canonical hygiene
- Performance notes
- Verification checklist
- Troubleshooting matrix
- Key takeaways
- Frequently asked questions
Joomla SEF URLs (Search Engine Friendly URLs) turn long query strings into readable paths built from menu and content aliases. Enable Search Engine Friendly URLs in Global Configuration so Joomla builds paths like /index.php/news/my-article. Enable Use URL Rewriting and activate the server rewrite file (.htaccess, web.config, or nginx rules) so index.php disappears and you get /news/my-article. The same settings apply on Joomla 3, 4, 5, and 6. Official overview: Search Engine Friendly URLs.
SEF is not a ranking switch. It is URL hygiene: clearer links for people, crawlers, and analytics. Pair it with solid aliases, one canonical host, and redirects when you rename paths. Deep server rewrite help: Joomla .htaccess guide. Redirect layers: Joomla Redirect Guide. Broader SEO: full Joomla SEO checklist.
What you will learn
- What SEF URLs are in Joomla (and what they are not)
- The difference between SEF URLs and URL rewriting
- Exact Global Configuration switches, including Unicode aliases and
.htmlsuffixes - Step-by-step setup on Apache/LiteSpeed, IIS, and nginx
- How menus and aliases actually build the path
- Duplicate URL traps, multilingual SEF, and API routes on Joomla 4+
- A verification and troubleshooting matrix agencies use on go-live
Infyways: Joomla development · Joomla on-page optimization · Joomla website optimization.
Quick URL transformation table
| Stage | Example URL | What turned it on |
|---|---|---|
| Raw (non-SEF) | /index.php?option=com_content&view=article&id=42&Itemid=101 |
SEF Off |
| SEF without rewrite | /index.php/news/42-my-article (pattern varies by menu) |
Search Engine Friendly URLs = Yes |
| SEF with rewrite | /news/my-article |
Use URL Rewriting = Yes + server rewrite file |
| Broken “pretty” links | 404 on /news/... while /index.php/news/... works |
Rewrite file missing, RewriteBase wrong, or AllowOverride blocked |
SEF vs rewriting: do not conflate them
| Setting | Job | Needs .htaccess / nginx / IIS rewrite? |
|---|---|---|
| Search Engine Friendly URLs | Joomla generates human-readable path segments from aliases | No |
| Use URL Rewriting | Server strips index.php from those paths |
Yes |
| System - SEF plugin | Rewrites many hard-coded links inside article HTML toward SEF forms | No (plugin), but still benefits from correct site SEF |
You can run SEF with index.php still visible. Many thin guides skip that and blame Joomla when rewriting fails.
Official Apache steps: Enabling SEF URLs on Apache.
Global Configuration SEO panel (all modern versions)
Path: System → Global Configuration → Site (SEO / Search Engine Friendly block). Labels vary slightly by version, but the controls match.
| Option | Recommended default | Notes |
|---|---|---|
| Search Engine Friendly URLs | Yes | On by default since Joomla 1.6-era configs for new sites |
| Use URL Rewriting | Yes only after rewrite file works | Rename htaccess.txt first on Apache/LiteSpeed |
| Add Suffix to URLs | Usually No | Adds .html. Cosmetic; changing later creates redirect debt |
| Unicode Aliases | No for ASCII-first sites; Yes when you need native script in aliases | Affects future auto-aliases, not a mass rewrite of old ones (Global Configuration guide) |
| Site Name in Page Titles | Project choice | Not an SEF path setting, but sits in the same SEO mental model |
Tip from the official guide: after changing SEO settings, hard-refresh open front-end tabs. Stale browser tabs make internal links look broken when they are only cached against the old format.
Do not casually flip SEO settings on a live indexed site. Changing suffix, Unicode behavior, or rewrite mode can orphan old URLs. Plan 301 redirects first.
Step 1: Decide the target URL shape
Write down three example URLs you want live:
- Home
- A category/blog listing
- One article under a menu item
Agree on:
- www vs bare host
- HTTPS only
- Trailing slash policy (be consistent; do not mix randomly)
- Whether
.htmlsuffixes are required (usually not)
If those are undecided, fix hosting and redirects before SEF theater.
Step 2: Activate the server rewrite file
Apache / LiteSpeed / OpenLiteSpeed
- In the Joomla root (same folder as
configuration.php), renamehtaccess.txtto.htaccess. - If the site lives in a subdirectory, set
RewriteBase /yourfolder/. - If you get HTTP 500, comment
Options +FollowSymlinksas hosts often forbid it. - On OpenLiteSpeed, restart the server after edits.
Full breakdown: htaccess-joomla.
IIS
Rename web.config.txt to web.config, then enable Use URL Rewriting.
nginx
.htaccess does nothing. Use try_files to index.php (and /api/ → api/index.php on Joomla 4+). Keep Use URL Rewriting aligned with that nginx config.
Step 3: Turn on SEF, then rewriting
- Open System → Global Configuration.
- Set Search Engine Friendly URLs to Yes. Save.
- Confirm front-end links look like
/index.php/...style SEF paths. - Set Use URL Rewriting to Yes. Save.
- Confirm
index.phpis gone from normal menu URLs. - Enable System - SEF plugin if it is not already enabled (Plugin Manager). It helps SEF-ify many links embedded in content HTML.
Order matters: rename/configure rewrite first (or immediately before enabling rewriting). Enabling rewriting with no rewrite engine produces widespread 404s.
Step 4: Control aliases like a product manager
Aliases are the vocabulary of your URLs.
- Set a clear menu alias for each important Itemid path.
- Set article/category aliases deliberately. Auto-alias from title is fine for drafts; edit before publish for money pages.
- Avoid duplicate aliases under the same parent context.
- Prefer short, stable aliases. Do not stuff every keyword into the slug.
- When you rename an alias on an indexed URL, add a 301 the same day.
Joomla builds paths from the active menu tree more than from “category folders” alone. Two menu items pointing at similar content can create two valid URLs. That is an IA problem, not an SEF bug.
Step 5: Multilingual SEF
On multilingual sites:
- Each language needs its own menu tree and associations where required.
- Language codes or domains must be planned (subdirectory vs domain).
- Do not enable Unicode aliases casually if half your audience cannot type those characters.
- Test language switcher targets resolve to associated items, not 404s.
Native multilingual is a Joomla strength. SEF mistakes show up as “wrong language URL” tickets faster than on monolingual sites.
Step 6: Joomla 4+ API routes vs site SEF
Modern stock .htaccess routes /api/ to api/index.php for Web Services. Site SEF and API routing share the rewrite engine but different front controllers. If pretty site URLs work but /api/v1/... 404s, your .htaccess may be an old Joomla 3-era file missing the API block. Merge forward from current htaccess.txt.
Duplicate URLs and canonical hygiene
Common duplicate classes:
| Pattern | Cause | Fix |
|---|---|---|
/index.php/alias and /alias both 200 |
Rewrite on, but old links still circulate | 301 index.php variants to clean URLs at server or redirect component |
| Same article under two menus | Two Itemids | Pick one primary menu path; redirect or noindex the other |
| www and non-www | Host not canonicalized | Server 301 (redirect guide) |
| HTTP and HTTPS | TLS not forced | Server 301 + HSTS when ready |
| Alias change without 301 | Editor renamed slug | Immediate redirect |
Search engines tolerate some duplication. Humans and analytics do not.
Performance notes
SEF itself is cheap compared with uncached page generation. Rewriting is handled by the web server before PHP for the route hop. Performance work still belongs in caching, images, and extension hygiene (speed up Joomla if you maintain that URL). Do not disable SEF “for speed” unless you have measured a real rewrite misconfiguration.
Verification checklist
curl -I https://www.example.com/
curl -I https://www.example.com/your-menu-alias
curl -I https://www.example.com/index.php/your-menu-alias
Pass criteria:
- Canonical host and HTTPS in one hop where possible
- Clean alias returns 200
index.phpvariant 301s to clean URL (ideal) or at least is not the only working form- CSS/JS still load (broken
RewriteBaseoften breaks assets) - Administrator login still works
Troubleshooting matrix
| Symptom | Likely cause | Fix |
|---|---|---|
Pretty URLs 404; /index.php/... works |
Rewrite not active | Rename htaccess.txt, fix nginx/IIS, check AllowOverride |
| Entire site 500 after rename | Options +FollowSymlinks |
Comment that line |
| Assets 404 in subfolder | Bad RewriteBase |
Set /subfolder/ |
| SEF On but URLs unchanged | Cache / CDN / wrong site | Clear Joomla and CDN cache; confirm you edited the live Global Config |
| Only some article links stay ugly | Hard-coded non-SEF links in content | Enable System - SEF; edit content; use Joomla link picker |
| Works on Apache staging, fails on nginx prod | .htaccess unused |
Write nginx try_files |
| API 404 on J4+ | Old rewrite file | Add /api/ block from modern htaccess.txt |
| Sudden ranking dip after SEO flips | URL shape changed | Restore pattern or 301 old → new |
Key takeaways
- SEF URLs make paths readable. Rewriting removes
index.php. They are separate switches. - Activate the server rewrite file before or as you enable Use URL Rewriting.
- Aliases and menu structure define the URL vocabulary more than a mythical “category folder” alone.
- Changing SEO settings on a live site without redirects creates avoidable debt.
- Keep
.htaccess/ nginx / IIS rules current when you move across Joomla 3 → 4 → 5 → 6.
Frequently asked questions
Filed under Joomla


