Role Document structure
article
Marks a self-contained composition that could stand on its own — a blog post, news story, forum reply, or product card. Use the native <article> element first; reach for role="article" only when you cannot use the HTML element.
When to use
Use <article>. Native carries the role for free and integrates with the document outline algorithm.
role="article" on a <div> is appropriate when you cannot use the native element — usually a templating constraint. Each article should contain its own heading so screen-reader users can identify it.
For a feed of articles (a timeline, a blog index), wrap them in role="feed" and set aria-posinset / aria-setsize on each article. Otherwise, leave both attributes off.
Common failures
- Using
<article>for every block of content. The element implies “stands on its own”. A blurb in a sidebar is rarely an article. role="article"on a<section>that is part of a larger document, not a self-contained composition. Userole="region"or just<section>instead.- Article with no heading. Screen-reader users navigating by article have no name for it.
- Nesting
<article>inside<article>for a comment thread without usingaria-labelledbyto give each inner article a distinct accessible name.
Example
<article aria-labelledby="post-title-42">
<h2 id="post-title-42">Why one main landmark per page</h2>
<p>The <code><main></code> landmark identifies…</p>
</article>