Includes: Component, Plugin
SiteMapLab
About this Extension
SiteMapLab is a lightweight sitemap generator for Joomla 5 and 6. It automatically builds a standards-compliant XML sitemap from your menu items, articles, and categories — and serves it at /sitemap.xml with zero server configuration. No .htaccess rules, no rewrite magic, no dependencies.
Install it, enable the system plugin, and your sitemap is live. Submit the URL to Google Search Console and Bing Webmaster Tools and you’re done. Everything else — caching, exclusions, IndexNow pings, extension integration — is there when you need it.
Who It’s For
- Site owners who want a sitemap without the bloat — lightweight, Joomla 5 and 6 native, with no legacy baggage
- Developers building Joomla sites — install once, works immediately, configure only what you need
- Agencies managing multiple client sites — lightweight and consistent across all Joomla 5 and 6 installs
- Sites using other TDCLab extensions — ResearchLab, FAQLab, and other TDCLab extensions include SiteMapLab integration plugins that automatically add their content to your sitemap
Key Benefits
- Works out of the box — visit
/sitemap.xmlafter enabling the system plugin and your sitemap is already there, populated with your menu items, articles, and categories - No server configuration needed — the system plugin intercepts
/sitemap.xmlrequests directly; no .htaccess edits or rewrite rules required - Smart caching — the sitemap is generated once and cached for up to 24 hours, so it serves in milliseconds without hitting your database on every request
- IndexNow support — automatically notifies Bing and Yandex the moment content is saved, using your own API key
- URL exclusion manager — block specific URLs from the sitemap by exact match, prefix, or contains rule; useful for landing pages, thank-you pages, or any URL you don’t want indexed
- Extension integration — other TDCLab extensions add their own URLs to your sitemap automatically via the
sitemaplabplugin group; no configuration needed - HTML sitemap included — add a front-end HTML sitemap page for visitors and accessibility without any extra setup
- Large site ready — automatically splits into a sitemap index with multiple files for sites with over 50,000 URLs
- No dependencies — vanilla PHP and Joomla-native MVC; no jQuery, no Bootstrap, no third-party libraries in the output
How It Works
- Install the package — the component and system plugin are installed together in one step.
- Enable the System — SiteMapLab plugin in Extensions → Plugins.
- Visit
https://yoursite.com/sitemap.xml— the sitemap is generated and cached automatically on first visit. - Submit the sitemap URL to Google Search Console and Bing Webmaster Tools.
- Optionally configure cache lifetime, content sources, URL exclusions, and IndexNow notifications in the component options.
Built for Joomla 5 and 6 using Joomla’s native MVC architecture. No jQuery, no Bootstrap dependencies in the front-end output. The system plugin handles /sitemap.xml directly — no URL rewriting required.
Releases
What's New
Every sitemap URL is now built by Joomla's own site router instead of being pieced together from menu paths and aliases. Sitemap links now match the links on your site exactly, whatever your SEF settings. Pages search engines cannot use are left out, and the HTML sitemap page now follows the same rules. After updating, go to Components → SiteMapLab → Dashboard and click Clear Cache & Regenerate to rebuild the cached sitemap.
Improvements
Exclude System Pages option (Component Options → Content Sources, on by default) — leaves out login, registration, password reset, profile, privacy request, search results and form/task menu items
noindex pages skipped — articles, categories and menu items whose effective robots setting is *noindex* are no longer listed, avoiding "Submitted URL marked noindex" warnings in Search Console
Same output from frontend and admin — URLs are built with a guest-visitor menu, so regenerating from the dashboard as an administrator gives exactly the same sitemap as a crawler sees, with no `/administrator/` URLs
Subcategories — articles and categories below a category menu item are included with their full path
Better lastmod dates — article and category menu items use the content's modified date instead of today's date
Plugin helper — `sitemaplab` plugins can call `$event->getArgument('subject')->buildUrl('index.php?option=...')` to get a router-built absolute URL from either client
Bug fix release addressing issues with extension plugin integration and the admin dashboard. Third-party extensions can now reliably contribute URLs to the sitemap, and the dashboard regenerate action immediately reflects accurate stats.
Fixes
- Extension plugin URLs not appearing in sitemap — the event argument was not being passed back correctly from plugin handlers; fixed by switching to the
setArgument()pattern - Admin dashboard producing /administrator/ URLs —
Route::_()called in admin context during regeneration was prepending the admin path to all extension URLs; replaced with direct URL construction using router segment patterns - PHP errors silently aborting extension URL collection — the catch block was catching
\Exceptiononly; errors thrown during plugin loading (\Throwable) were silently suppressing all extension URLs - Dashboard stats showing zero after clearing cache — the regenerate action was only clearing the cache file, never writing a new one; it now calls
generate()directly so stats are accurate immediately
Improvements
- Added
PluginHelper::importPlugin(‘sitemaplab’)to ensure thesitemaplabplugin group is loaded before the collection event fires - Third-party extensions can now integrate via plugins in the
sitemaplabgroup — implementonSiteMapLabCollectUrlsand return URLs via$event->setArgument(‘urls’, $urls)
Included in this release
- com_sitemaplab — Component with admin dashboard, exclusion manager, and options
- plg_system_sitemaplab — System plugin that intercepts
/sitemap.xmland injects the sitemap link tag
Features
- Automatic XML sitemap — serves a standards-compliant sitemap at
/sitemap.xmlvia the system plugin; no .htaccess or rewrite rules needed - HTML sitemap view — front-end HTML sitemap page available as a menu item type
- Content sources — collects URLs from published menu items, Joomla articles, and content categories; each source can be toggled individually
- Smart caching — configurable cache lifetime (1, 6, 12, or 24 hours); sitemap is regenerated automatically when the cache expires
- URL exclusion manager — block specific URLs using exact match, prefix, or contains rules; exclusions can be enabled and disabled without deleting them
- IndexNow support — notifies Bing and Yandex via IndexNow when content is saved; requires an API key from indexnow.org
- Sitemap link in head — injects
<link rel=“sitemap”>into every front-end page automatically - Admin dashboard — shows total URL count, cache status, last generated time, file size, and active exclusion count
- Sitemap index — automatically splits into a sitemap index with multiple child files for sites with over 50,000 URLs
- Extension plugin API — third-party extensions can contribute URLs via the
sitemaplabplugin group
Upgrade Notes
First release — no upgrade path required.
Changelog
- Extension plugin URLs not appearing in sitemap — the event argument was not being passed back correctly from plugin handlers; fixed by switching to the setArgument() pattern
- Admin dashboard producing /administrator/ URLs — Route::_() called in admin context during regeneration was prepending the admin path to all extension URLs; replaced with direct URL construction using router segment patterns
- PHP errors silently aborting extension URL collection — the catch block was catching \Exception only; errors thrown during plugin loading (\Throwable) were silently suppressing all extension URLs
- Dashboard stats showing zero after clearing cache — the regenerate action was only clearing the cache file, never writing a new one; it now calls generate() directly so stats are accurate immediately
- Added PluginHelper::importPlugin(‘sitemaplab’) to ensure the sitemaplab plugin group is loaded before the collection event fires
- Third-party extensions can now integrate via plugins in the sitemaplab group — implement onSiteMapLabCollectUrls and return URLs via $event->setArgument(‘urls’, $urls)