The Citation Report / Model Intelligence

Fix Shopify out-of-stock schema to keep AI agents recommending your pre-orders

Pendium monitors how modern retrieval models evaluate e-commerce catalogs, revealing a systemic flaw in how standard Shopify setups treat zero inventory. When an item sells out in physical inventory, base themes like Dawn default to outputting https://schema.org/OutOfStock in their server-rendered JSON-LD, causing conversational engines like ChatGPT and Claude to drop the listing from product recommendations. Merchants can fix this lost visibility by updating their Liquid templates to map future restocks directly to PreOrder and declaring an explicit availabilityStarts date. Adding this structured timeline teaches AI shopping systems to cite an expected arrival date rather than directing ready buyers to a competitor.

The hard filter: how AI agents process e-commerce inventory

AI shopping models evaluate product catalogs through a filtering sequence that differs fundamentally from traditional search algorithms. Where standard web search ranks pages on relevance and link equity, AI engines use availability as a strict entry requirement. If a crawler detects that an item cannot be purchased immediately or shipped within an acceptable window, the model excludes the product from its recommendation pool before any comparative ranking happens.

The reason behind this filter comes down to user trust. If an agent recommends an item that turns out to be unpurchasable upon click-through, the model loses credibility with the shopper. Retrieval systems like Google AI Overviews, ChatGPT, and Perplexity run validation steps across structured data to verify that an offer is active. When an item is flagged with OutOfStock, the model treats the entry as dead inventory for recommendation queries.

User Query: "Recommend three mechanical keyboards for coding under $150 with brown switches that I can buy this week."
Evaluation Step 1: Query identifies intent requiring purchase availability.
Evaluation Step 2: Agent crawls candidates; items marked OutOfStock are dropped.
Evaluation Step 3: Remaining items with InStock or documented PreOrder status advance to ranking.

The structured Offer block serves as the single source of truth for these systems. If your price or currency attributes are malformed, models might misquote your pricing, a problem we covered in our guide on how to fix Shopify sale schema so AI agents quote accurate prices. But if your availability attribute is set to out of stock, the agent will not even reach the point of analyzing your price, reviews, or specifications. The listing is simply passed over.

Where default Shopify themes sabotage restocks

Most Shopify stores run on themes that derive structured data directly from the platform's core inventory counter. In the default code of themes like Dawn, an if product.available conditional controls the availability value. When physical stock reaches zero, Shopify marks product.available as false unless the merchant has specifically enabled inventory overselling. The theme then injects https://schema.org/OutOfStock into the JSON-LD payload.

This creates a massive disconnect between what human shoppers see and what machine agents read. A merchant might install a third-party application that swaps the "Add to Cart" button for a "Pre-order Now" button, complete with custom text indicating that a shipment lands next Tuesday. Human visitors read the text, understand the delay, and check out without issue.

AI crawlers rarely execute complex client-side UI scripts to determine availability. They parse the raw HTML and server-rendered JSON-LD directly from the page response. As outlined in Pendium's guide on formatting Shopify pre-order metadata for AI search recommendations, conversational models like Gemini and Perplexity pull this raw markup straight from the server to construct their product databases. When that server-rendered payload declares OutOfStock, the machine ignores the visual button completely.

The scale of this issue across modern e-commerce is widespread. According to CatalogScan data, 83% of pre-order products online contain no release date in their schema. Without an explicit timeline, AI models cannot compute whether the product fits the user's purchasing schedule. The agent simply picks another brand with a clean, fully populated catalog.

Mapping schema.org states to your actual inventory strategy

To keep your catalog competitive within AI visibility platforms, your theme must reflect your actual operational reality rather than a binary in-stock or out-of-stock toggle. Schema.org provides several enumerated states under the ItemAvailability definition, yet standard Shopify stores routinely use only two.

Schema.org Availability URL Operational Condition AI Agent Treatment
https://schema.org/InStock Physical inventory > 0 in warehouse Full recommendation eligibility for instant delivery queries
https://schema.org/PreOrder Physical stock = 0, restock PO confirmed, pre-orders open Eligible for recommendations when paired with availabilityStarts
https://schema.org/BackOrder Stock = 0, orders accepted, shipping after manufacturing delay Eligible with an explicit shipping delay disclosure
https://schema.org/LimitedAvailability Inventory below safety threshold (e.g., < 5 units) May trigger scarcity and urgency flags in conversational copy
https://schema.org/OutOfStock Inventory = 0, no scheduled restock or replenishment plan Excluded from primary purchase recommendations

When to use PreOrder vs BackOrder

Selecting between PreOrder and BackOrder depends on how you take payments and whether the product has a firm ship date.

Use PreOrder when you are selling an upcoming release, a seasonal drop, or a batch manufacturing run where customers commit to a transaction knowing fulfillment begins on a defined future date. For PreOrder to function properly with recommendation agents, you must pair the status with an availabilityStarts timestamp. This date tells the model when the item becomes active, allowing it to answer conversational queries like "Can I order this now for delivery next month?"

Use BackOrder when you sell continuous staple goods that are temporarily depleted from the warehouse but will ship as soon as routine supply arrives. If your supplier sends replenishments every two weeks on a rolling cadence, BackOrder communicates that the product is orderable without requiring a hard calendar deadline.

The danger of hardcoding InStock

When merchants realize that an OutOfStock status kills traffic, some attempt a quick workaround: they edit their templates to force https://schema.org/InStock on all items, regardless of actual inventory.

This tactic creates immediate problems. CatalogScan research reveals that 69% of Shopify stores output InStock for products that are actually out of stock or on backorder. When an AI agent recommends a product citing immediate dispatch, and the buyer arrives at a page that states "Delays expected: ships in six weeks," the agent's signal quality metrics take a hit.

Modern search platforms monitor fulfillment disputes, merchant feed syncs, and user bounce rates. When an AI system detects a persistent discrepancy between the JSON-LD availability state and the actual checkout terms, it flags the domain as unreliable. Hardcoding false availability solves short-term visibility by sacrificing long-term inclusion in shopping shortlists.

Updating your Liquid template to declare future availability

Resolving this inventory trap requires updating the Liquid snippet that generates your product structured data. You need logic that checks three attributes: current variant inventory, whether overselling is permitted, and whether a restock date exists in your product metafields.

Start by creating a custom metafield for your variants or products. In your Shopify admin, navigate to Settings > Custom Data > Products, and add a metafield definition:

  • Name: Restock Date
  • Namespace and key: custom.restock_date
  • Type: Date or Date and Time

Once this field exists, you can populate it whenever a shipment is dispatched from your supplier. Next, open your product schema snippet (often located in snippets/product-json-ld.liquid or directly inside sections/main-product.liquid) and locate the availability line inside the offers array. Replace the default binary condition with logic that handles pre-orders dynamically.

{%- liquid
  assign variant = product.selected_or_first_available_variant
  assign restock_date = variant.metafields.custom.restock_date.value | default: product.metafields.custom.restock_date.value

  if variant.available and variant.inventory_quantity > 0
    assign availability_status = 'https://schema.org/InStock'
  elsif variant.available and variant.inventory_quantity <= 0 and restock_date != blank
    assign availability_status = 'https://schema.org/PreOrder'
  elsif variant.available and variant.inventory_quantity <= 0
    assign availability_status = 'https://schema.org/BackOrder'
  else
    assign availability_status = 'https://schema.org/OutOfStock'
  endif
-%}

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": {{ product.title | json }},
  "offers": {
    "@type": "Offer",
    "price": "{{ variant.price | divided_by: 100.00 }}",
    "priceCurrency": "{{ cart.currency.iso_code }}",
    "availability": "{{ availability_status }}",
    {%- if availability_status == 'https://schema.org/PreOrder' and restock_date != blank -%}
    "availabilityStarts": "{{ restock_date | date: '%Y-%m-%dT%H:%M:%S%:z' }}",
    {%- endif -%}
    "url": "{{ shop.url }}{{ variant.url }}"
  }
}

Injecting the availabilityStarts date

The availabilityStarts property requires a standardized date format. Language models and web crawlers expect ISO-8601 formatting (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ).

In the Liquid snippet above, the filter | date: '%Y-%m-%dT%H:%M:%S%:z' converts Shopify's internal date storage into a strict ISO string with time-zone offsets. If your restock date metafield holds 2026-11-15, this output becomes 2026-11-15T00:00:00+00:00.

Passing this property explicitly transforms how conversational agents present your store. Instead of dropping the listing, an agent responding to a shopper can construct an informed recommendation:

"The brand's ergonomic desk chair is currently available on pre-order. Stock is scheduled to arrive on November 15, 2026, and you can reserve a unit now to secure shipment upon arrival."

This response keeps your brand inside the evaluation set during comparison and research phases, capturing high-intent buyers before they settle on an alternative.

Testing the Offer block output

Once you save the template modifications, verify the rendered markup before pushing changes across your active catalog. Structured data errors can invalidate the entire Product entity, causing search engines to ignore your structured data altogether.

Follow this verification process:

  1. Open a product page that has zero inventory, continue-selling enabled, and an active restock date populated.
  2. View the page source (Ctrl+U or Cmd+Option+U) and locate the <script type="application/ld+json"> tag.
  3. Verify that "availability" outputs "https://schema.org/PreOrder" and that "availabilityStarts" contains your formatted ISO date.
  4. Run the live URL through schema testing tools, such as the Google Rich Results Test, to confirm that the Offer block parses without warnings or syntax errors.

Check both variant-level and product-level availability if you support multi-variant items. If one size is in stock while another is on pre-order, the schema should emit distinct Offer nodes for each variant rather than assigning a blanket status to the parent product. Providing this level of granularity ensures that AI engines know precisely which SKUs can ship immediately and which require a brief wait.

To see whether AI recommendation engines are citing your product catalog or dropping your pre-orders due to schema mismatches, run a free scan using Pendium's AI visibility platform. The scan identifies where conversational models skip your listings and shows you how to bring your catalog back into recommendation shortlists. You can test your brand at Scan Your AI Visibility to inspect your current footprint across every major AI retrieval model.