A sitemap is not just an HTML page listing links. It is a navigation and indexing tool whose quality directly depends on the logic of grouping, the depth of the hierarchy, and adherence to accessibility standards. Here, we address the technical points that differentiate a functional sitemap from a simple inventory of URLs.
Semantic landmarks and DOM: what your sitemap must comply with since WCAG 2.2
A well-structured sitemap relies on a semantic layer that most CMSs generate poorly by default. Since the WCAG 2.2 criteria (levels A and AA), navigation is no longer limited to a visible menu: it requires correctly ordered semantic landmarks in the DOM.
Specifically, the header, nav, main, footer, and aside tags must appear in a logical order that corresponds to what the user perceives visually, including in responsive design. A sitemap where the DOM places the footer before the main content (a common case with some page builders) misleads screen readers and degrades the experience.
Two WCAG 2.2 criteria directly impact menus and sitemaps:
- 2.4.11 Focus Not Obscured (AA): the keyboard focus must never be obscured by a sticky header, a cookie banner, or a chat widget. On a sitemap with several dozen links, a hidden focus renders the page unusable via keyboard.
- 2.5.8 Target Size (AA): each clickable area of a sitemap item must reach a minimum size of 24 x 24 CSS pixels or have sufficient spacing from neighboring elements.
- The heading hierarchy (H1, H2, H3) must be strictly linear, with no levels skipped. A sitemap that jumps from H2 to H4 for stylistic reasons disrupts assisted navigation.
We observe that navigation on a website structured around these criteria shows measurable gains in travel time for users of assistive technologies, as well as for indexing bots that rely on these same landmarks.

Flat or deep hierarchy: deciding crawl depth
The structure of a sitemap directly reflects the website’s hierarchy. A hierarchy that is too deep (more than three levels of categories) dilutes the crawl budget: search engines struggle to reach pages that are four clicks or more from the root. A hierarchy that is too flat, where all pages are at the same level, drowns the user in an undifferentiated list.
We recommend a maximum of three levels for most sites: main categories, subcategories, content pages. The Hera Magazine sitemap illustrates this type of thematic grouping where each branch remains accessible within two clicks from the root.
An effective sitemap groups pages by search intent, not by internal department. Visitors do not know your organizational chart. They are looking for an answer. If your hierarchy reflects your company’s structure rather than your users’ questions, the bounce rate increases.
Categories and grouping by intent
Each category visible in the sitemap must correspond to an identifiable semantic cluster in SEO. A cluster groups a pillar content and its satellite pages, linked by contextual internal links. The sitemap makes this architecture readable at a glance, for both users and search engines.
The common pitfall: creating categories that are too granular, containing only one or two pages. It is better to merge these micro-categories to maintain sufficient internal link density per branch.
XML Sitemap and HTML Sitemap: two files, two distinct functions
The confusion between XML sitemaps and HTML sitemaps persists. The XML file (sitemap.xml) is intended for indexing bots. It lists URLs with their metadata (last modified date, update frequency, priority). The HTML sitemap is a page intended for visitors, designed to provide a navigable overview.
The XML sitemap does not replace the HTML sitemap, and vice versa. The former serves crawling, while the latter serves user experience and internal linking. A site that offers only an XML sitemap deprives its visitors of a structured entry point to all its content.
When the XML sitemap becomes a diagnostic tool
The XML sitemap reveals architectural inconsistencies. If a page appears in the sitemap but is not linked from any other page on the site (orphan page), it will be crawled but poorly positioned. Conversely, a page that is heavily linked internally but absent from the XML sitemap sends a contradictory signal to search engines.
We recommend regularly comparing the XML sitemap with crawl data (Screaming Frog, Sitebulb, or equivalent) to identify:
- Orphan pages present in the sitemap but without incoming internal links
- Indexed pages that do not appear in the XML sitemap
- 301 redirects or 404 errors that pollute the file
- Duplicated parameter URLs that artificially inflate the number of pages

Internal linking from the sitemap: contextual links vs. listing links
An HTML sitemap inherently generates listing links: generic anchors pointing to each page. This type of link conveys little semantic value to search engines. The real SEO leverage lies in contextual links inserted into editorial content, where the anchor precisely describes the target page.
The HTML sitemap remains useful for linking as long as its anchors are structured. An anchor “Article 47” adds no value. An anchor that includes the full title of the page or its main keyword enhances the thematic relevance of the link.
Each link in the sitemap must carry a descriptive and unique anchor. Generic anchors (“click here,” “learn more”) dilute the signal sent to search engines and do not help the user anticipate the content of the target page.
Frequency of sitemap updates
A static sitemap that is never updated accumulates broken links and outdated pages. On a site where content evolves regularly, automatically generating the sitemap (via plugin or server-side script) avoids this problem. Consistency between the HTML sitemap, the XML sitemap, and the main navigation remains the marker of a well-managed architecture.
The quality of a sitemap can be measured by a simple criterion: a user arriving on this page should be able to reach any content on the site within two clicks at most, without resorting to internal search. If this is not the case, the hierarchy deserves to be reconsidered before optimizing anything else.



