Categories Missing From Navigation
Find sitemap URLs not linked from your site navigation element.
#about
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 URLCSS 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.
- Category
- E-commerce
Use cases
- Finding category pages orphaned from the main navigation
- Auditing navigation coverage after a menu redesign
- Identifying sections of large e-commerce sites with no nav links
#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
- Enter your XML sitemap URL
- Set the CSS selector for your navigation element in the sidebar
- Optionally enter a URL-contains filter (e.g. /category/)
- Optionally override the page to check (defaults to homepage)
- Click Find Missing URLs
- Download the missing URLs CSV
#faq
- 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.
/contact
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.