Categories Missing From Navigation
Use cases
Fetches all URLs from an XML sitemap (sitemap index files supported with polite 2-second delays between child fetches), then fetches a page and extracts every link inside a user-supplied CSS selector for the navigation element using BeautifulSoup.
Reports sitemap URLs missing from the navigation set.
Comparison is exact (case-sensitive, trailing-slash sensitive).
JavaScript-rendered navigation is not supported.
Platform
Python script (requires Python 3.x)
Input
XML sitemap URL
CSS selector for the navigation element (e.g. nav, #main-nav, .header-menu)
Optional: page URL to check (defaults to homepage derived from sitemap domain)
Output
CSV listing every sitemap URL not found as a link inside the navigation element on the checked page.
Features
- Sitemap index support with 2-second polite delay between child fetches
- User-configurable CSS selector for the navigation element (default: nav)
- Optional URL-contains filter to limit results (e.g. /category/)
- Relative link resolution to absolute URLs via urljoin
- Real browser user agent sent with all requests
- 30-second request timeout per fetch
How to use
- 1 Enter your XML sitemap URL
- 2 Set the CSS selector for your navigation element in the sidebar
- 3 Optionally enter a URL-contains filter (e.g. /category/)
- 4 Optionally override the page to check (defaults to homepage)
- 5 Click Find Missing URLs
- 6 Download the missing URLs CSV
Frequently asked questions
- Does it work with JavaScript-rendered navigation?
- No. It fetches raw HTML with requests and parses it with BeautifulSoup. Navigation injected by JavaScript after page load will not be visible. You would need to export a rendered version of the page separately.
- How does it handle sitemap index files?
- If the sitemap URL points to a sitemap index (contains a sitemapindex element), it fetches each child sitemap in turn with a 2-second delay between requests. All loc URLs from all child sitemaps are combined into a single list for comparison.
- Is the URL comparison case-sensitive?
- Yes. The comparison is an exact set difference with no normalisation. If your sitemap uses https://www.example.com/Category/ but the navigation links to https://www.example.com/category/, it will be reported as missing. Ensure both use consistent URL formats.
- What does the URL-contains filter do?
- It restricts the missing URLs report to only those containing a specific substring, for example /category/ or /collections/. This is useful when your sitemap includes product pages and blog posts but you only care about category-level navigation coverage.
- Which page does it check for navigation links?
- By default it derives the homepage from the sitemap URL (scheme + netloc + /). You can override this with any page URL, for example a category landing page, if your navigation varies across templates.
Want me to run this for you?
I run this tool as a managed service, or build something custom around your data. You get the insights without touching the code.
Related Tools
Flag navigation links whose anchor text does not match the destination H1 or title keyword.
Extract structured product attributes from titles using an LLM with iterative attribute discovery.
Generate XML sitemaps from GA landing page exports filtered by top transactions or revenue.
Suggest new category pages based on product H1 n-grams and search demand.
Center product images using OpenCV multi-method contour detection with threshold fallbacks.
Generate JSON-LD structured data for common schema types.
Need something built for your business?
This tool started as bespoke client work. I build custom scripts, data pipelines, and full apps for SEO and product data problems that off-the-shelf tools don't solve.
Tell Me What You Need