Skip to content
Academy
Marketing Academy · Field Work●SEO
MiniAudit· 35 minutes

Machine-Readable or Invisible: Auditing a Product Feed for AI Shopping Agents

Allbirds

Objective: Given a real product page and its structured data, decide whether an AI shopping agent (ChatGPT, Perplexity, or Google's agent stack) can actually read, compare, and recommend it, or whether it silently drops out of consideration before a human ever sees the recommendation.

You're the ecommerce SEO analyst at Allbirds, the sustainable footwear and apparel brand, checking whether the current sneaker product pages meet the baseline an AI shopping agent needs before it will even consider recommending them.

Crawl a product page's structured data, score it against the five agent-readiness inputs from the lesson, and flag the single gap most likely to disqualify the listing.

Before you start

What you'll need

Free path (everything below is enough to finish)

FreemiumCrawl product URLs and extract structured data

Free up to 500 URLs, covers a single-category audit

FreeScore identifier, review, and price-freshness gaps

No account friction, easy to share with the merchandising team

The process

2 steps

Step 01 of 02

Identifying missing Product/Offer schema and GTIN identifiers via a structured-data crawl

The lesson's feed-and-schema section lists Product/Offer schema.org markup and GTIN/MPN identifiers as the baseline inputs Perplexity's merchant program and the Agentic Commerce Protocol both require before an agent will parse a listing at all.

A crawl of 12 Allbirds product URLs returns Product schema present on all 12, but the `gtin` field is empty on 5 of them (all in the new Tree Runner colorways). What happens to those 5 pages in an agent's comparison, and what's the fix?

Screaming Frog SEO Spider— Configuration > Custom > Structured Data, run against the product URL list, export the schema validation report.

Procedure

  1. Load the 12 product URLs into Screaming Frog's list mode
  2. Enable structured data extraction and crawl
  3. Export the Structured Data tab, filter for Product schema entries
  4. Check the `gtin13`/`mpn` property column for blank cells
  5. Cross-reference blank rows against the CMS to find where the identifier was never backfilled
Sample output
12 URLs crawled, Product schema found: 12/12
GTIN present: 7/12
GTIN missing: 5/12 (all Tree Runner colorways, launched this quarter)
MPN present as fallback: 0/5 missing rows

Healthy

Every product URL has either a valid GTIN or, when no GTIN exists (a private-label first-party item), a documented MPN plus brand name as the fallback identifier.

Unhealthy

A product page ships with Product schema but an empty identifier field, which is functionally invisible to any system that matches products by universal ID rather than by title text.

What this means

Schema presence alone is not the pass condition. An agent built around GTIN matching cannot place an identifier-less product next to a competitor's, so it gets excluded from the comparison before quality or price ever matter.

So what do I do about it?

SymptomActionEffort
New colorways/SKUs launch without a GTIN backfilledAdd GTIN assignment as a launch-checklist item alongside the product page itself, not a follow-up task30 min
YouYou can do this yourself, no engineering access required.

Step 02 of 02

Scoring review volume and price/stock freshness as agent-ranking inputs

The lesson's merchant-checklist section treats review volume and real-time price/stock accuracy as direct inputs to an agent's recommendation, not passive trust signals, and warns that a stale price creates a failed or unwanted transaction.

The same 12 URLs show review counts ranging from 3 to 890, and one page's price in the feed (checked against Merchant Center) is 11 days stale after a markdown. Which of these two problems disqualifies a listing outright, and which just weakens it?

Google Sheets— Combine the Screaming Frog export with a manual feed-vs-live-price check, score each URL.

Procedure

  1. Paste the 12-URL crawl export into Google Sheets
  2. Add a review-count column pulled from each product page
  3. Add a feed-price-vs-live-price column by comparing the Merchant Center feed export to the current live price
  4. Flag any row where feed price != live price as 'checkout risk', regardless of review count
  5. Flag any row under 10 reviews as 'weak recommendation signal', not a hard block
Sample output
URL: /tree-runner-go-mizzle   Reviews: 890   Feed price: $98   Live price: $98   Status: OK
URL: /tree-runner-caramel   Reviews: 4   Feed price: $110   Live price: $85 (11 days stale)   Status: CHECKOUT RISK

Healthy

Feed price matches live price within the same day, and review count is high enough that the agent has real sentiment data to summarize.

Unhealthy

A stale feed price that would complete a transaction at the wrong amount, which the lesson calls worse than not appearing at all.

What this means

Low review count weakens a recommendation; a stale price actively breaks the transaction agents are built to complete, so it gets fixed first regardless of how strong the rest of the listing is.

So what do I do about it?

SymptomActionEffort
Feed price drifts from live price after a markdown or promoSet the feed sync job to run at least daily, hourly during sale periodsdev ticket
EitherYou or a developer can handle this, depending on your access.

Final deliverable

A 12-row agent-readiness audit sheet flagging every product missing a GTIN/MPN and every product with a stale feed price, ranked by which fix unblocks the most revenue.

See a reference example
Sample output
Warby Parker, agent-readiness audit (excerpt)

BLOCKING (fix first)
  Hayes Sunglasses, Rye Tortoise   GTIN: missing   Feed price: matches live   -> backfill GTIN this week

CHECKOUT RISK
  Percey Optical, Elderflower Crystal   GTIN: present   Feed price: $145, live $125 (9 days stale)   -> resync feed job

WEAK SIGNAL, not blocking
  Durand Sun, Whiskey Tortoise   Reviews: 6   GTIN: present   Feed: current   -> request review outreach, no urgent fix

Success criteria

You're done when you can:

  • Correctly separates hard-blocking gaps (missing identifier, stale price) from weakening-but-not-blocking gaps (low review count)
  • Produces a ranked fix list, not just a flat list of issues