How to fix list on Drupal
Fix all HTML list elements so that `<ul>` and `<ol>` contain only valid `<li>` children, and `<li>` elements appear only inside a proper list container, ensuring correct semantic list structure throughout your store.
Steps for Drupal
- Broken list markup in Drupal usually originates in a Twig template. Find the relevant template in your theme's 'templates/' folder (e.g. 'menu.html.twig', 'item-list.html.twig').
- Open the template and verify that any <ul> or <ol> loop outputs <li> wrappers correctly: {% for item in items %}<li>{{ item.content }}</li>{% endfor %}.
- If the issue is in a contributed module's template, copy the template into your theme's templates directory (Drupal's template override system), then fix it there.
- Run 'drush cr' (cache rebuild) or go to Configuration → Performance → Clear all caches, then re-audit the page.
<!-- ❌ INCORRECT: <div> as direct child of <ul> -->
<ul>
<div class="item">Feature one</div>
<div class="item">Feature two</div>
</ul>
<!-- ✅ CORRECT: only <li> as direct children -->
<ul>
<li class="item">Feature one</li>
<li class="item">Feature two</li>
</ul>
<!-- ❌ INCORRECT: <li> outside a list -->
<nav>
<li><a href="/shop">Shop</a></li>
</nav>
<!-- ✅ CORRECT: <li> inside <ul> inside <nav> -->
<nav>
<ul>
<li><a href="/shop">Shop</a></li>
</ul>
</nav>What is list?
HTML has three types of lists: unordered (`<ul>`, bullet lists), ordered (`<ol>`, numbered lists), and description lists (`<dl>`). Each has strict rules about which child elements are allowed inside it. A `<ul>` or `<ol>` must contain only `<li>` items (and optionally `<script>` or `<template>` tags); a `<dl>` must contain only `<dt>` and `<dd>` elements; and an `<li>` must always be a direct child of a `<ul>`, `<ol>`, or `<menu>`. When these rules are broken — for example, a `<div>` placed directly inside a `<ul>`, or an `<li>` used outside any list — the list structure is considered invalid. WCAG Success Criterion 1.3.1 ("Info and Relationships") requires that structure and meaning conveyed visually also be available in the code so assistive technologies can understand it.
Screen readers used by blind or low-vision shoppers rely entirely on correct list markup to announce how many items are in a list, let users jump between lists, and convey grouped relationships like navigation menus, product feature bullets, or breadcrumbs. When list structure is broken, screen readers may either skip the content entirely or read it as a confusing wall of disconnected text — causing real shoppers to miss product benefits, navigation options, or checkout steps. Beyond accessibility, invalid HTML can confuse search-engine crawlers that use list structure as a signal for site navigation and content hierarchy, which can indirectly harm rankings. In many jurisdictions (USA ADA, EU EAA, UK Equality Act), inaccessible storefronts carry genuine legal risk; a broken list on a navigation menu or product page is exactly the kind of straightforward violation that appears in accessibility demand letters.
See the complete List guide for every platform and the full background.
Not sure if your Drupal store has this?
Run a free SEOLZ audit — we’ll find list and every other issue across your whole site.
Scan my site free