Empty table header

Moderate effort

Found on 1% of audited stores.

Add descriptive text to every table header cell (`<th>`) so that screen readers can announce what each column or row represents.

What it is

A table header cell (`<th>`) is the label that sits at the top of a column or the start of a row in an HTML table — it tells everyone what kind of data that column or row contains (e.g., "Product Name," "Price," "Quantity"). An "empty table header" means one or more of those label cells exists in your page's code but contains no readable text. The cell may look fine visually (perhaps it's a decorative spacer or uses an icon), but it has nothing for a screen reader to announce. Screen readers rely on header text to describe a table's structure, so when a header is blank, users who are blind or have low vision lose the context they need to understand the data.

Why it matters

**Accessibility & legal risk:** Empty table headers violate WCAG 2.1 Success Criterion 1.3.1 (Info and Relationships), which is the benchmark used in accessibility lawsuits and regulatory audits (ADA, EN 301 549, EAA 2025). A single empty header in a product-comparison or pricing table can make that entire table unusable for customers who rely on assistive technology — costing you sales and exposing you to legal liability. **SEO:** Search engines also use table structure to understand tabular content; properly labelled headers improve the semantic clarity of your pages, which can contribute to better crawlability and richer structured understanding of your data. **Conversions:** Accessible, well-labelled product or size tables are easier for all customers to scan, reducing the friction that causes shoppers to abandon a purchase.

How to fix it

  1. Audit your pages for tables: look for any `<th>` element that is visually blank, contains only an image with no alt text, or is used as a decorative spacer cell.
  2. For each empty `<th>` that represents a real column or row category, add a short, descriptive text label inside it — e.g., `<th>Product Name</th>` or `<th>Price (USD)</th>`.
  3. If the `<th>` is intentionally blank for visual layout reasons (e.g., a corner spacer cell in a complex table), add a visually hidden label using `scope` plus an `aria-label` attribute, or a visually hidden `<span>` with CSS — e.g., `<th scope='col' aria-label='Thumbnail'></th>`. Never leave a `<th>` with no accessible name at all.
  4. For icon-only or image-only headers, ensure the icon/image has meaningful `alt` text, or add an `aria-label` directly on the `<th>` element.
  5. Add the `scope` attribute to every header cell to explicitly declare whether it labels a column (`scope='col'`) or a row (`scope='row'`), which further improves screen-reader navigation.
  6. Re-test using a free browser extension such as axe DevTools, WAVE, or by navigating the table with a screen reader (NVDA + Firefox or VoiceOver + Safari) to confirm every header is now announced correctly.
<th scope="col">Price (USD)</th>

<!-- Visually hidden label for a decorative/spacer corner cell -->
<th scope="col" aria-label="Product thumbnail"></th>

<!-- Icon-only header with aria-label -->
<th scope="col" aria-label="Add to cart"></th>

Fix it on your platform

Pick your platform for the exact steps.

How to fix empty table header on Shopify
  1. In your Shopify admin, go to Online Store → Themes → click 'Customize' (or 'Edit code' for direct file access).
  2. Click 'Edit code' to open the theme code editor. Tables in product descriptions are usually in sections like `product-template.liquid`, `page.liquid`, or custom section files.
  3. Use the search (Ctrl+F / Cmd+F) in the code editor to find `<th` tags with no inner text.
  4. Add descriptive text or an `aria-label` attribute to each empty `<th>`, then save.
  5. For tables inside product descriptions or page content edited via the rich-text editor, go to the relevant Product or Page in the admin, switch the description editor to HTML view (the `<>` icon), and edit the `<th>` tags there.
  6. Install the 'Accessibility Checker' app (e.g., accessiBe or Equal Web) from the Shopify App Store to scan for remaining issues after your fix.
How to fix empty table header on WooCommerce
  1. Empty table headers in WooCommerce most commonly appear in product attribute tables, variation tables, or shortcode-generated content in page builders.
  2. For theme template files: in your WordPress admin go to Appearance → Theme File Editor (or use an FTP client). Locate templates such as `single-product/tabs/additional-information.php` or `loop/price.php` in your active (child) theme.
  3. Search those files for `<th` with no inner content and add descriptive text or `aria-label` attributes.
  4. For content inside the WordPress block editor or classic editor: open the Product or Page, switch to the 'Code editor' view (three-dot menu → Code editor in the block editor, or the 'Text' tab in the classic editor), find the `<th>` tags, and add labels.
  5. Use the 'WP Accessibility' plugin (by Joe Dolson) to perform an ongoing site-wide accessibility scan.
  6. Re-test with the WAVE browser extension or axe DevTools after saving.
How to fix empty table header on BigCommerce
  1. In your BigCommerce control panel, go to Storefront → My Themes → click 'Edit Theme' (Advanced) to open the Stencil theme editor, or download the theme for local editing.
  2. Tables commonly appear in `templates/components/products/description.html`, comparison pages, or custom widgets. Use your editor's search to find empty `<th>` tags.
  3. Add the missing text label or `aria-label` to each empty `<th scope='col'>` and save/upload the theme.
  4. For Page Builder content: go to Content → Web Pages, open the relevant page, switch to HTML source in the editor, and fix `<th>` elements there.
  5. Use BigCommerce's built-in 'Accessibility' settings (Storefront → Accessibility) as a starting point, then re-test with the WAVE extension.
How to fix empty table header on Wix
  1. Open the Wix Editor for your site. Tables in Wix are typically created using the Table element or inserted via HTML embeds (Wix HTML iframe widget).
  2. For a native Wix Table element: click the table, go to its Settings or Layout panel, and ensure every column header cell has a text label entered. Blank header cells should have descriptive column names typed in.
  3. For tables inside a Wix HTML Code embed: click the embed element → 'Edit Code', then locate and fix any `<th>` elements that lack inner text or an `aria-label`.
  4. If using the Wix Blog or Wix Stores product description: edit the relevant item, switch to HTML view if available, and correct empty `<th>` tags.
  5. Re-test with the WAVE browser extension on your published site.
How to fix empty table header on Squarespace
  1. In the Squarespace editor, tables are inserted as Content Blocks. Click on the table block to edit it and ensure every header row cell contains descriptive text — Squarespace renders the first row as `<th>` elements when 'Header Row' is enabled.
  2. If a column intentionally has a blank header for visual reasons, you must inject a fix via a Code Block or Custom CSS: go to Pages → the relevant page → add a Code Block near the table with a `<script>` that adds `aria-label` attributes to the empty `<th>` elements on page load, OR use Settings → Advanced → Code Injection to apply site-wide JavaScript.
  3. For custom code areas (Developer mode / Custom Code): go to Settings → Developer Tools (if on a Developer plan) or Settings → Advanced → Code Injection, and add JavaScript that targets empty `<th>` elements and assigns them `aria-label` values.
  4. Re-test with WAVE or axe DevTools after publishing changes.
How to fix empty table header on Webflow
  1. Open your project in the Webflow Designer. Select the Table element on the canvas that contains the empty header.
  2. Click the empty `<th>` cell in the Designer. In the right-hand panel, type the column label text directly into the cell on the canvas.
  3. If the header must remain visually blank (e.g., a spacer), open the element's Settings panel (the gear icon) and add an `aria-label` attribute under the Custom Attributes section — set Name to `aria-label` and Value to the descriptive label (e.g., `Thumbnail`).
  4. Also add a `scope` custom attribute with value `col` or `row` as appropriate.
  5. Publish your changes and re-test with the WAVE or axe DevTools browser extension on the live site.
How to fix empty table header on Adobe Commerce (Magento)
  1. Tables in Adobe Commerce appear in product listing pages, comparison pages (`catalog/product/compare/list.phtml`), cart (`checkout/cart/item/default.phtml`), and order history templates.
  2. SSH into your server or use your IDE to open the relevant `.phtml` template file inside your custom theme directory: `app/design/frontend/<Vendor>/<Theme>/`.
  3. Search for `<th` tags that have no text content between the opening and closing tag. Add a descriptive text label or `aria-label` attribute to each.
  4. Common locations: `Magento_Catalog/templates/product/list.phtml`, `Magento_Checkout/templates/cart/item/default.phtml`, `Magento_Catalog/templates/product/compare/list.phtml`.
  5. After editing, run `bin/magento cache:clean && bin/magento cache:flush` from the CLI to clear the cache.
  6. Re-test with axe DevTools or WAVE on the storefront to confirm all table headers now have accessible names.

Does your site have this issue?

Run a free SEOLZ audit to find empty table header — and every other issue — across your whole site in minutes.

Scan my site free

Frequently asked questions

What is Empty table header?

A table header cell (`<th>`) is the label that sits at the top of a column or the start of a row in an HTML table — it tells everyone what kind of data that column or row contains (e.g., "Product Name," "Price," "Quantity"). An "empty table header" means one or more of those label cells exists in your page's code but contains no readable text. The cell may look fine visually (perhaps it's a decorative spacer or uses an icon), but it has nothing for a screen reader to announce. Screen readers rely on header text to describe a table's structure, so when a header is blank, users who are blind or have low vision lose the context they need to understand the data.

Why does empty table header matter?

**Accessibility & legal risk:** Empty table headers violate WCAG 2.1 Success Criterion 1.3.1 (Info and Relationships), which is the benchmark used in accessibility lawsuits and regulatory audits (ADA, EN 301 549, EAA 2025). A single empty header in a product-comparison or pricing table can make that entire table unusable for customers who rely on assistive technology — costing you sales and exposing you to legal liability. **SEO:** Search engines also use table structure to understand tabular content; properly labelled headers improve the semantic clarity of your pages, which can contribute to better crawlability and richer structured understanding of your data. **Conversions:** Accessible, well-labelled product or size tables are easier for all customers to scan, reducing the friction that causes shoppers to abandon a purchase.

How do I fix empty table header?

Add descriptive text to every table header cell (`<th>`) so that screen readers can announce what each column or row represents.

Authoritative references

Related Accessibility (WCAG) issues