Crystallize logo

SEO and GEO: being found and quoted by search engines and answer engines

Search engines rank pages. Answer engines such as ChatGPT, Claude, Perplexity and Google's AI answers read them and quote facts from them. Both work best on a store whose facts are explicit: typed specifications, prices with and without VAT, stock, identifiers and classifications. Crystallize holds those facts. This section shows how to publish them as structured data, Markdown and crawlable pages.

GEO (generative engine optimisation) is SEO for answer engines. An answer engine fetches your pages (often without running JavaScript), extracts facts, and quotes them with a link. It needs the same things as a search engine, plus plain-text versions it can read cheaply and facts it can trust.

The principle: claim only what the data holds

Every fact a storefront publishes comes from Crystallize, and nothing is claimed that the data doesn't hold:

  • No rating without real reviews. Leave out aggregateRating rather than inventing one.
  • No availability without stock. If the tenant has no stock data for a product, leave availability out.
  • No `false` for an unknown yes/no. Discovery returns an unset boolean as false, so a storefront can't tell "no" from "not stated". Publish false only for booleans you know were set.
  • No shipping or return policy in structured data unless the store has one.
  • No guessed identifiers. A GTIN that isn't registered is left out, not made up from the SKU.

Answer engines compare sources. A store whose structured data, Markdown and visible page say the same thing, from the same data, is the one they quote.

Checklist per page type

Page

In <head>

Structured data

Also

Front page

Title, description, canonical, hreflang, og:image

Organization (or OnlineStore) and WebSite with a SearchAction

Link to the Markdown version

Category

Title, description, canonical without filter parameters, hreflang

CollectionPage with an ItemList, BreadcrumbList

Filter links as plain URLs

Product

Title, description, canonical, hreflang, og:image (packshot)

Product, or ProductGroup with a Product per variant, each with an Offer; BreadcrumbList

Markdown version from the same data

Brand, platform, collection

Title, description, canonical, hreflang

Brand or DefinedTerm with an @id that products point to

Article, guide

Title, description, canonical, hreflang

Article; FAQPage only from a real FAQ block

Search results

Static title, noindex, follow

None

Crawlable, but not indexed

Cart, account, checkout

noindex

None

Disallowed in robots.txt

Pitfalls

  • Rich text in `<meta>`. Meta descriptions, og:description and JSON-LD descriptions are plain text. Request format: plainText from Discovery, or use a plain-text SEO field.
  • An AVIF `og:image`. Many link-preview bots don't decode AVIF. Use the original JPEG or PNG, or WebP.
  • A typed canonical URL field. It goes stale on the first rename. Build canonicals from the item's translated path.
  • The tenant's language code in hreflang. Use BCP 47: nb for Norwegian Bokmål, even if the tenant language is no.
  • A cookie market. Crawlers only see the default market. Put the market in the path (see Languages, markets and routing).
  • A disallowed page that is also `noindex`. A crawler that may not fetch a page never sees its noindex. Allow search results and mark them noindex.
  • Metadata streamed past bots. Check that <title>, the canonical and hreflang are in <head> of the HTML each crawler gets (see Next.js App Router).

Validate it

  • Check the vocabulary. Every @type and property must exist in schema.org and fit its type. isConsumableFor, leaseLength and inCodeSet are easy to put on the wrong type. Validate against the schema.org vocabulary file in CI.
  • Google's rules ask for more than schema.org does. The Rich Results Test shows what Google needs for merchant listings, such as shipping details and a return policy.
  • Fetch as the crawlers do. curl robots.txt, the sitemap, llms.txt and a .md page with each crawler's user agent, and check the status, the content type and what is in <head>.
  • Ask an answer engine. Ask for a product's weight, a key spec and its price including VAT in a given market, and compare the answer with your page.

In this section

  • Structured data: JSON-LD for products, variants, offers, specs and breadcrumbs, and share images.
  • llms.txt and Markdown: plain-text versions of the store for language models and agents.
  • Crawlers and sitemaps: robots.txt for AI crawlers, sitemaps with hreflang, canonicals and metadata in <head>.
tip

See it live

Tools Universe publishes all of this on a live demo store: Product and ProductGroup JSON-LD with typed specs and UN/CEFACT unit codes, llms.txt, llms-full.txt, and a Markdown version of every page (for example the front page). Photo Store does the same for a camera catalogue.