GMCsitemap — XML sitemap for Joomla 5/6
GMCsitemap
Smart XML sitemap with trilingual hreflang built in. Auto-detects multilingual associations, ships a clean robots.txt, and survives the next Joomla update without breaking. The €19 fix for the issues OSMap accumulates as it ages.
What it does
Auto sitemap.xml
✓ Crawls categories, articles, menus. Daily auto-refresh. Submits to Google.
Trilingual hreflang
✓ Detects Joomla associations and writes correct hreflang per page.
robots.txt
✓ Auto-generated with correct disallow rules and sitemap pointer.
Performance
✓ Zero impact on TTFB. Pre-generated, cached, served as static.
Update-proof
✓ Survives Joomla 4 → 5 → 6 migrations. Tested in production.
Dashboard
✓ URL count per language, last refresh, validation status.
Why we built it
OSMap stopped indexing our hreflang correctly after Joomla 4.4. We wrote a 200-line replacement that does exactly what we need and nothing else. Then we noticed everyone else has the same problem.
€19 €19
Agency Toolkit
€399
- ✓ Unlimited domains
- ✓ Joomla and WordPress
- ✓ Priority support
Launch offer valid until 26/06/2026
Everything included
103 real features, grouped into 16 areas — the actual depth of the product, not a highlight reel.
Sitemap coverage & output types
- Complete XML sitemap — one
sitemap.xmlindex that fans out to dedicated child sitemaps, submittable to Google Search Console and Bing Webmaster Tools. - Content / articles sitemap — every published article (WordPress: posts) with lastmod, changefreq and priority.
- Pages, custom post types & authors (WordPress) — pages, all public CPTs and author archives can each be toggled into the sitemap.
- Categories sitemap — category/section landing pages included automatically.
- Menu sitemap (Joomla) — real menu items, with excluded menu types filterable.
- Tags sitemap — tag/taxonomy archive pages.
- Image sitemap —
<image:image>entries so your photos can rank in Google Images. - Video sitemap —
<video:video>entries with title, description, thumbnail and duration for video search features. - Google News sitemap — rolling 48-hour window (up to 1,000 URLs) for publishers approved in Google News.
- Per-language sitemaps — a separate flat urlset per published language for multilingual sites.
- Automatic 50,000-URL pagination — content, image and video sitemaps split into paged files (
sitemap-content-N.xml…) so large sites never silently lose URLs. - Single-file vs index mode — small sites can serve one merged
sitemap.xml; large/multilingual sites get a proper<sitemapindex>— chosen automatically or by option. - Per-type default changefreq & priority — set site-wide defaults (plus a separate home-page priority on WordPress) without editing anything per URL.
Crawler discovery engine
- Real BFS web crawler — discovers pages by following links like a search engine, so new articles, categories and media are picked up as the site grows, not from a fixed list.
- Resumable batch crawling — a persistent database-backed queue means you can close the browser and the crawl resumes where it left off.
- Live crawl dashboard — Crawl / Stop / Reset controls with a progress bar and live counts (queued, crawled, errors, skipped, total, images, videos).
- robots.txt respect — honours disallow rules with correct longest-match precedence, so the crawler behaves like a well-mannered bot.
- Same-host-only boundary — keeps the crawl on your own domain by default and skips external links.
- Depth and URL caps — optional max crawl depth and max URL count to bound very large sites.
- URL exclusion patterns — one wildcard pattern per line (e.g.
*/private/*,*?print=*) skips matching URLs both during discovery and in the emitted sitemap. - Tunable fetch behaviour — per-request timeout, redirect-follow cap, batch size, per-batch time budget and a custom crawler user-agent string.
- Crawl-sourced sitemaps (opt-in) — build the content/image/video sitemaps from crawled data, with automatic fallback to the database so output never breaks.
Image & video media
- Content-image extraction (Joomla) — pulls intro, full-text and inline article images, each independently toggleable.
- Crawler-discovered media — finds
<img>,<picture><source srcset>,og:image, native<video>and embedded players across crawled pages. - Embedded video provider detection — recognises YouTube, Vimeo, Dailymotion, Loom, JW Player and Brightcove (WordPress also Wistia) from iframe/embed URLs.
- JSON-LD VideoObject parsing — reads schema.org
VideoObjectmarkup (including nested in@graph) for accurate per-video title, description, thumbnail, embed/content URL and ISO-8601 duration. - Smart image filtering — excludes SVGs, template/framework assets (YOOtheme, Joomla system, media/system) and malformed thumbnail URLs, keeping the image sitemap to real content images.
- External-image control — third-party-host images are excluded by default and can be opted in.
- Per-URL image cap — limit how many images are emitted per page.
Multilingual & hreflang
- hreflang alternates — emits
<xhtml:link rel="alternate" hreflang>blocks so search engines serve the right language version to each audience. - x-default alternate — points undirected traffic at your default-language page.
- Joomla content associations — derives alternates from Joomla's built-in article associations automatically.
- Polylang & WPML integration (WordPress) — reads translations from either plugin (locale-normalised, e.g.
it_IT→it-IT). - Multilingual index restructure — the index automatically links per-language child sitemaps plus shared image/video sitemaps when more than one language is published.
- Clean single-language no-op — monolingual sites emit no alternates and no spurious namespaces, so there is zero regression.
Search-engine notification (IndexNow)
- IndexNow integration — notifies Bing, Yandex, Seznam, Naver and Yep the instant content changes, via the single IndexNow relay.
- One-click key provisioning — generates a 32-char key, writes the verification
{key}.txtto the web root, and hands you the file contents to upload manually if the root is not writable. - Auto-ping on publish/update — automatically pings changed URLs whenever a post/article is saved, published or state-changed.
- Ping debounce — suppresses duplicate pings of the same URL within a configurable window, so bulk edits do not spam the relay.
- Test-ping button — sends a real, live ping from the dashboard and shows the HTTP result as a clear green/red badge.
- Ping history log — records every ping (URLs, count, status, response) and surfaces the last few on the dashboard.
- Honest guidance built in — the UI explains that IndexNow is not Google and that Google discovery happens by submitting
sitemap.xmlin Search Console.
Auto-update pipeline & automation
- Content-event reactions — on article/post save, delete or state change the plugin can invalidate the sitemap cache, re-queue the URL for recrawl and ping IndexNow.
- Three independently togglable actions — cache invalidation, auto-recrawl and auto-ping can each be turned on or off separately.
- Safe manual-mode default — all three auto-actions ship OFF so you verify the crawler works before automating.
- Scheduled crawl task (Joomla) — a
gmcsitemap.crawlScheduler routine drains the crawl queue on a time budget each tick. - Scheduled precache task — pre-warms the cache for all enabled sitemap types so the first real visitor hits a cached response.
- WP-Cron auto-recrawl (WordPress) — re-crawls on a selectable schedule (hourly / twice-daily / daily / weekly), starting a fresh full crawl once the queue drains.
- WP-Cron precache (WordPress) — hourly warm-cache job equivalent to the Joomla precache task.
Static file deployment
- One-click static deploy — "Generate & deploy static files" writes all enabled sitemaps as real
.xmlfiles to the site root, so no URL rewriting or server config is required. - Paginated static output — writes pages 2+ of paginated sitemaps (
sitemap-content-N.xml,sitemap-images-N.xml,sitemap-videos-N.xml) using the generator's real page count. - Automatic stale-file pruning — removes leftover paged files from previous runs after content shrinks, so the deployed set stays exact.
- Scheduled refresh — the scheduled task keeps the static files current after the initial one-time deploy.
- Manual-upload fallback — if any file cannot be written the UI lists exactly which ones to upload by hand.
Caching & performance
- Built-in sitemap cache — generated XML is cached (database on Joomla, transient on WordPress) with a configurable lifetime/TTL.
- Config-aware invalidation — a params-hash in the cache key rebuilds the sitemap immediately after any option change, without waiting for the TTL.
- One-click cache clear — flush the cache manually after bulk imports; upgrades also clear it automatically.
- Conditional GET (ETag / 304) — XML endpoints send
ETag+Last-Modified+Cache-Controland return304 Not Modifiedso crawlers stop re-downloading identical XML. - Content-fingerprint Last-Modified — the last-modified value reflects real content changes so unchanged sitemaps 304 correctly.
- Composite queue index — a
(state, depth)database index removes filesort on every crawl fetch for large sites. - Cache-key page clamping — the
pageparameter is clamped to the real page count so anonymous requests can't mint unbounded cache keys or force recomputation.
Human-readable HTML sitemap
- HTML sitemap view (Joomla) — a browsable, human-readable sitemap page listing articles, categories, menus and tags for visitors.
- "Sitemap (HTML)" menu-item type (Joomla) — publish the HTML sitemap from Menus → New with per-menu display toggles for each section and an optional page-heading override.
[gmc_sitemap]shortcode (WordPress) — drop a readable sitemap (content + categories + tags, up to 2,000 links) into any page or post, withshow_content/show_categories/show_tags/headingattributes.- XSL stylesheet — the raw XML renders as a styled, readable table in the browser instead of an intimidating wall of markup.
SEF / clean URLs
- Always-working long URLs — the default
index.php?option=…&type=…endpoints work on any install with no rewrite rules — the safe fresh-install default. - Optional clean SEF URLs —
/sitemap.xml,/sitemap-content.xml,/sitemap-images.xml,/sitemap-<lang>.xmletc. via an.htaccesssnippet, installed from the dashboard. - Guarded .htaccess installer — backs up the existing file, prepends the snippet, probes that
/sitemap.xmlactually renders, and only then flips the SEF flag; it refuses to create.htaccessfrom scratch so Joomla's baseline security rules are never dropped. - SEF-safe URL de-duplication — on SEF sites raw
com_contentURLs that duplicate the clean canonical page are dropped, gated on the site's real SEF state so it never empties a non-SEF site's sitemap. - Permalink-aware output (WordPress) — child sitemap URLs adapt to the permalink structure (pretty
/sitemap-*.xmlvs query-var form on Plain permalinks) so links never 404. - Native sitemap conflict avoidance (WordPress) — disables WordPress's built-in core sitemap to prevent collisions.
Configuration & exclusions
- Per-type enable switches — turn each sitemap type (content, categories, menu, tags, images, videos, news) on or off.
- Content scope controls (Joomla) — include/exclude featured and archived articles and restrict to the Public access level.
- Category / article / menu exclusions (Joomla) — exclude specific categories, article IDs or menu types.
- Post-level exclusions (WordPress) — exclude specific post IDs and whole post types, plus a per-post exclude meta.
- Menu-link hygiene (Joomla) — optionally drop external-link menu items and menu items flagged noindex.
- Base-URL override — pin the canonical host used in emitted
<loc>values. - Debug & error logging toggles — optional verbose debug output and error logging for troubleshooting.
Security, privacy & correctness
- Access-level enforcement — every collector constrains output to the guest's authorised view levels, so Registered/Special content can never leak into a public sitemap even if
public_onlyis off. - Crawl results access-checked — crawler-discovered URLs are intersected with the access-checked Joomla URL set before emission, and pages that redirect to a login are skipped even on HTTP 200.
- SSRF hardening — the crawler follows redirects manually, rejects private/loopback/link-local/reserved IPs after DNS resolution, pins resolved public IPs against DNS rebinding, restricts protocols to HTTP/HTTPS and caps response body size.
- ReDoS-safe robots matching — the robots.txt matcher uses a bounded, non-backtracking scan instead of a greedy regex.
- CSRF + ACL on admin actions — all admin AJAX endpoints require a CSRF token, and every filesystem- or setting-mutating tool requires the
core.adminprivilege. - Valid-XML output — XML-1.0-invalid control characters are stripped and
changefreqis whitelisted, so the sitemap always validates. - Self-hosted, no data harvesting — nothing leaves your server except the optional IndexNow ping you explicitly enable; there is no third-party SaaS in the request path.
- Manifest-leak protection — the shipped
.htaccesssnippet denies public access to extension.xmlmanifests (author email / version leak). - Crawlable-by-design — deliberately does not set
X-Robots-Tag: noindexon the sitemap response, since some bots treat it as "skip this file entirely".
Developer & extensibility
- Third-party URL contribution — the
onGmcsitemapCollectUrlsevent (Joomla) andgmc_sitemap_collect_urlsfilter (WordPress) let other extensions add<url>entries (loc/lastmod/changefreq/priority) without touching the source; relative URLs are absolutised and deduped. - Documented endpoints — both long-form and SEF sitemap URLs per type are documented for scripted validation.
- Strict type validation — unknown
type=requests return400 Bad Requestwith a minimal XML error body instead of silently serving the wrong sitemap. - Clean service architecture — one collector service per sitemap type makes new sitemap types straightforward to add.
Internationalisation
- Ships in English, Italian and Spanish — admin UI and menu-item strings translated out of the box.
- Respects the site's multilingual configuration — output follows the site's published languages and language filtering.
Trust & licensing
- GPLv2-or-later — fully open-licensed code, Joomla-/WordPress-repository compliant.
- Self-hosted & private — runs entirely on your own site; no external service dependency beyond the optional IndexNow ping you control.
- Licensed one-click updates — automatic update checks (about every 24h) against the GMC / FuerteventuraTV gateway, offered straight in the Joomla/WordPress updater while your licence is active.
- Download Key by email — you receive a licence/Download Key at purchase; enter it once and updates keep flowing.
- Secure update delivery — only HTTPS package URLs from the official fuerteventuratv.net host are accepted for one-click updates.
- Proven in production — generates the live sitemap of the fuerteventuratv.net tourism portal.
- Two products, per-feature parity — the Joomla package and the WordPress plugin are sold separately but tracked to feature parity, with the more advanced platform as the reference.
- Requirements — Joomla 5.x/6.x on PHP 8.1+, or WordPress 5.6+ on PHP 7.4+.
Joomla & WordPress
- Joomla — ships as a single
pkg_gmcsitemappackage bundling the component plus a system plugin (content-event auto-update) and a task plugin (Scheduler crawl + precache routines); adds a native "Sitemap (HTML)" menu-item type; multilingual via Joomla content associations. Install the package zip only — not the inner child zips. - WordPress — covers posts, pages, public custom post types, categories, tags and author archives; multilingual via Polylang or WPML; automation via WP-Cron (auto-recrawl + precache); readable sitemap via the
[gmc_sitemap]shortcode; disables the native WordPress core sitemap; permalink-aware child URLs. The database is the default sitemap source (crawler is opt-in).
Frequently asked questions
-
How do I install it?
Follow the step-by-step installation guide below. For Joomla you upload the package under System → Install → Extensions; for WordPress under Plugins → Add New → Upload Plugin. It takes under a minute.
Installation (Joomla 5 & 6):
- Download the installable
.zipfrom the link in your purchase email (or your account area). Do not unzip it. - In your site, go to System → Install → Extensions.
- Open the Upload Package File tab and drag the
.ziponto the upload area. - Wait for the green “Installation was successful” message.
- Configure it under Components (for components) or System → Manage → Plugins (for plugins) — and enable the plugin if the product ships one.
- Automatic updates: nothing else to do — the extension checks for updates every 24 h and you’ll see them under System → Update → Extensions while your licence is active.
Requirements: Joomla 5.x or 6.x, PHP 8.1 or newer.
- Download the installable
-
How do I get updates?
Updates are automatic. Once installed, the extension/plugin checks our update server on its own (Joomla every 24 h, WordPress every 12 h) and offers the new version in the standard updates screen, as long as your licence is active. You can also re-download the latest build from your account at any time.
-
Which versions are supported?
Joomla products run on Joomla 5.x and 6.x with PHP 8.1+. WordPress products run on WordPress 6.0+ with PHP 8.1+.
-
Is it available in my language?
Yes — every product ships with English, Italian and Spanish out of the box, and respects your site’s multilingual setup.
-
What does the licence include?
The software is released under the GNU GPL. Your purchase gives you the official build, automatic updates and support for one site. Need it on more sites or for clients? Contact us for a volume/agency arrangement.
-
Do you offer a refund?
Yes. If the product doesn’t work as described and we can’t fix it for you, you can request a refund within 14 days of purchase.
-
How do I get support?
Email our support address shown on this site with your order reference. We answer in English, Italian and Spanish.
-
Does the sitemap update automatically?
Yes — it’s generated dynamically and can ping search engines (IndexNow) when content changes.
-
Does it handle multilingual sites?
Yes — it emits hreflang alternates for your languages (WordPress edition supports WPML and Polylang).
-
Do I have to configure anything?
It works out of the box; you can fine-tune what’s included from the settings.
Also from us
El Savio
AI chatbot — answers visitors in 45+ languages. Self-hosted, RAG-trained.
€399
Learn more →CMS Free AI
Backend content generation. Articles, meta, ALT text. Multi-provider AI.
€399
Learn more →Core AI Pack
€119
El Savio + CMS Free AI + GMCsitemap on 3 domains. Same shared AI configuration, WhatsApp support, 12 months of updates. Core AI Pack.


