Free tools

Sitemap Extractor & Validator

Extract every URL from your sitemap, flag duplicates, and verify structure for crawl coverage.

Copy-paste outputs

Win high-intent buyers from ChatGPT, Gemini, Claude, Perplexity, and AI Overviews before your competitors do.

One operating layer for monitoring, measurement, content action, and technical cleanup.

AI Visibility TrackingCompetitive RankingSentiment by ModelSource CitationsAI Overviews TrackingPrompt MonitoringAI Visibility TrackingCompetitive RankingSentiment by ModelSource CitationsAI Overviews TrackingPrompt Monitoring
Content GapsAI InsightsAdvanced AnalyticsData CopilotBlog GenerationUGC CampaignsLLM CouncilContent GapsAI InsightsAdvanced AnalyticsData CopilotBlog GenerationUGC CampaignsLLM Council
Shopping IntelligenceCrawler MonitoringGEO OptimizationMulti-Brand ManagementShopping IntelligenceCrawler MonitoringGEO OptimizationMulti-Brand Management

Tool 01

Sitemap Extractor & Validator

Parse your XML sitemap to reveal URL counts, duplicates, and formatting issues. If fetch is blocked, paste the XML directly.

Input
Use a sitemap URL or paste the XML below.
Summary
See the structure and URL health at a glance.
TypeNot detected
Total URLs0
Unique URLs0
Duplicates0
Missing <loc>0
Invalid URLs0

URL list

sitemap-urls.txt
URLs
Paste a sitemap to preview URLs.

How it works

Sitemap Extractor & Validator: methodology and worked example

How this tool computes its result

Accepts a sitemap URL (fetched client-side, which can fail on CORS-restricted hosts) or raw pasted XML, and parses it with DOMParser, checking for a <parsererror> node to catch malformed markup. It reads whichever of <url> or <sitemap> elements exists (never both, and never recursively) to determine urlset vs sitemapindex type. For each node, a missing <loc> child is counted toward missingLocCount and the entry is skipped entirely from the URL list; present loc values are checked for an "http" prefix and run through `new URL()`, with failures added to invalidUrls. Duplicates are any URL string whose first occurrence index differs from its current index in the list.

Worked example

Pasting a urlset with 250 <url> entries where 5 loc values repeat exactly and 2 entries have no <loc> child at all: Total URLs reads 250 (loc-bearing entries only), Missing <loc> reads 2, Duplicates reads 5, and a separately computed Unique URLs stat reads 245.

When not to use this tool

This is a client-side XML structure check only -- it never verifies that listed URLs actually return 200, does not decompress .xml.gz files, and a CORS-blocked fetch fails with a generic "unable to fetch, paste XML below" message rather than surfacing the real network error.

Common mistakes

  • - Pasting a sitemap index and expecting the tool to follow each child <sitemap> link and total their URLs -- it only reads whichever top-level node type is present in what you pasted, it never recurses.
  • - Assuming Total URLs and Unique URLs measure the same thing -- Total counts every loc-bearing entry including duplicates, Unique is the deduplicated count, so the two diverging is expected behavior, not a bug.
  • - Fetching a sitemap URL that redirects to a different domain which itself blocks CORS -- the fetch can fail on the redirect target even though the original URL loads fine in a normal browser tab.

Ready to dominate AI search visibility?

Track where your brand shows up in AI answers, close the content gaps that cost conversions, and stay visible across ChatGPT, Claude, Gemini, Perplexity, and Grok.

Frequently Asked Questions