Includes: Component, Plugin
SiteMapLab
Automatic XML and HTML sitemaps for Joomla 5 and 6 — no server configuration, no .htaccess rules, no dependencies.
Install it, enable the plugin, and your sitemap is live at /sitemap.xml. Submit it to Google and Bing, configure exclusions, and let SiteMapLab keep it up to date automatically.
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.
See SiteMapLab in Action
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
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)