Semantic markup for page content provides structure when pages are accessed using assistive technologies or when the pages’ styling is changed for readability purposes. Screen readers can also use structural markup as navigation features, such as by allowing for heading-based, list or table navigation or by allowing users to navigate between content areas such as main page content, navigation menus, or page footer.
When semantic markup is not used and the page’s semantic structure is implied only visually, such as by making text larger and bolder to look like a heading, the page’s semantic meaning is lost.
- Identify section headings and heading hierarchy using markup. Use HTML heading elements (h1 through to h6) to identify headings. Make sure that the heading hierarchy is logical. Section headings should succinctly describe the content that follows them, and heading elements should never be empty.
- Identify page sections and landmarks. Use ARIA landmark roles to identify the start of page content areas such as the top banner area, main content, navigation bars, footer, and search areas. For now, because of limited accessibility support, include ARIA landmark roles even when you’re making use of HTML5 section elements.
- Identify lists using markup. Use unordered list markup (ul and li) for lists where there is no logical order implied, including navigation lists and menus. Use CSS to customize or suppress bullet points. Use ordered lists (ol and li) for numbered lists. Use definition lists for lists that are key/value pairs.
- Mark up data tables using table markup. Use the table element along with tr elements for its table rows and td elements for its data cells. Use the th element to identify row and column headers. For more complex tables, where headers span more than one cell, programmatically associate the table’s data cells with their corresponding headers, such as by using the scope attribute.
Testing
- For each heading, is the heading identified in markup? If so, is the heading given a suitable heading level?
- For each content area on a page, is the start of the content area identified with a suitable ARIA landmark role?
- For each data table on a page, are the rows and columns contained in table markup? Are row and column headers identified using th elements? If a caption is provided, is it associated with the table using a caption element?
- For each list of items on a page, including any navigation lists, is the list coded using HTML list elements? Are the list’s bullet points styled using CSS rather than images of bullets in markup?
Resources
- Understanding WCAG SC 1.3.1—Info and Relationships (WAI)
- Using WAI-ARIA Landmarks (The Paciello Group Blog)