How to Use Definition Lists (<dl>) Correctly
What Is a Definition List?
A description list — also called a definition list — is an HTML structure built from <dl>, <dt>, and <dd> that pairs terms with their definitions, descriptions, or values. It is the correct semantic markup for glossaries, product specifications, metadata blocks, FAQ-style key/value pairs, and schedules — anywhere a name maps to a value.
Key Facts (TL;DR)
- The three elements:
<dl>(the container),<dt>(description term — the "key"),<dd>(description details — the "value"). - WCAG criterion: WCAG 2.2 Success Criterion 1.3.1 Info and Relationships (Level A) — the term-to-description relationship must be programmatically determinable.
- Pairing rule: Every
<dt>must be followed by at least one<dd>. A single term can have multiple<dd>elements, and multiple<dt>elements can share one<dd>(e.g. synonyms with one definition). - Direct children only:
<dt>and<dd>must be direct children of<dl>— or, since HTML 5.3, wrapped in a single<div>for styling. - Screen reader behavior: Modern screen readers (NVDA, JAWS, VoiceOver) announce "description list with N terms" and pair each
<dt>with its<dd>when navigating. - Business impact: Product pages with semantic
<dl>spec blocks are eligible for Google rich results (Product structured data) and are parsed cleanly by AI search engines for citation in shopping answers.
Think of <dl> as the HTML version of a dictionary entry: the term is the headword, the description is everything that explains it. When the relationship is wrong — terms without descriptions, layouts dressed up as lists — assistive technology cannot tell the user which value belongs to which key.
Why Correct <dl> Markup Matters
<dl> is the only native HTML element that conveys a key/value relationship. Using the wrong element costs you on three fronts:
- Screen reader users: When a glossary or spec sheet is built with
<p><strong>Color:</strong> Red</p>, the screen reader reads "Color, Red" as a single paragraph — there is no machine-readable link between the label and the value, no list announcement, and no way to jump term-to-term. - AI search engines: Generative engines parse
<dl>as structured key/value data. A product page with<dl>spec blocks is significantly more likely to be cited correctly when an AI Overview answers "what is the weight of product X?" - SEO and rich results: Google parses semantic spec lists when generating product rich snippets. A correctly marked-up
<dl>helps Google associate Schema.orgProductproperties with their values without ambiguity. - WCAG compliance: SC 1.3.1 requires that information, structure, and relationships be programmatically determinable. A visual key/value layout without semantic markup is a Level A failure.
- Voice control: Voice navigation software exposes lists as a navigation primitive. Misusing
<dl>(or skipping it) removes that affordance.
How <dl>, <dt>, and <dd> Work Together
The structure is strict but flexible. Each <dt> can be followed by one or more <dd> elements; consecutive <dt> elements share the <dd> that follows. Since HTML 5.3, a single <div> may wrap a term/description group purely for styling — it does not change the semantics.
<!-- Bad: visual key/value with no semantics -->
<p><strong>Color:</strong> Red</p>
<p><strong>Weight:</strong> 2 kg</p>
<p><strong>Material:</strong> Aluminum</p>
<!-- Bad: tabular layout for what is really key/value data -->
<table>
<tr><td>Color</td><td>Red</td></tr>
<tr><td>Weight</td><td>2 kg</td></tr>
</table>
<!-- Good: a proper description list -->
<dl>
<dt>Color</dt>
<dd>Red</dd>
<dt>Weight</dt>
<dd>2 kg</dd>
<dt>Material</dt>
<dd>Aluminum</dd>
</dl>
<!-- Good: one term, multiple descriptions -->
<dl>
<dt>Accessibility</dt>
<dd>The practice of making content usable by people with disabilities.</dd>
<dd>A baseline requirement under WCAG 2.2.</dd>
</dl>
<!-- Good: synonyms sharing one definition -->
<dl>
<dt>CEO</dt>
<dt>Chief Executive Officer</dt>
<dd>The highest-ranking executive in an organization.</dd>
</dl>
<!-- Good (HTML 5.3): <div> wrappers for styling only -->
<dl>
<div class="row">
<dt>Published</dt>
<dd>2025-05-21</dd>
</div>
<div class="row">
<dt>Author</dt>
<dd>Saar Twito</dd>
</div>
</dl>How to Check Your Definition Lists
Misused <dl> markup rarely shows up as a visual bug, so it usually goes uncaught until a screen reader user encounters it. Use these checks:
- Greadme deep scan — flags
<dt>/<dd>elements outside a<dl>container, orphaned terms with no description, and content patterns (spec sheets, glossaries) that should be using<dl>but are not. - Greadme crawler scan — runs the same checks across every indexable page on the site, so you can find every product or glossary template that needs the fix.
- Greadme AI visibility analyzer — surfaces how generative engines extract your product spec data, which is a direct downstream signal of whether the markup is correct.
- Screen reader smoke test — open the page with VoiceOver (macOS), NVDA (Windows), or TalkBack (Android). A correct
<dl>is announced as "description list" with the term and value paired. - HTML validation — the W3C validator will catch
<dt>/<dd>outside<dl>, illegal child elements, and other structural errors. - Browser DevTools accessibility tree — Chrome DevTools shows the computed accessibility role for every element. A correct
<dl>exposes the rolelist;<dt>and<dd>exposelistitem.
8 Rules for Using <dl> Correctly
1. Use <dl> Only for Genuine Key/Value Data
The relationship must be "this term maps tothis value." Glossary entries, product specifications, metadata blocks, schedules, and FAQ pairs all qualify. A visual two-column layout that does not express a key/value relationship is not a definition list.
2. Pair Every <dt> With at Least One <dd>
An orphaned <dt> is invalid HTML and breaks the semantic contract. If you do not have a description, do not use <dl>.
3. Group Synonyms by Stacking <dt> Elements
When two or more terms share a single definition, list the <dt> elements consecutively before a single <dd>. This is the canonical pattern for synonyms, abbreviations, and aliases.
4. Stack Multiple <dd> Elements for Multi-Part Definitions
A term with several distinct meanings or values (a dictionary headword with multiple senses, a spec field with multiple values) should have one <dt> followed by multiple <dd> elements.
5. Keep <dt> and <dd> as Direct Children
Do not wrap <dt> or <dd> in <li>, <p>, or other elements. The only allowed wrapper is a single <div> per group (HTML 5.3+), and only for styling.
6. Choose <dl> Over Tables for Key/Value Pairs
Use <table> for genuinely tabular data (rows and columns of related records). For key/value blocks like product specs, <dl> is more accurate and easier for screen reader users to navigate — they get a list, not a table to traverse cell by cell.
7. Style With CSS, Not by Changing the Markup
Want a two-column layout? Use CSS Grid on the <dl> (or on the optional <div> wrappers). Do not flatten the structure into <p> tags to make styling easier — you lose the semantics.
dl {
display: grid;
grid-template-columns: max-content 1fr;
column-gap: 1rem;
row-gap: 0.5rem;
}
dt { font-weight: 600; }
dd { margin: 0; }8. Do Not Use <dl> for Things That Are Not Key/Value
Conversational dialogue, sequential steps, navigation menus, and form labels each have their own correct element (<p>, <ol>, <nav> + <ul>, <label>). Reusing <dl> for them confuses assistive technology.
Common <dl> Mistakes and How to Fix Them
Problem: <dt> or <dd> Outside a <dl>
What is happening: The author wrote <dt>/<dd> directly in the document body or inside a <ul>/<li>, breaking the contract. HTML validators flag this; screen readers either ignore the elements or mis-announce them.
Fix: Wrap the term/description pairs in a <dl> container. Remove any <li> wrappers — <dt> and <dd> are themselves the list items.
Problem: Product Specs Built With <p> and <strong>
What is happening: Each spec is rendered as <p><strong>Weight:</strong> 2 kg</p>. There is no machine-readable relationship between the label and the value, so screen readers, AI engines, and Google all read it as plain prose.
Fix: Replace with a single <dl> containing one <dt>/<dd> pair per spec. Style it with CSS Grid to keep the same visual layout.
Problem: <dl> Used as a Two-Column Layout
What is happening: Designers grab <dl> because it looks like "label on the left, content on the right." But the content is not actually a key/value pair — it is a heading and a paragraph, or a navigation label and a link.
Fix: Use the correct element for the content (<h3> + <p>, <ul>, <nav>, etc.) and lay it out with CSS. Reserve <dl> for true key/value data.
Problem: Orphaned <dt> With No Description
What is happening: A term was added but its <dd> was never written, leaving a <dt> followed immediately by another <dt> with no description in between. Screen readers announce the term but cannot pair it with a value.
Fix: Either add the missing <dd>, or — if the two terms share the same following description — leave them stacked but ensure a <dd> appears before the next group.
<dl> vs <ul> vs <table>: Which to Use
All three elements look similar at a glance, but they communicate different relationships to assistive technology and search engines. Pick the one that matches the actual semantics of the data.
| Element | Best Used For | Relationship It Conveys | When to Avoid |
|---|---|---|---|
<dl> | Glossaries, product specs, metadata, FAQ key/value, schedules | Term maps to definition or value | Items that are not key/value pairs |
<ul> | Navigation, feature lists, unordered collections | Items belong to the same group, no order, no key/value relationship | When each item has a label/value structure |
<ol> | Step-by-step instructions, ranked lists | Items in a meaningful sequence | When order does not matter |
<table> | Rows of related records with multiple columns | Cross-referenced data across rows and columns | Single-pair key/value data (use <dl> instead) |
FAQ
What is the difference between a "definition list" and a "description list"?
They are the same element. HTML4 called it a "definition list" and the elements were "definition term" and "definition description." HTML5 renamed it to "description list" and broadened the scope to any term/value pairing — not just dictionary-style definitions. The tags (<dl>, <dt>, <dd>) and behavior are unchanged.
Can a single <dt> have multiple <dd> elements?
Yes. A term with multiple definitions, values, or explanations should have one <dt> followed by as many <dd> elements as needed. Screen readers announce each description in sequence and keep them associated with the same term.
Can multiple <dt> elements share a single <dd>?
Yes. Stack the <dt> elements consecutively, then provide one <dd>. This is the right pattern for synonyms, abbreviations, and aliases (e.g. "CEO" / "Chief Executive Officer" sharing one definition).
Should I use <dl> for FAQs or use FAQPage schema instead?
Do both. <dl> with <dt> for the question and <dd> for the answer is the correct semantic markup for the visible HTML. FAQPage JSON-LD structured data is a separate, machine-readable layer that helps Google generate rich results. They complement each other.
Is wrapping <dt>/<dd> in a <div> valid?
Yes — since HTML 5.3 (2018), a single <div> may wrap one <dt>/<dd> group inside a <dl>, purely for styling. Major browsers and screen readers ignore the wrapper for accessibility purposes. Do not nest other elements; do not use <li>.
Do AI search engines like ChatGPT and Perplexity treat <dl> differently from <p> spec lists?
Yes. Generative engines parse <dl> as structured key/value data and are far more likely to extract individual fields cleanly when summarizing or citing a page. A product page that uses <dl> for its spec sheet is materially more likely to have its specs quoted accurately in an AI Overview answer. Loose <p><strong>Label:</strong> value</p> markup forces the engine to guess at the structure.
Does using <dl> affect SEO or rich results?
Indirectly but meaningfully. Google does not rank pages higher purely because they use <dl>, but semantic markup makes it easier for Google to associate Schema.org Product properties with the right values, which feeds product rich snippets and shopping results. Combined with proper JSON-LD, <dl> spec blocks improve the odds of earning a rich snippet.
Conclusion
<dl> is one of the most under-used semantic elements in HTML and one of the easiest accessibility wins. Whenever your content pairs a term with a value — a glossary, a product spec sheet, a metadata block, an FAQ — switch from <p>-with-bold-labels or layout tables to <dl>. The change is invisible to sighted users (with the right CSS) but transforms the experience for screen reader users, AI search engines, and Google's rich-results pipeline.
Run a Greadme deep scan to find every page where definition-list semantics are missing or misused, and to get a one-click fix for each one.
