To get AI assistants to extract facts, comparisons and specs from your pages, put that data in real HTML tables and lists — not in images, not in free-flowing paragraphs. Language models and search crawlers read the underlying markup, and structured elements like <table>, <ul> and <dl> hand them clean, unambiguous rows and pairs. Bury the same information in a JPEG or a wall of prose and the machine has to guess, which usually means it skips you and cites a competitor who made the data easy to lift.
Why structure decides whether AI can quote you
When an AI answers a question like "which plan includes priority support" or "what is the boiling point of X," it is looking for a discrete fact it can attribute confidently. A properly marked-up table gives it exactly that: a header row that labels each column, and body rows that map values to those labels. The model can read "Plan: Pro, Priority support: Yes" as a clean relationship.
This connects directly to how retrieval works. As we explain in how AI chunks your content for retrieval, systems split pages into passages and rank them for relevance. A self-contained table row is a near-perfect chunk — compact, labelled, and meaningful on its own. A sentence like "the Pro tier, unlike the entry option we discussed earlier, does include the faster support queue" carries the same fact but is far harder to extract cleanly.
The markup that works
Use the right element for the shape of your data:
- Tables for anything with rows and columns — pricing tiers, spec sheets, feature comparisons, schedules. Always include a proper header row using <th> so the labels are machine-readable, and add scope="col" or scope="row" so the relationship between header and cell is explicit.
- Unordered lists for sets of items where order does not matter — features, ingredients, requirements. Keep each list item to a single self-contained point.
- Ordered lists for real sequences — installation steps, recipes, processes. The numbering signals to the model that order is meaningful.
- Description lists (<dl>) for term-and-definition or label-and-value pairs, which map neatly onto how AI stores attributes.
Avoid faking structure with layout tricks. Rows built from styled <div> elements and CSS grid may look like a table to a human but expose no header-to-cell relationship to a parser. If it reads as a table on screen, mark it up as a table in the HTML.
Common mistakes that hide your data
The biggest one is putting comparison tables or spec sheets inside images. A screenshot of a pricing grid is invisible to text extraction; the model sees an image with, at best, whatever you wrote in the alt attribute. If the data matters, it belongs in HTML. This is the same principle behind our guide to alt text and image SEO for AI — machines read markup and alt text, not pixels.
Other traps to avoid:
- Tables used purely for page layout. This confuses parsers about what is data and what is decoration. Use CSS for layout and tables only for tabular data.
- Merged and nested cells everywhere. Complex rowspan and colspan gymnastics break the clean row-column mapping. Keep tables flat where you can.
- Missing header rows. A table with no <th> is just a grid of orphan values. The header is what gives each number its meaning.
- Wrapping everything in one giant paragraph. Prose is right for narrative, wrong for data. Split facts out into the structure that fits them.
Pair structure with schema for the strongest signal
Clean HTML tables and lists are the foundation; structured data is the amplifier. For a genuine comparison or dataset, adding schema markup on top makes the relationships explicit in a second, machine-first language. Our practical guide to JSON-LD and Schema.org covers how to layer that on without touching the visible page. Together, readable markup plus schema means an AI does not have to interpret your data — you have handed it over pre-labelled.
The takeaway is simple: write narrative as prose, but express data as data. Every table row and list item you mark up correctly is a fact an AI can lift and attribute to you.
Want to see how a crawler reads the structure of your pages? Run the free CheckMy.site scanner to check whether your data is exposed as clean markup or hidden where machines cannot reach it.