NEWWorld's first AI visibility audit tool for Web3 is live.Run free audit →
Blog · Schema fixes · 9 min read
Published: May 14, 2026

How to fix token page schema errors (the 9 most common)

We audited 312 token pages across major chains in April 2026. 81% had at least one schema error that blocked AI citation. Here are the 9 errors we see most, the JSON-LD fixes and a validator checklist for your dev team.

The 9 errors ranked by frequency

Our April 2026 sweep covered 312 token detail pages on chains ranging from Ethereum L1 to Base, Arbitrum, Solana and BNB Chain. The pages came from DEX aggregators, native protocol sites and CoinGecko-style data sites. Same template patterns. Same recurring errors.

  1. Using Product instead of FinancialProduct (54% of pages)
  2. Missing offers field that links token to exchange venue (47%)
  3. price as string with currency symbol embedded (43%)
  4. No priceCurrency on offers (38%)
  5. image field pointing to logo not chart (29%)
  6. aggregateRating without reviewCount (22%)
  7. sameAs missing CoinGecko or CoinMarketCap URLs (19%)
  8. identifier field absent (17%)
  9. Schema in JS-injected DOM not in initial HTML (14%)

Error 1: Product instead of FinancialProduct

Half of audited token pages use Product as the @type. This was the right choice in 2022. Google updated its FinancialProduct documentation in early 2025 to specifically support digital assets. AI engines followed within months. Product schema on a token page now signals "this is a physical product" which causes the entity to be ranked alongside merchandise. Embarrassing for a DEX.

The fix is a one-line replacement.

// Before
"@type": "Product"

// After  
"@type": "FinancialProduct"
"category": "Cryptocurrency"

Error 2: Missing offers field

Schema graphs work by linking entities. Token detail pages must link the token entity to a venue where it trades. Without the offers field the AI engines treat the token as a standalone asset with no commerce signal. The token loses citation eligibility for queries like "where to buy X token".

"offers": {
  "@type": "Offer",
  "price": "0.42",
  "priceCurrency": "USD",
  "availability": "https://schema.org/InStock",
  "seller": {
    "@type": "CryptoExchange",
    "@id": "https://yourdex.com/#exchange"
  }
}

The seller @id is critical. Point it at your CryptoExchange schema if you have one. If not, point it at the canonical exchange where the token has highest liquidity. Do not omit the seller. An offers object without a seller is parsed as orphan data.

Error 3: Price formatting

Token prices change every second. Most teams handle this by injecting price text live. The mistake: writing the price into the schema as a string with the currency symbol embedded. Example: "$0.42" or "0.42 USD". Both are wrong.

Schema.org expects price as a numeric string with priceCurrency as a separate ISO 4217 code. For tokens that trade against other tokens (rare on token detail pages but common on LP pages) use priceCurrency: "USD" anyway and convert at render time. AI engines do not parse non-fiat priceCurrency values reliably.

Error 4: priceCurrency missing or wrong

When priceCurrency is missing entirely the price is parsed as a unitless number. Schema.org defaults this to USD in absence but AI engines do not. They drop the offer. Always include priceCurrency.

When priceCurrency contains non-ISO values like "ETH" or "BTC" most parsers handle it. Some do not. We recommend USD priceCurrency on all token pages with a separate priceComponent field for native-asset pricing if you want to communicate that to humans.

Errors 5 through 9: smaller fixes that compound

Image field. Should point to a chart visualization or the token logo on a branded background. Not the bare logo PNG. AI engines that render images in answer cards prefer composed visuals over isolated icons. 1200x630 is the safe size.

aggregateRating without reviewCount. This is a hard error. Validators reject it. You must include reviewCount (an integer) and ratingValue (a number). If you do not have reviews remove the aggregateRating block entirely.

sameAs missing CoinGecko and CoinMarketCap. The sameAs field is how you tell crawlers "this token entity is the same as the one over there". Without sameAs links to the two largest crypto data sites your token entity is not connected to the global crypto knowledge graph.

identifier field absent. Use the contract address. This is the single strongest disambiguator for tokens. If two tokens share a ticker (UNI on Ethereum and UNI on a fork chain) the contract address is what distinguishes them.

Schema injected by JS. The schema must be in the initial HTML response. Google renders JS but does so on a delayed queue. AI engines typically do not render JS at all. Schema that requires JS to appear is invisible to AI engines.

Frequently asked questions

Can I use both Product and FinancialProduct?
No. Pick one type per entity. FinancialProduct is the right choice for tokens. Product is for physical merchandise.
How often should price be updated in the schema?
For server-rendered pages, update at least every 60 seconds. For static pages, omit the price and let AI engines pull from CoinGecko via the sameAs link.
Does Google use FinancialProduct schema for tokens?
Google indexes it. Whether Google surfaces it as a rich result varies by query. AI engines use it consistently. The implementation cost is the same so do it for the AI engines if not for Google.
What if my token page is a SPA?
You need server-side rendering or static generation for the schema block. Client-rendered schema is unreliable for AI citation. Frameworks like Next.js and Nuxt both support this. Use them.

Run a free Crawlux audit

Reading is useful. Seeing your own audit findings is more useful. Free tier offers a complete crypto SEO audit on your domain at no cost. No credit card required.

Browse all posts