--- name: orbit-seo-sitemap description: Audit XML sitemap output — well-formed XML, sitemap-index for large sites (50K URL chunks), priority + changefreq usage, image / video / news sitemaps, robots.txt linkage, coexistence with Yoast / RankMath / WP core sitemaps. Use when the user says "sitemap", "XML sitemap", "search console sitemap", "Yoast sitemap conflict". --- # 🪐 orbit-seo-sitemap — Sitemap audit Sitemaps tell search engines what to crawl. Broken sitemaps = invisible content. --- ## What this skill checks ### 1. Sitemap is well-formed XML ```bash curl -s https://my-site.com/sitemap.xml | xmllint --noout - ``` Should exit 0. Any error = malformed → search engines reject silently. ### 2. WP 5.5+ ships sitemaps natively at `/wp-sitemap.xml` **Whitepaper intent:** Plugins shouldn't ship their own sitemap unless they have a clear reason — WP core sitemap is good enough for most. If you do ship one, opt-out of WP core's: ```php add_filter( 'wp_sitemaps_enabled', '__return_false' ); ``` ### 3. Sitemap-index for large sites A single sitemap.xml is limited to 50,000 URLs OR 50MB. Bigger sites need a sitemap index pointing to chunked sub-sitemaps. ```xml https://my-site.com/sitemap-posts-1.xml 2026-04-29 https://my-site.com/sitemap-products.xml ``` ### 4. priority / changefreq — Google ignores these **Whitepaper intent:** `` and `` are part of the spec but Google has publicly said it ignores them. Bing still uses changefreq (loosely). Don't over-engineer these. ### 5. robots.txt links to sitemap ``` User-agent: * Allow: / Sitemap: https://my-site.com/sitemap.xml ``` WP doesn't write robots.txt by default — plugin / customer must. ### 6. Image sitemap (if plugin generates image-heavy content) ```xml https://my-site.com/post/ https://my-site.com/post-cover.jpg ``` ### 7. Video / News sitemap (specific use cases) - News sitemap — only if you produce news (specific tags, time-window 2 days) - Video sitemap — for video-heavy sites ### 8. Coexistence with SEO plugins - Yoast: `/sitemap_index.xml` (theirs) - RankMath: `/sitemap_index.xml` (theirs) - WP core: `/wp-sitemap.xml` (default) If your plugin generates a 4th — robots.txt + Search Console submission gets confusing. Pick one + hook into it. --- ## Output ```markdown # Sitemap Audit — my-plugin ## Sitemap URL - /sitemap.xml — your plugin's - /sitemap_index.xml — Yoast also active - /wp-sitemap.xml — WP core (still on) ⚠ Three sitemaps for same site — Google may submit / verify any. Recommendation: 1. Disable WP core via `wp_sitemaps_enabled = false` 2. Hook into Yoast's via `wpseo_sitemap_index` 3. Drop your standalone ## Validation - ✓ XML well-formed - ✓ < 50,000 URLs (no chunking needed) - ⚠ priority + changefreq present — Google ignores; can drop to slim XML ## robots.txt - ❌ robots.txt doesn't reference any sitemap - Recommendation: add `Sitemap: https://my-site.com/sitemap_index.xml` ## Image sitemap - ⚠ Plugin produces image-heavy posts but no tags in sitemap → Add for richer image-search indexing ``` --- ## Pair with - `/orbit-seo-schema` — schema-side - `/orbit-compat-yoast` / `/orbit-compat-rankmath` — coexistence --- ## Sources & Evergreen References ### Canonical docs - [sitemaps.org](https://www.sitemaps.org/) — protocol spec - [Google Sitemaps docs](https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview) — submission + best practices - [WP wp_sitemaps](https://developer.wordpress.org/reference/classes/wp_sitemaps/) — WP core API - [Yoast wpseo_sitemap_index filter](https://developer.yoast.com/customization/yoast-seo/filters/sitemaps/) — extend Yoast ### Last reviewed - 2026-04-29