NEWWorld's first AI visibility audit tool for Web3 is live.Run free audit →
Tutorial 02 · 25 minutes · Schema fix

Fix FinancialProduct schema on a token page.

The single highest-impact schema fix for crypto sites. Walk a token page from generic Product schema (or no schema at all) to validated FinancialProduct schema. By the end of this tutorial you will have working JSON-LD on a real token page and a re-run audit showing the score lift.

// Why this fix matters most

The 2.4x cite-rate gap.

Across the Crawlux audit corpus, pages with valid FinancialProduct schema are cited by AI search engines (ChatGPT, Perplexity, Claude) at 2.4x the rate of pages without it. The signal works. The problem is that 73% of crypto token pages either have no FinancialProduct schema or have schema with at least one validation error. Closing this gap is the fastest path to AEO citation lift.

// Before you start

What you need.

  • A token page on your site. Any page that represents a token: an ERC-20, an SPL token, an L1 native token, a wrapped asset. The page should have at minimum a name, a ticker and a contract address.
  • Access to deploy a change. You will be adding JSON-LD to the page head. This usually means editing a template (if you have templated token pages) or hand-editing a single page if it is bespoke. Either way you need to ship the change before validation.
  • 25 minutes. Generating the schema takes 2 minutes. Validation takes 2 minutes. The bulk of the time is deploying and running the post-deploy audit.

// Step 1 of 5

Check what schema your token page has now.

Open Token Schema Tester. Paste your token page URL. Run it. The tester returns one of three states:

  • No schema detected. The page has no JSON-LD at all. Most common state. Skip Step 2 and go directly to Step 3.
  • Generic Product schema. The page has Product schema but not FinancialProduct. This works for an ecommerce product but not for a token. Step 2 walks the migration.
  • FinancialProduct with validation errors. Schema exists but at least one field is wrong. Step 2 walks the fix.

// Step 2 of 5 · (skip if no schema)

Identify the field-level issues.

If the tester flagged validation errors, it lists each one with the field name and the expected value pattern. Common errors:

  • Wrong @type. Product should be FinancialProduct. Schema.org accepts both but FinancialProduct gets crypto-relevant rich-results treatment.
  • Missing identifier. Token contract address belongs in the identifier field. Without it AI engines cannot link the schema to on-chain data.
  • tickerSymbol missing or wrong. Use the canonical ticker that matches CoinGecko. ETH not Ethereum, USDC not USD-Coin.
  • No provider. Identify the issuing project as an Organization. Without provider context the token floats in schema-space disconnected from the entity behind it.

// Step 3 of 5

Generate the new schema.

Open Crypto Schema Generator. Select FinancialProduct as the schema type. Fill in the fields:

name
The token's full name as it appears canonically (USD Coin, not USDC).
tickerSymbol
The ticker as it appears on CoinGecko (USDC).
identifier
The contract address. Use the canonical chain prefix (eth: for Ethereum mainnet, sol: for Solana, etc.).
provider
The issuing entity as an Organization. Include url and sameAs links to Twitter, GitHub, Etherscan.
category
Token category. Use canonical values: stablecoin, governance, utility, security, wrapped.

The Generator outputs ready-to-paste JSON-LD. Example output for a real token:

financialproduct-usdc.json
{
  "@context": "https://schema.org",
  "@type": "FinancialProduct",
  "name": "USD Coin",
  "alternateName": "USDC",
  "tickerSymbol": "USDC",
  "identifier": "eth:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  "category": "stablecoin",
  "provider": {
    "@type": "Organization",
    "name": "Circle Internet Financial",
    "url": "https://www.circle.com/",
    "sameAs": [
      "https://twitter.com/circle",
      "https://www.coingecko.com/en/coins/usd-coin",
      "https://etherscan.io/token/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
    ]
  },
  "description": "USDC is a fully-reserved stablecoin pegged 1:1 to the US dollar.",
  "url": "https://example.io/token/usdc"
}

// Step 4 of 5

Deploy the schema to your page.

Paste the JSON-LD into your token page head, wrapped in a script tag:

page-head.html
<!-- Place in <head>, after canonical and before stylesheets -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FinancialProduct",
  ...
}
</script>

If your token pages are templated (which they should be for any project with more than 5 tokens), edit the template once. The change propagates to every page. Deploy as you normally would.

// Template-level fix saves days

If you have 200 token pages all sharing one template, fixing the template once equals 200 page fixes. The Token Schema Audit module flags template-level issues specifically so you know the scope is one fix not 200 fixes.

// Step 5 of 5

Validate post-deploy.

Run three checks in order:

  1. Token Schema Tester re-run. Paste the same URL. Confirm zero validation errors. If errors remain, fix them per the tester output and redeploy.
  2. Google Rich Results Test. Run the URL through search.google.com/test/rich-results. Confirm Google parses the schema cleanly (Crawlux validates against the same spec but a second opinion helps).
  3. Crawlux audit re-run. Run the full audit again. The Schema sub-score should climb by 10-20 points. The B01 analyzer should no longer flag the token page. Overall score lift typically 8-15 points within 24 hours of deploy.

// Expected results

What success looks like.

Beta-cohort sites that shipped FinancialProduct schema fixes saw the following pattern within 21 days: Schema sub-score climbed 25 points median (from roughly 45 to 70 baseline). AI Visibility sub-score climbed 12 points median (downstream of schema). Overall score climbed 12-18 points. AI engine cite rate (measured by AI Citation Checker) doubled from a baseline of roughly 22% to 44% post-fix.

// After this tutorial

What to do next.

// Related

More reading.

FREE WEB3 AUDIT

Run a free Crawlux audit and apply this tutorial.

Run a free Crawlux audit and follow the tutorial sequence start to finish.

Free first audit · No signup · 60 seconds · Full PDF report

After state (what good looks like)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [".faq-answer", ".quick-answer"]
  },
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Is Aave safe to use?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Aave has been audited 12+ times..."
      }
    }
  ]
}
</script>

How to validate the fix

Common pitfalls

Pitfall

Adding Speakable without FAQPage

Speakable can be added to Article or other types but works best paired with FAQPage. If your page doesn't have FAQPage yet, add it first. Speakable on a bare HTML page does little.

Pitfall

CSS selector that doesn't exist

If cssSelector points to .faq-answer but your DOM uses .accordion-content, Speakable resolves to nothing. Always validate that the selector actually matches DOM elements.

Pitfall

Pointing Speakable at the entire page

Don't use cssSelector: ["body"] or similar broad selectors. Speakable should point to specific answer-bearing elements. Broad selectors get ignored by parsers.

Pitfall

Speakable on pages without good answers

Speakable amplifies what's on the page. If your answers are vague or marketing-driven, Speakable amplifies vagueness. Make sure FAQ answers are concrete before adding Speakable.

Pitfall

Forgetting to update Speakable when content changes

If you redesign your FAQ block and change the class names, update the Speakable cssSelector. Stale selectors become invisible.

If something breaks: rollback

Remove the speakable property from FAQPage schema. Page falls back to regular FAQPage behavior within minutes. Citation rate may regress but no risk to site functionality.

Run a free Crawlux audit

Crawlux validates the schema, technical and AEO fixes from this tutorial automatically. Free tier on one domain.

Run free audit →

FAQ

Does Speakable work outside FAQPage?

Yes. Speakable can be added to Article, BlogPosting, NewsArticle and most schema types. The pattern is the same: SpeakableSpecification with cssSelector or xpath pointing to the most-quotable sections of the page.

Will Speakable affect Google rich results?

Speakable isn't in Google's primary rich result types yet but it's parsed and used for voice answers. The main beneficiary is AI engines (ChatGPT, Perplexity, Claude) which weight Speakable-marked content higher for citations.

Can I use Speakable for marketing copy?

Technically yes but it backfires. AI engines extract Speakable content verbatim. If your marketing copy is promotional, AI engines may extract it but flag it as biased. Use Speakable for factual answers, not marketing claims.

How specific should cssSelector be?

Specific enough to match only the answer-bearing elements. .faq-answer is good. .content is too broad. Use class names dedicated to the answer sections, not generic content classes.

Does Speakable have a length limit?

No formal limit but practical limit is 1-3 sentences per Speakable section. AI engines extract these as direct answers; longer than 3 sentences typically gets truncated. Optimize answers to 1-3 sentences for best extraction.

Related tutorials

Pillar guides

Audit modules

RUN YOUR FIRST AUDIT

Run the tutorial against a real audit.

Get a free Crawlux audit report and use it as the baseline for the work in this tutorial.

Free first audit · No signup · 60 seconds · Full PDF report

Audit this fix → Free audit