A retailer runs a 20%-off promotion, puts it in a homepage banner and a popup that fires after three seconds on the page — completely normal for a human visitor, and completely invisible to most AI shopping agents. If a customer asks an AI assistant whether the store currently has any active discounts, the honest answer the assistant can give, based on what it can actually read, is "not that I can find" — even while the promotion is live and prominent to every human visitor.
How AI shopping agents decide what to recommend
An AI assistant fielding a product or shopping question is working from whatever it can reliably extract: page content, and increasingly, structured data specifically. When a promotion or discount is one of the deciding factors in a recommendation — "which of these two similar products is currently cheaper," "does either of these have an active discount" — the agent needs that information in a form it can parse with confidence, not a banner graphic it has to interpret visually or a popup it never sees rendered at all.
This is the same underlying dynamic covered in which JSON-LD schema types matter most for AI: a fact stated in structured Offer data is dramatically more reliable for a model to use than the same fact conveyed only through page design.
Why the common implementation is invisible to crawlers
A few widespread patterns make promo codes functionally invisible to AI crawlers even though they work perfectly for human shoppers:
- Text baked into a banner image. No crawler — AI or otherwise — reads text out of a JPEG or PNG without OCR, which most don't run.
- JavaScript-rendered popups. Many AI crawlers don't execute client-side JavaScript, so a discount that only appears after a script runs is never seen at all.
- Copy-only promo mentions in prose, without a corresponding structured Offer — a sentence like "use code SAVE20 at checkout" is readable by a crawler that does render the page, but it's a much weaker signal than a structured field a model can extract with certainty, and it's easy for a model to miss inside a longer paragraph.
Ready to optimize for AI?
Install the free CrawlPod plugin and see your WordPress site's AI visibility score in minutes.
What structured promo data looks like
The fix is representing a promotion as an actual schema.org Offer — with a price, a discount, and validity dates — rather than only as visual or prose content. This is the same JSON-LD mechanism used for standard product pricing, applied specifically to time-limited promotional data, ideally paired with an entry in the site's llms.txt file so an AI model checking that index sees an explicit promotions section rather than having to infer discount activity from individual product pages.
How CrawlPod's Dynamic AI Promo Codes feature works
Manually maintaining structured Offer data for every active promotion, keeping it in sync with what's actually live, and remembering to remove it when a promotion ends is realistic for one promotion and increasingly error-prone with several running at once. CrawlPod's Dynamic AI Promo Codes feature automates the mechanics:
- JSON-LD Offer injection — structured discount data added automatically, matched to what's actually configured as active.
- A dedicated promotions section in llms.txt — giving AI models an explicit, indexed place to find current discount information rather than requiring them to discover it page by page.
- Auto-expiry — a promotion past its end date stops being represented in structured data automatically, which matters because a discount an AI assistant surfaces after it's actually expired is a direct, avoidable source of customer frustration.
- Multiple simultaneous promotions — different discounts for different product categories or the whole store, each represented as its own distinct Offer.
- Page-level targeting — scoping a promotion's structured data to the specific products or categories it actually applies to, rather than implying a discount applies store-wide when it doesn't.
Where this fits into a broader visibility strategy
Getting a promo code in front of an AI shopping agent is one piece of the larger question of whether a store is reachable and legible to AI systems at all — see MCP servers for WooCommerce for a complementary approach that lets an agent query current pricing and availability directly rather than relying on structured data alone. Both point toward the same underlying shift: as more shopping research happens through AI intermediaries, the parts of a store's information that matter most to a purchase decision — price, stock, active discounts — need to be represented in a form those intermediaries can actually read, not just a form that works for a human looking directly at the page.