The following meet WCAG 2.0 AA standards for both legal conformance and accessibility best practices.
Page titles
Required
Must be present.
Must be updated when the URL changes.
Must be accurate and informative.
Non-required / best practice
Should describe result of user action or change of context if either occur
Should be concise.
Should be unique, if possible.
Unique information should come first in the title. Example: About us | Cornell Alumni
Should match H1 tag
Language
Required
- Must be identified accurately in the <html> tag with a valid language code. Example: <html lang="en">
- Valid lang attribute must be used for inline language changes. Example: <p>And then I said in a German accent, <span lang="de">Bach ist ein Komponist.</span>.</p>
Headings
Required
Must be accurate and informative.
Non-required / best practice
If text looks like a heading, or is structurally a heading, use HTML heading tags. Example: <h2>The history of Cornell University</h2>
Do not use HTML heading tags for anything other than true headings
Should be concise
Should convey clear and accurate structural outline of web page content
Should not skip hierarchical levels Example: Don't jump from <h2> to <h4>
Beginning of main content should start with <h1>
Should only have one <h1>
Navigation
Required
- Navigation patterns that are repeated on web pages MUST be presented in the same relative order each time they appear and MUST NOT change order when navigating through the site.
- Skip link must be visible on keyboard focus (or at all times).
- Reading order must be logical.
- Navigation order of focusable elements must be logical.
Non-required / best practice
- Navigation lists should be marked with <nav> or role="navigation".
- Include a visible way of letting users know which page they're on. Same for screen readers. Same for paginated views.
- The skip link should be the first focusable element on a page.
- Page table of contents should reflect the heading structure of the page.
- Positive tabindex values should not be used.
Links
Required
- Must be visually distinguishable from surrounding text. Color alone isn't enough unless color contrast is at least 3:1, and hovering or focus provides additional differentiation.
- Must be semantically designated as links. Example: <a href="https://cornell.edu">Cornell University</a>
- Must have programmatically-discernible text. Example: 1) if an image is used inside a link, put link text in the alt tag 2) if an icon is used, add an aria-label such as: <a href="https://cornell.edu" aria-label="Cornell University"><icon html... \></a>
- Link labels and text alternatives must be consistent across the website. Example: don't use "Contact Us" and "Give us a call" for the same URL
- Anything focusable (that you can tab to) must have visual indicator appear when it's focused.
Non-required / best practice
- Links and buttons should semantically reflect their functions.
- Link text should clearly state its purpose.
- Link text shouldn't use the word "Link." Example: Say "More information on gummy bears." not "Link to more information on gummy bears."
- Indicate that a link will open in a new window. Example: add a new-window icon next to links that open in a new window
- Links to files or non-web destinations should tell users what kind of files they are. Example: add "PDF" next to links to PDFs
- Enhance focus indicator on focusable elements. Example: instead of the default browser focus, add a colorful, thicker border with a change in background when elements receive focus
Lists
Required
Lists MUST be constructed using the appropriate semantic markup.
Tables
Required
- Table headers MUST be designated with <th>.
- Data table header text MUST accurately describe the category of the corresponding data cells.
- Table data cells MUST be associated with their corresponding header cells.
- Table data group headers MUST be associated with their corresponding data cell groups.
- Header/data associations that cannot be designated with <th> and scope MUST be designated with headers plus id
- Data table headers and data associations MUST NOT be referenced across nested, merged, or separate tables.
- Layout tables MUST NOT contain data table markup.
Non-required / best practice
- Tabular data SHOULD be represented in a <table>.
- Data tables SHOULD have a programmatically-associated caption or name.
- The name/caption of a data table SHOULD describe the identity or purpose of the table accurately, meaningfully, and succinctly.
- The name/caption of each data table SHOULD be unique within the context of other tables on the same page.
- A data table summary, if provided, SHOULD make the table more understandable to screen reader users.
- Tables SHOULD NOT be used for the purpose of purely visual (non-data) layout.
iFrames
Required
- iframes that convey content to users MUST have a non-empty title attribute.
- The iframe title MUST be accurate and descriptive.
- Frames MUST have a unique title (in the context of the page).
- The source page of an iframe MUST have a valid, meaningful <title>.
Non-required / best practice
- The heading hierarchy of an iframe SHOULD be designed to fit within the heading hierarchy of the parent document, if possible.
- Hidden frames or frames that do not convey content to users SHOULD be hidden from assistive technologies using aria-hidden="true".
Other (content)
Required
- Critical emphasis in the text SHOULD be conveyed through visual styling.
- Critical emphasis in the text SHOULD be conveyed in a text-based format.
- The <blockquote> element SHOULD be used to designate long (block level) quotations.
- The <blockquote> element SHOULD NOT be used for visual styling alone.
- The <q> element (for inline quotations) SHOULD NOT be used as the only way to designate quotations.
- Code SHOULD be marked with the <code> element and styled to look different from non-code text.
- Blocks of code SHOULD be formatted with the <pre> element.
- Strikethrough text SHOULD be marked with the <del> element.
- Text designated for insertion SHOULD be marked with the <ins> element.
- Highlighted text SHOULD be marked with the <mark> element.
- Critical highlighted text SHOULD be supplemented with a text-based method to convey the meaning of the highlighting.
Non-required / best practice
- Critical strikethrough text MUST be supplemented with a text-based method to convey the meaning of the strikethrough.
- Critical text designated for insertion MUST be supplemented with a text-based method to convey the meaning of the insertion.