Token Schema Audit for Crypto Tokens | Crawlux

Token schema audit. The complete reference for crypto JSON-LD.

Crypto sites need schema.org markup that search engines and AI models actually understand: FinancialProduct, CryptoExchange, SoftwareApplication and crypto-aware Organization data. This is both the audit module and the open reference. Copy what you need, run the audit when you want it validated end-to-end.

By the numbers

63% of crypto sites we audit ship zero crypto-specific schema. Most have only generic WebSite or BreadcrumbList markup. Illustrative figure based on TG3 client audit patterns.

~12s to ship a complete FinancialProduct JSON-LD block from this library to a Next.js page using the App Router metadata API. Time-to-paste, not time-to-validate.

+18pts average AEO score lift after shipping FinancialProduct + Organization sameAs schema on a Web3 site. Illustrative; varies materially by site.

Copy-paste JSON-LD for the seven most common crypto patterns

Each example is annotated with what every field does, why it matters and the most common mistake we flag in audits. Pick the pattern that matches your site, paste it, fill in your real values.

Pattern · DeFi lending pool

FinancialProduct for a lending market

Use this on the page representing a single lending market or pool (e.g. /markets/usdc or /pools/aave-eth). The Aave-style pattern: one FinancialProduct per market, each pointing back to the protocol Organization as provider.

Common mistakes we flag
{
  "@context": "https://schema.org",
  "@type": "FinancialProduct",
  "@id": "https://example.com/markets/usdc#product",
  "name": "USDC Lending Market",
  "description": "Supply USDC to earn variable yield. Borrow USDC against ETH or BTC collateral.",
  "category": "Decentralized lending",
  "interestRate": {
    "@type": "QuantitativeValue",
    "value": 4.82,
    "unitText": "PERCENT_PER_YEAR",
    "valueReference": "Variable APY, updated per block"
  },
  "feesAndCommissionsSpecification": "Reserve factor: 10%. No deposit or withdrawal fees. Borrowers pay variable interest set by utilization curve.",
  "provider": {
    "@type": "Organization",
    "@id": "https://example.com/#organization",
    "name": "Example Protocol",
    "url": "https://example.com/"
  },
  "audience": {
    "@type": "Audience",
    "audienceType": "DeFi users with self-custody wallets"
  },
  "areaServed": "Worldwide, subject to jurisdictional restrictions"
}

Pattern · Decentralized exchange

CryptoExchange for a DEX

For a swap interface (Uniswap, Curve, PancakeSwap pattern). Use CryptoExchange on the protocol's main page and per-pool pages. The supportedAssets array is what disambiguates "AAVE the token" from "Aave the protocol" for AI models.

Common mistakes we flag
{
  "@context": "https://schema.org",
  "@type": "CryptoExchange",
  "@id": "https://example.com/#exchange",
  "name": "Example DEX",
  "description": "Decentralized AMM exchange supporting ETH, ERC-20 and bridged assets across L2s.",
  "url": "https://example.com/",
  "currenciesAccepted": ["ETH", "USDC", "USDT", "DAI", "WBTC"],
  "supportedAssets": [
    { "@type": "Thing", "name": "Ethereum (ETH)", "sameAs": "https://www.coingecko.com/en/coins/ethereum" },
    { "@type": "Thing", "name": "USD Coin (USDC)", "sameAs": "https://www.coingecko.com/en/coins/usd-coin" }
  ],
  "feesAndCommissionsSpecification": "Swap fee: 0.30% per trade, paid to liquidity providers. No protocol fee. Gas paid by user.",
  "areaServed": "Worldwide, excluding sanctioned jurisdictions",
  "provider": { "@id": "https://example.com/#organization" }
}

Pattern · Liquid staking derivative

FinancialProduct for liquid staking (Lido / Rocket Pool pattern)

For staking products that mint a derivative (stETH, rETH). Use FinancialProduct with the staking yield as interestRate. Make the derivative token explicit in the description because AI models otherwise conflate it with the underlying.

Common mistakes we flag
{
  "@context": "https://schema.org",
  "@type": "FinancialProduct",
  "name": "Liquid Staked ETH (stETH)",
  "description": "Stake ETH and receive stETH, a liquid derivative that accrues staking rewards via daily rebases. Tradable on DEXs and usable as DeFi collateral.",
  "category": "Liquid staking derivative",
  "interestRate": {
    "@type": "QuantitativeValue",
    "value": 3.4,
    "unitText": "PERCENT_PER_YEAR",
    "valueReference": "Variable APR based on Ethereum validator rewards"
  },
  "feesAndCommissionsSpecification": "Protocol fee: 10% of staking rewards. No staking minimum. No lock-up; unstake via withdrawal queue (typically 1-5 days) or swap stETH on a DEX instantly.",
  "provider": { "@id": "https://example.com/#organization" },
  "audience": {
    "@type": "Audience",
    "audienceType": "ETH holders seeking yield without running a validator"
  }
}

Pattern · NFT marketplace

CryptoExchange + Product hybrid for NFT marketplace

NFT marketplaces sit awkwardly in schema.org. We recommend CryptoExchange for the marketplace itself plus Product schema on individual collection or item pages. supportedAssets becomes the supported chains.

Common mistakes we flag
{
  "@context": "https://schema.org",
  "@type": "CryptoExchange",
  "name": "Example NFT Market",
  "description": "NFT marketplace for digital art, gaming items and collectibles across Ethereum, Polygon and Base.",
  "url": "https://example.com/",
  "currenciesAccepted": ["ETH", "MATIC", "USDC"],
  "supportedAssets": [
    { "@type": "Thing", "name": "Ethereum NFTs (ERC-721, ERC-1155)" },
    { "@type": "Thing", "name": "Polygon NFTs" },
    { "@type": "Thing", "name": "Base NFTs" }
  ],
  "feesAndCommissionsSpecification": "Marketplace fee: 2.5% of sale. Creator royalties enforced on-chain per collection. Gas paid by user."
}

Pattern · Self-custody wallet

SoftwareApplication for a Web3 wallet

For self-custody wallets, hardware wallets and mobile crypto wallets. SoftwareApplication is the right type because the wallet is software, not a financial product. Add operatingSystem and offers explicitly so app store rich results work.

Common mistakes we flag
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Example Wallet",
  "description": "Self-custody multi-chain wallet for Ethereum, Solana, Bitcoin and 30+ EVM networks. Built-in dApp browser and hardware wallet support.",
  "applicationCategory": "FinanceApplication",
  "applicationSubCategory": "Cryptocurrency wallet",
  "operatingSystem": "iOS, Android, macOS, Windows, Linux",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD"
  },
  "featureList": [
    "Self-custody seed phrase storage",
    "Multi-chain support across 30+ EVM networks",
    "WalletConnect v2 dApp integration",
    "Hardware wallet support (Ledger, Trezor)"
  ],
  "publisher": { "@id": "https://example.com/#organization" }
}

Pattern · Centralized exchange

CryptoExchange + Organization for a CEX

For centralized exchanges (Binance, Coinbase, Kraken pattern). CryptoExchange schema with full regulatory disclosure inside feesAndCommissionsSpecification and areaServed. AI models pull jurisdiction info from these fields heavily.

Common mistakes we flag
{
  "@context": "https://schema.org",
  "@type": "CryptoExchange",
  "name": "Example Exchange",
  "description": "Regulated centralized cryptocurrency exchange. Spot trading, margin and futures across 200+ assets. Licensed in EU (MiCA) and registered with FinCEN as an MSB.",
  "url": "https://example.com/",
  "currenciesAccepted": ["USD", "EUR", "GBP", "BTC", "ETH", "USDT", "USDC"],
  "feesAndCommissionsSpecification": "Spot trading: 0.10% maker / 0.20% taker. Volume tiers reduce to 0.00% / 0.04%. Withdrawal fees vary by network. Full schedule at /fees.",
  "areaServed": ["European Union", "United Kingdom", "Australia", "Canada"],
  "provider": { "@id": "https://example.com/#organization" }
}

Pattern · Protocol Organization + founder Person

Organization + Person with full sameAs chain

This is the schema we audit hardest in YMYL terms. Organization with sameAs to GitHub, Twitter, CoinGecko, DefiLlama and audit firm reports. Person founders with their own sameAs chain. Both nest under the @graph for the homepage.

Common mistakes we flag
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#organization",
      "name": "Example Protocol",
      "url": "https://example.com/",
      "logo": "https://example.com/logo.png",
      "sameAs": [
        "https://twitter.com/exampleprotocol",
        "https://github.com/exampleprotocol",
        "https://discord.gg/exampleprotocol",
        "https://www.coingecko.com/en/coins/example",
        "https://defillama.com/protocol/example",
        "https://github.com/exampleprotocol/audits"
      ],
      "founder": { "@id": "https://example.com/team/jane-doe#person" }
    },
    {
      "@type": "Person",
      "@id": "https://example.com/team/jane-doe#person",
      "name": "Jane Doe",
      "jobTitle": "Co-founder & CTO, Example Protocol",
      "description": "Smart contract engineer. Previously security researcher at OpenZeppelin. Lead author of Example Protocol's lending architecture.",
      "sameAs": [
        "https://twitter.com/janedoe",
        "https://github.com/janedoe",
        "https://www.linkedin.com/in/janedoe"
      ],
      "worksFor": { "@id": "https://example.com/#organization" }
    }
  ]
}

A typical token schema finding from a Crawlux audit

This is roughly what each schema issue looks like in the PDF report. Severity rating, root cause, the fix and the JSON-LD snippet ready to ship.

FinancialProduct schema missing on lending market pages

All 14 lending market pages on the domain are missing FinancialProduct JSON-LD. Only generic WebPage schema is present.

Severity High · ranking + AEO impact

Effort ~1 hour · template-able

Pages affected 14 lending markets

→ Recommended fix

Add a FinancialProduct JSON-LD block to each market page using the DeFi Lending pattern from the schema library above. Pull interestRate dynamically from your existing rate oracle. Reference the protocol Organization via @id rather than inlining provider data.

Crawlux vs the alternatives

Three things you might use for crypto schema validation today. Here is what each catches, side by side, on the dimensions that matter for a Web3 site.

Capability Schema.org Validator Google Rich Results Test Ahrefs / Semrush Crawlux
Validates JSON-LD syntactically ✓ Strict ✓ Strict ~ Surface only ✓ Strict
Validates FinancialProduct + CryptoExchange specifically ~ Generic only ✕ Not crypto-aware ✓ Crypto-tuned
Audits whole domain at once ✕ One URL ✕ One URL
Per-page schema coverage map ~
Verifies sameAs URLs return 200
Validates supportedAssets + currenciesAccepted ~ Field exists, no value check
Detects FinancialProduct used where CryptoExchange belongs
Per-token / per-pool entity recognition
JSON-LD vs Microdata vs RDFa coexistence audit ~ ~
SPA / client-side schema render check ~ Single URL
Recommends exact fix with copy-paste snippet
PDF report with prioritized fixes ~ Generic export
Pricing Free Free $99-449/mo subscription $0 / $25 / $49 per audit

How the audit runs

Four sequential checks. The whole module typically completes in under 12 seconds, running in parallel with the seven other audit modules.

  1. Fetch & render

Headless Chrome fetches every URL discovered by the crawl module. JavaScript renders fully. We extract all script[type="application/ld+json"] blocks, plus any inline microdata or RDFa for cross-checking.

  1. Parse & classify

Each JSON-LD block is parsed against schema.org. We classify each entity by @type and tag the page by the schema combinations present. Entities not in schema.org are flagged but not penalized.

  1. Crypto-specific validation

FinancialProduct, CryptoExchange and SoftwareApplication entities run through additional rules tuned for Web3. Missing supportedAssets, malformed interestRate and provider mismatches all flagged here.

  1. sameAs liveness check

Every sameAs URL on Organization and Person entities is fetched. Dead links (404, 410, redirect chains) flagged. CoinGecko, DefiLlama and CoinMarketCap profile URLs cross-checked for entity match.

Token schema FAQ

Common questions from devs and SEO teams shipping schema on crypto sites.

What schema types do crypto sites need?

Most crypto sites need a combination of FinancialProduct (for DeFi protocols, lending, yield, staking), CryptoExchange (for DEXs and CEXs), SoftwareApplication (for wallets and dApps), Organization (for the company entity with sameAs links), Person (for founders and authors) and FAQPage (for documentation and product pages). Each schema type signals different facts to search engines and AI models.

Is FinancialProduct the right schema for a DeFi protocol?

FinancialProduct is the closest schema.org type for most DeFi products, including lending pools, yield vaults and staking products. It supports interestRate, feesAndCommissionsSpecification and provider fields that map well to DeFi. For pure swap/exchange products, use CryptoExchange instead. For protocol governance tokens themselves, the schema community is still settling on best practice; most sites use a combination of FinancialProduct on the product page and Organization on the protocol's main page.

Will Google ignore my schema if I use the wrong type?

Google does not penalize incorrect schema, but it will ignore markup that does not validate or that misuses required fields. The bigger risk is rich result eligibility: a malformed FinancialProduct will not earn the rich result. AI models are even stricter; they tend to ignore JSON-LD that does not parse cleanly, which means your factual data does not influence answers. Validating with Schema.org Validator and Google's Rich Results Test is essential.

Should JSON-LD be in the head or body?

Either works for Google, but head is the standard. Place schema in <script type="application/ld+json"> tags in the document head where possible. For SPA sites where schema is generated client-side, ensure the JSON-LD is rendered before Googlebot times out (within ~5 seconds) or use server-side rendering. Crawlux flags pages where schema is injected late or only client-side.

How do I add schema to a Next.js or React Web3 site?

For Next.js, the cleanest approach is per-page schema using next/head or the App Router's metadata API, with the schema object stringified into a script tag. For React SPAs, use react-helmet-async to inject schema into the document head. The critical thing is that schema must be in the rendered HTML, not just hydrated client-side, otherwise AI crawlers and many SEO tools will miss it.

What is sameAs and why does it matter for crypto?

sameAs is an Organization or Person property that links your entity to its profiles on other sites. For crypto, sameAs should point to your Twitter, GitHub, Discord, CoinGecko, CoinMarketCap, DefiLlama and other recognized authority sources. This is one of the strongest authority signals you can ship and directly influences AI citation likelihood. Crawlux's audit specifically checks each sameAs URL returns 200 and that the linked profile is consistent with your brand.

Can multiple JSON-LD blocks coexist on one page?

Yes. A single page can have multiple JSON-LD script blocks, or a single block with @graph containing multiple entities. The @graph approach is cleaner and usually preferred. A typical DeFi product page might combine FinancialProduct (the product), Organization (the protocol), BreadcrumbList (the navigation) and FAQPage (the product FAQ) in one @graph block. Crawlux validates each entity independently and reports per-entity issues.

Do I need schema if my site already ranks?

Schema is increasingly important for AI search even when traditional SEO is fine. ChatGPT, Perplexity and Claude all use structured data heavily when deciding which sources to cite. A site that ranks #1 in Google can still be invisible in AI answers if its JSON-LD is missing or wrong. For crypto specifically, where the AI search share is growing fast, missing schema increasingly costs traffic that Google rankings alone do not capture.