GMC Sitemap — Documentation (WordPress)
GMC Sitemap for WordPress generates a complete XML sitemap of your site and keeps it fresh on its own. Instead of listing only standard posts, it runs a BFS crawler that follows your site's real link structure, so posts, pages, custom post types, taxonomies, images, videos and news entries are all covered. It can write static sitemap files for fast serving, ping search engines through IndexNow when content changes, and emit hreflang alternates for multilingual sites built with WPML or Polylang. It is aimed at content-heavy, media-rich or multilingual WordPress sites that need a dependable sitemap to submit to Google Search Console once and then forget about.
Requirements: WordPress 6.0 or newer, PHP 8.1 or newer. The plugin ships in English, Italian and Spanish.
Installation
- Download the plugin
.zipfrom your purchase email or your account. Keep it zipped. - In your WordPress dashboard go to Plugins → Add New Plugin → Upload Plugin.
- Choose the
.zipfile, click Install Now, then Activate. - After activation the plugin's settings screen appears in the admin menu.
If you are upgrading and an old plugin folder is briefly present next to the new one, the extra copy stays dormant — no duplicate-constant warnings — so upgrades stay clean.
Configuration
Open the plugin's settings screen from the admin menu after activation. The main things to set up:
- Download Key — enter the key you received with your licence email in the field on the settings screen. This unlocks licensed one-click updates from the update server (see Updates & licence below).
- URL exclusions — add any URLs or sections you want kept out of the sitemap. Everything else the crawler discovers from your real link structure is included automatically.
- IndexNow — enable it so search engines are pinged the moment content changes.
- WP-Cron recrawl — optionally schedule automatic recrawls so the sitemap keeps itself current as the site grows.
- Static files — use Generate & deploy static files to write static copies of the sitemaps, which can be served directly instead of being generated on every request.
Multilingual support needs no special setup: if the site runs WPML or Polylang, the sitemap emits hreflang alternates for your languages automatically.
Using the plugin
Generating and checking the sitemap
The sitemap is generated dynamically as a sitemap index with dedicated sitemaps for your content and media — posts, pages, custom post types, taxonomies, images, videos and news. Visit /sitemap.xml on your site to confirm it renders. Because URLs are discovered by crawling your real link structure rather than reading a fixed list, new content is picked up as you publish, without registering each new section by hand.
Static file deployment
For speed, click Generate & deploy static files on the settings screen. This writes static sitemap files that can be served directly, avoiding regeneration on every request. Re-run it (or let the WP-Cron recrawl handle it) after large content changes.
Submitting to Google Search Console
Submit /sitemap.xml once in Google Search Console. From then on the plugin maintains itself: the crawler keeps coverage current, and IndexNow pings search engines when content changes so updates are discovered quickly.
Multilingual sites
On sites using WPML or Polylang, each URL carries hreflang alternates so search engines map the right page to the right language. News entries help time-sensitive content surface in the right search features, while image and video entries give media its own path to discovery.
Updates & licence
- Automatic updates: the plugin checks the GMC / FuerteventuraTV update server on its own (about every 12 hours) and shows new versions under Plugins and Dashboard → Updates, like any other plugin.
- Download Key: updates flow as long as your licence is active and the Download Key is entered on the plugin's settings screen. You can also re-download the latest build from your account at any time.
- Licence: the software is released under the GNU GPL. Your purchase covers the official build, licensed one-click updates and support for one site. For more sites or client projects, contact us for a volume or agency arrangement.
- Scope: the WordPress licence covers the
gmc-sitemap-wpplugin only; the Joomla edition (GMCsitemap) is a separate product.
Support
For help, reply to your purchase email or message us on WhatsApp at +34 633 168 995 (the same line appears in your licence email). Please include the product name and version, your WordPress and PHP version, and a public URL or screenshot with any keys masked. We answer in English, Italian and Spanish.
If the product does not work as described and we cannot fix it for you, you can request a refund within 14 days of purchase.
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).


