How to Use Definition Lists (<dl>) Correctly: Complete Guide (2026)

Saar Twito9 min read
Saar Twito
Saar TwitoFounder & SEO Engineer

Hi, I'm Saar - a software engineer, SEO specialist, and lecturer who loves building tools and teaching tech.

View author profile →

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.org Product properties 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 role list; <dt> and <dd> expose listitem.

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.

ElementBest Used ForRelationship It ConveysWhen to Avoid
<dl>Glossaries, product specs, metadata, FAQ key/value, schedulesTerm maps to definition or valueItems that are not key/value pairs
<ul>Navigation, feature lists, unordered collectionsItems belong to the same group, no order, no key/value relationshipWhen each item has a label/value structure
<ol>Step-by-step instructions, ranked listsItems in a meaningful sequenceWhen order does not matter
<table>Rows of related records with multiple columnsCross-referenced data across rows and columnsSingle-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.