/ ← Agent Readiness Fixes / Content Extractability
In this guide
  1. Fetched is not the same as readable
  2. Where facts get locked away
  3. Tables that keep numbers attached to labels
  4. Tabs, accordions and "read more"
  5. Passages that still make sense on their own
  6. Testing what an extractor gets
  7. The fix, step by step
  8. Reducing the noise around the content
  9. Questions and answers

Fetched is not the same as readable

Extraction is the step after the crawler gets your HTML. Software has to strip away navigation, banners and footers, keep the main content, and turn it into text that still means what you meant. Anything that is not text in the HTML, or whose meaning depends on how it looks, tends to fall out at this stage.

The Agent Readiness Audit measures how easily the main content can be extracted. A poor result usually has one of three causes:

This guide deals with those three. Whether the page is built on the server at all is covered in the slow rendering guide, and wrapping the page in the right landmark elements is covered in the semantic HTML guide.

Where facts get locked away

ContainerWhat a text extractor getsBetter approach
Price list, menu or timetable saved as an imageThe alt text at best, often just a file nameWrite the list as HTML; keep the image as decoration if you like it
Infographic with key figuresNothing from inside the graphicPut the figures in a paragraph or table next to it
Chart drawn on <canvas>Nothing; canvas holds pixels, not textAdd a data table or a sentence stating the main values
PDF brochure or spec sheetA separate file that may never be fetched; scanned PDFs contain no text at allPublish the key content as an HTML page and offer the PDF as a download
Map or booking widget in an iframeContent that belongs to another address, not your pageWrite the address, area and hours in the page text
Ticks, crosses and stars as iconsEmpty elements or icon-font characters with no meaningAdd visible or visually hidden text such as "Included" or "4 out of 5"
Text added with CSS content:Usually nothing; generated content is not part of the HTMLPut meaningful words in the markup, use CSS only for decoration
Carousel slides loaded one at a time by scriptThe first slide only, or noneOutput all slides in the HTML, or list the key points below
💡 Alt text helps, but it is not a substitute. Alt text is meant to be a short description of an image, and a whole price list crammed into an alt attribute is hard for both screen readers and extractors to use. Real text on the page is the fix.

Tables that keep numbers attached to labels

Comparison grids, price tiers and specification sheets are often built from rows of divs styled to look like a table. On screen they are clear. Once a machine strips the styling, it gets a flat run of words and numbers with nothing saying which value belongs to which column. A real HTML table carries that relationship in the markup itself.

A layout that looks like a table but is not one:

<div class="plans">
  <div class="col"><div>Basic</div><div>£12</div><div><i class="icon-tick"></i></div></div>
  <div class="col"><div>Plus</div><div>£20</div><div><i class="icon-tick"></i></div></div>
</div>

The same information as a table, with a caption, header cells and words instead of icons:

<table>
  <caption>Window cleaning plans, prices per visit, September 2026</caption>
  <thead>
    <tr><th scope="col">Plan</th><th scope="col">Price per visit</th><th scope="col">Conservatory roof</th></tr>
  </thead>
  <tbody>
    <tr><th scope="row">Basic</th><td>£12</td><td>Not included</td></tr>
    <tr><th scope="row">Plus</th><td>£20</td><td>Included</td></tr>
  </tbody>
</table>

Three details do most of the work. The <caption> says what the table is and when it applies. The <th> cells with scope tie every value to both its row and column. And the words "Included" and "Not included" replace icons that meant nothing without their colour. You can still make the table look like cards on a phone with CSS; the structure stays underneath.

⚠️ Do not go the other way and use tables for page layout. Tables are for data with rows and columns. A layout table confuses extraction just as much as a data grid built from divs.

Tabs, accordions and "read more"

Product specifications, delivery terms and FAQs often sit behind tabs or accordions. Whether a crawler can read them depends entirely on how the panel is built, not on whether it is open.

To tell which you have, view the page source rather than the inspector, and search for a sentence from a closed panel. If it is there, the panel is fine. If it only appears in the inspector after you click, it is loaded on demand.

The simplest robust pattern for an accordion is the native disclosure element, which needs no script at all and keeps the content in the HTML:

<details>
  <summary>Delivery and returns</summary>
  <p>We deliver to mainland UK addresses within three working days.
  Unused items can be returned within 30 days of delivery.</p>
</details>

For tabs, keep every panel in the markup and let the script switch visibility. If a panel is genuinely too heavy to load up front, such as hundreds of reviews, include a short summary in the HTML and load the full list afterwards.

Passages that still make sense on their own

Extraction systems and answer engines often work with parts of a page rather than the whole thing: a paragraph, a list, a table row. A passage that relies on the one before it loses its meaning when lifted out. Small writing habits make each passage self-sufficient without making the page read like a list of soundbites.

None of this means shortening your content or removing nuance. It means each block of text carries its own context.

Testing what an extractor gets

Reader mode

Firefox Reader View, and the similar modes in other browsers, use heuristics to pick out the main content. Open the page in reader mode and compare it with the normal view. Missing tables, missing sections, or a reader view that shows only the cookie notice and footer are strong warnings.

Search the raw source for each key fact

Fetch the page as a crawler would and search for the facts you listed. If a price or opening time does not appear, it is not in the text a non-rendering crawler receives:

curl -s -A "ClaudeBot" https://www.example.co.uk/plans/ | grep -o "£[0-9]*" | sort -u

Turn off images and styles

In developer tools, disable CSS and block images, then read the page from top to bottom. What remains is close to what an extractor works with. Numbers floating without labels point to div-built tables; gaps where pictures were point to text in images.

Select all and paste

Select the whole page, copy it and paste into a plain text editor. Crude, but quick: whatever does not survive the paste probably does not survive extraction either.

The fix, step by step

Step 1

List the facts each page must deliver

For each important template, write down the facts a customer or an answer engine would most want from it: prices, sizes, specifications, delivery terms, opening hours, service areas, contact details, eligibility rules. Keep the list short and concrete. This is your test set. A page passes when every one of these facts can be found as plain text in the HTML the server sends, next to a label that says what it is.

Step 2

Find where each fact actually lives

For every fact on the list, check the page source and note its container: plain text, image, PDF, iframe, canvas chart, icon, script-loaded panel or CSS-generated text. Use reader mode and a curl fetch alongside the source. Anything that is not plain text in the source goes on a fix list, grouped by template, because a fault in a template usually affects every page built from it.

Step 3

Replace pictures of text with real text

Rewrite price lists, menus, timetables and key infographic figures as HTML paragraphs, lists or tables. Keep the image if it helps the design, with short alt text describing it. For PDFs, publish the essential content as an HTML page and link the PDF as a download. Beside maps and booking widgets, write the address, service area and opening hours in ordinary text so they belong to your page.

Step 4

Rebuild data layouts as HTML tables

Convert comparison grids, price tiers and specification layouts built from divs into real <table> markup with a <caption>, header cells and scope attributes. Replace tick, cross and star icons with words or add hidden text that carries the meaning. Keep the visual design with CSS, including stacked cards on small screens, so readers see no change while the structure underneath becomes readable.

Step 5

Put tab and accordion content in the source

For each tab, accordion and read more link, confirm whether the hidden text is already in the page source. Where it is fetched on click, change the component so all panels render into the HTML and the script only toggles visibility, or use <details> and <summary>. For very large lists such as reviews, put a summary in the HTML and load the rest afterwards.

Step 6

Make key passages stand on their own

Reread the paragraphs that hold your listed facts. Name the product or service instead of relying on it or this, put units, currency and dates next to every figure, and remove phrases that point at the layout such as see the table on the right. Where a heading asks a question, answer it in the first sentence underneath. Keep each paragraph to a single idea so it can be quoted accurately.

Step 7

Retest with reader mode and a raw fetch

Open each fixed template in reader mode and confirm the tables and former tab content now appear. Fetch it with curl using an AI crawler user agent and search for every fact on your list. Disable CSS and images once more and check that numbers sit beside their labels. Then run the Agent Readiness Audit again and compare the extractability result with the one you started from.

Reducing the noise around the content

Extraction is also harder when the main content is buried. A page where the source contains several thousand words of mega-menu, cookie text, pop-up offers and repeated calls to action before the first paragraph of real content gives the extractor more to discard, and more chances to keep the wrong part.

These changes also help people using screen readers, who meet the same obstacles in the same order. Extractable content and accessible content are very largely the same thing.

Questions and answers

1. What does content extractability mean?

It describes how easily software can take the page it fetched and pull out the main content as meaningful text. A page can be delivered perfectly and still extract badly if its facts sit in images, embedded files, icons or panels that load by script, or if tables are built from styled divs that lose their structure without CSS. Good extractability means every important fact is present as plain text, with its label beside it, inside a clearly marked main content area.

2. Can AI crawlers read text inside images?

Some AI systems can read text in images when an image is handed to them directly, but you should not count on a crawler downloading and analysing every picture on your page while it gathers text. Most extraction works on the HTML. A price list saved as a JPG is therefore very likely to be missed, and even when it is read, the result can be less reliable than text. Write the facts in HTML and keep the image as decoration.

3. Is content hidden in an accordion ignored?

Not if it is in the HTML. Content that is present in the source and simply hidden with CSS until someone clicks can be read by any crawler that parses the page. The problem is accordions and tabs that are empty in the source and fetch their text with a script when opened, because crawlers generally do not click. View the page source, not the developer tools inspector, and search for a sentence from a closed panel to see which kind you have.

4. Are PDFs a problem for AI crawlers?

A text-based PDF can be read, but it is a separate file at a separate address, so it depends on a crawler choosing to fetch it, and it is often not linked in a way that makes its importance clear. A scanned PDF contains only pictures of pages, with no text at all unless it has been through character recognition. For important information such as prices, terms and specifications, publish an HTML version and offer the PDF as an optional download.

5. How does the reader mode test help?

Reader modes in browsers such as Firefox use their own rules to find the main content and strip everything else, which is similar to what many extraction tools do. If reader mode shows your tables, headings and full text, extraction is probably in good shape. If it shows only the cookie banner, a fragment of the page, or numbers with no labels, an automated extractor is likely to struggle in the same way. It is a quick, free check to run before and after a fix.

6. Will changing div layouts into tables break my mobile design?

It does not have to. HTML tables can be restyled with CSS so that on a phone each row appears as a stacked card, with the header text shown beside each value. The structure underneath stays a proper table with header cells, which is what machines and screen readers need. Test on a real phone and with a screen reader after the change, and keep the table genuinely for data rather than for arranging parts of the page.

7. Is this the same as making my site accessible?

There is a large overlap. Screen readers and text extractors both depend on meaningful text in the HTML, real tables with headers, words rather than icons for meaning, and content that exists without a click. Fixing extractability therefore usually improves accessibility too, and the reverse is also true. Accessibility covers more, such as keyboard use, focus and colour contrast, so an accessibility review is still worthwhile even after these fixes.

Measure how easily your content can be extracted

The Agent Readiness Audit requests your page with real AI crawler user agents, checks robots.txt and llms.txt, reviews JSON-LD coverage and semantic HTML, tests how much depends on JavaScript and measures how easily the content can be extracted.

Open Agent Readiness Fixes →
💬 Got a problem?
Related Guides: All Agent Readiness Fixes  ·  Non-Semantic HTML Structure  ·  Slow Rendering for AI Crawlers  ·  JavaScript-Only Content  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.