Put your size chart on the page as a real text table. Give it one row per size, with body measurements (the person) and garment measurements (the product) in separate, labelled columns. State both units, how to measure, how much the numbers can vary, and the fit advice you’d give a customer on the phone. If you also have a chart image, keep it, and give it a text description of its own.

The reason is practical. Text can be quoted, converted between units and copied into a feed without losing anything. An image depends on whoever reads it, and on alt text that is often empty. In one Shopify catalog search for knee sleeves, 4 of 10 descriptions carried a measurement chart as text. One listing’s chart appears to exist only as an image with empty alt text.

This guide shows what that shelf looked like, then gives you a template you can copy.

What one shelf of knee sleeves put in text

On October 26, 2026 we searched Shopify’s agent catalog for “knee sleeves for squats compression” and saved the top 10 results. Knee sleeves are a good test because fit is everything: buyers choose by knee circumference, and a sleeve one size off is either loose or impossible to pull on.

Here is where each listing’s sizing evidence sat in the record we received. Positions are the order the catalog returned. Store names are withheld.

Position Measurements in the description text Elsewhere in the record Chart image in the description
1 None; it says “check out the size chart” Inch ranges in the size options, such as S (11.8-13”) Yes, no alt attribute
2 Yes: two ranges per size, in inches, plus how to measure — No
3 None Says 11 sizes; the options list 4 No
4 Yes: centimetres, XS to 5XL — Yes, empty alt text
5 Yes: inches, how to measure, a tighter-fit tip — No
6 Garment dimensions only (height and three circumferences), plus “leg straight” — No
7 How to measure, no ranges Centimetre ranges in the size options Yes, empty alt text
8 Two sizing rules, no ranges — Yes, empty alt text; the file is named as a size chart
9 Yes: inches, how to measure, a calf rule — Yes, but an approval badge, empty alt
10 None — No

Four descriptions (positions 2, 4, 5 and 9) gave a shopper, or an agent, a table to check a knee measurement against. Two more (1 and 7) put the ranges into the size option names. Shopify marks options as Inferred, meaning normalized by Shopify, so we can’t tell whether those labels are the store’s own wording.

Position 6 is the subtle one. It gave real numbers, “Top Circumference: 34cm” for Small/Medium, but they describe the sleeve, not the knee it fits. A shopper with a 36 cm knee can’t tell from that whether Small/Medium fits, because the stretch isn’t stated. Body and garment measurements answer different questions, and a chart should say which one each column is.

The pointer problem

Position 1’s description ends its sizing advice with “check out the size chart”, followed by an image that has no alt attribute at all. Position 8 gives two useful rules (“IF YOUR CALF IS LARGER THAN YOUR KNEE, USE YOUR CALF MEASUREMENT” and “IF YOU MEASURE BETWEEN SIZES, GO UP ONE SIZE”). An image in that description has empty alt text and a file name that includes “Size_Chart”. We didn’t open the image, so we can’t confirm it holds the measurements.

We saw the same pattern on other shelves. For “reflective dog coat for greyhound winter”, three descriptions (positions 1, 8 and 10) ended with “just follow our size guide below!” and nothing followed in the record. For “compression socks for long flights women”, none of the 10 descriptions stated a calf, ankle or shoe-size measurement. Where a size option existed, it was letters or roman numerals: S/M and M/L, s, m and l, or II, III and IV.

A merchant on Reddit’s r/shopify wrote that agents “can’t read your size chart if it’s an image” (community opinion, not a platform rule). That’s too strong. Some systems can read images. But nothing obliges them to, alt text is often empty, and a chart image can’t be carried into a product feed at all. Text removes the guesswork.

Where generated copies bent the chart

Shopify’s catalog returns generated spec lists alongside the description. Shopify marks them Inferred: generated or enriched by Shopify, possibly inaccurate, and not merchant-authored source text. On these shelves, the generated lists changed the sizing facts:

Listing What the description said What the generated spec list said
Knee sleeves, position 2 Two ranges per size, Comfort Fit and Competition Fit, XS to 4XL One range per size, plus a 5XL (19-20 in) that isn’t among the size options
Knee sleeves, position 4 XS to 5XL; 4XL is 45.5-48 cm 4XL is 45.5-48.5 cm; adds 6XL and 7XL
Dog coat, position 8 “Boxer model is 35kg/77lbs wearing size 3XL”; “French Bulldog model is 9kg/20lbs wearing size L” “Available Sizes: L (35 kg/77 lbs), 3XL (9 kg/20 lbs)”

The dog coat is the clearest case. The description reported which size two model dogs wore. The generated list turned those notes into a sizing spec and swapped the sizes, so the larger dog’s weight now sits next to the smaller size. A shopper with a 35 kg dog who trusts that line would order an L.

We can’t see what Shopify built these lists from, and some of the extra sizes may come from data we didn’t receive. But the pattern is the point. A chart written as prose, or split between a description and an image, gives any rewriting step more room to get it wrong. A labelled table with one row per size leaves less room.

There’s also a quieter conflict. Positions 4 and 7 share most of their description wording, yet the centimetre range for M is 33-36 at position 4 and 28-31 at position 7. The records don’t tell us whether they’re the same product. If you sell one item through more than one store or market, make sure every copy of the chart matches.

The template: an accessible size table

The template has four parts: a body table, a garment table, a fit-caveats block and a short how-to-measure line. It’s our proposal, built from what the shelves above were missing. No platform requires it.

1. Body measurements: who each size fits

Size [Body measurement 1] (cm) [Body measurement 1] (in) Fit note
S [min]-[max] [min]-[max] [e.g. snug at the top of the range]
M [min]-[max] [min]-[max]

Use one body measurement per column. For a sleeve that’s knee or calf circumference; for a shirt it’s chest and waist; for a sock it’s shoe size and calf. Fill in both units from one source value, converted by formula, never retyped. The product specification template covers unit lists and rounding.

2. Garment measurements: what the product measures

Size [Garment measurement] (cm) [Garment measurement] (in) Measured how
S [value] [value] [flat, unstretched / stretched / along the seam]
M [value] [value]

Keep this table separate. Position 6’s numbers were good garment data presented where a shopper expects body data.

3. Fit caveats: write down what you’d say on the phone

Add these lines under the tables. Each one closes a gap we saw on the shelf.

  • How to measure: where, with what, and in what position. For example, “around the centre of the knee, leg straight, muscles relaxed”.
  • Between sizes: which way to go, as position 8 did.
  • Range overlaps: if one size ends at 12 in and the next starts at 12 in, say which size a 12 in knee should take.
  • Tolerance: how much a finished item can differ from the chart. For example, “garment measurements ±1 cm”.
  • Fit intent: what the sizes are designed for, such as “compressive”, “relaxed” or “true to size”.
  • Exceptions: body shapes the chart doesn’t cover, such as calves larger than knees.
  • Unknowns: if you haven’t measured something, say so. Don’t leave a column blank without a note.

4. The markup: a table, not a picture of one

If you edit the HTML, mark header cells as header cells and add a caption. W3C’s tables tutorial says header cells must be marked up with th and data cells with td, and that a caption identifies the table’s topic. On the knee-sleeve shelf, only one of the four text tables used header cells, and none had a caption.

<table>
  <caption>Knee circumference for each size, measured around the centre of the knee with the leg straight</caption>
  <thead>
    <tr><th scope="col">Size</th><th scope="col">Knee (cm)</th><th scope="col">Knee (in)</th></tr>
  </thead>
  <tbody>
    <tr><th scope="row">S</th><td>30.5–33.0</td><td>12–13</td></tr>
  </tbody>
</table>

We haven’t verified how Shopify’s description editor or every theme handles table markup, so preview the result on mobile.

If you keep the chart image

Keep it if it helps, for example a diagram of where to put the tape. Treat it as a supplement to the table, never a replacement. W3C’s complex-images guidance calls for a two-part text alternative for charts: a short description in the alt text, plus a long description that holds the essential information. For a size chart, the long description is the text table. So write alt text like “Diagram: where to measure knee circumference; measurements are in the table below”, not an empty string. Google’s own guidance for AI features in Search is to make important content available in textual form. W3C’s success criterion on images of text says the same thing for people.

Worked case: rebuilding position 2’s chart

Position 2 had the most complete chart on the shelf: two fit columns, XS to 4XL, in inches, with a measuring instruction. It was also an HTML table with no header cells and no caption. Here it is rebuilt with the template. The inch values are copied from the record. The centimetre values are our conversion (1 in = 2.54 cm, rounded to 0.1 cm).

Size Comfort fit, knee (in) Comfort fit, knee (cm) Competition fit, knee (in)
XS 11-12 27.9-30.5 12-13
S 12-13 30.5-33.0 13-14
M 13-14 33.0-35.6 14-15
L 14-15 35.6-38.1 15-16
XL 15-16 38.1-40.6 16-17
2XL 16-17 40.6-43.2 17-18
3XL 17-18 43.2-45.7 18-19
4XL 18-19 45.7-48.3 19-20

Fit caveats, checked against the record:

Caveat What the record says Status
How to measure “Measure around the center of your knee with a straight leg.” Stated
What the two fits mean Column names only Not explained
Overlapping ranges (a 12 in knee fits XS or S comfort) Nothing Unknown
Garment measurement Sleeve length 29 cm Stated; no circumference
Sizes offered Options run XS to 4XL Stated; the generated list adds a 5XL

The rebuilt version answers the shopper’s real question: “My knee is 35 cm and I want a competition fit. Which size?” That’s 35 cm ÷ 2.54 = 13.8 in, so S on the competition column, with M possible if they read 13.8 as close to 14. The table can’t settle that edge. Only a sentence from the merchant can, which is why the overlap line belongs in the caveats.

Where the chart has to live

Feeds carry size labels, not charts. Google’s size attribute takes one standard size value per product. For multiple dimensions it asks for a slash, such as 16/34 for neck and sleeve. OpenAI’s product feed has a size field and, if your integration is set up for it, a size_system field. OpenAI says no size conversion is implied. In neither field list did we find a field for a measurement chart (checked on 2026-10-27).

So the chart has to be in the text the platforms do read: your product description, or a page section that’s part of the product page’s text. OpenAI’s own help page tells shoppers that try-on images don’t guarantee fit or size, and to check the merchant’s measurements before buying. That works only if the measurements are published somewhere a shopper, or the assistant helping them, can find.

Two practical rules follow:

  1. Put the body table in the description itself. Don’t rely on a size-guide pop-up, tab or app widget. We didn’t test which of those catalog pipelines capture.
  2. Keep option labels plain (S, M, L), and keep the ranges in the table. Shopify’s Agentic listing insights say the variant and option completeness signal checks for option names with acronyms or numbers that are hard for agents to understand. Ranges belong in the chart, where they have units and a caption.

For temperature ratings and growth features on children’s outerwear, see our winter outerwear guide. For fabric percentages and certifications, see the materials guide. For a shopper brief with several requirements, the constraint coverage method shows how to check each one against your record.

How we checked

On October 27 we reopened three saved Shopify agent-catalog responses from October 26, 2026, each taken with no buyer context and limited to the top 10 results: “knee sleeves for squats compression”, “reflective dog coat for greyhound winter” and “compression socks for long flights women”. A script searched each listing’s title, description (with HTML removed), size options and Shopify-generated spec, feature and selling-point lists for size charts, size guides and measurement ranges. A second script counted image and table tags in the raw description HTML, and recorded each image’s alt attribute and whether tables used header cells, captions or scope attributes.

New observations from those responses:

  • Knee sleeves: text charts at positions 2, 4, 5 and 9; HTML tables in those four descriptions, header cells only at position 4, no captions or scope anywhere.
  • Knee sleeves: images in the descriptions of positions 1 (no alt attribute), 4, 7, 8 and 9 (empty alt; position 9’s is a badge). We judged what the images show from their file names and surrounding text, and did not open them.
  • Dog coat: position 8’s model notes and the swapped sizes in its generated list; the closing “size guide below” line at positions 1, 8 and 10.
  • Compression socks: no calf, ankle or shoe-size measurement in any of the ten descriptions.

We didn’t visit the product pages or test any product. Unit conversions in the worked case are ours.

Your next step

Take your best-selling sized product. Write the body table and the garment table from your factory spec or your own tape measure, in both units. Add the how-to-measure line and the between-sizes rule, then paste the result into the product description as a real table. Then read your description with the images turned off. If a customer couldn’t pick a size from what’s left, neither can anything else that reads it.