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:
{
"@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:
<!-- 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:
- Token Schema Tester re-run. Paste the same URL. Confirm zero validation errors. If errors remain, fix them per the tester output and redeploy.
- 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).
- 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.
- Run Tutorial 03 (Allow AI crawlers) if your robots.txt still blocks AI engines — the schema fix only matters if engines can fetch the page.
- Run Tutorial 04 (E-E-A-T schema) to add Person and Organization context that compounds with the FinancialProduct schema.
- For ongoing tracking of cite-rate lift, run Tutorial 05 (Track AI citations).
// Related
More reading.
- Token Schema guide — the methodology behind FinancialProduct, field by field
- Token Schema Audit module — validates schema across every token page on a site
- Crypto Schema Generator — for new pages
- Token Schema Tester — for existing pages
- Migration playbook — for sites moving from Article schema to FinancialProduct
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
- ✓Schema.org Validator: 0 errors on the speakable property.
- ✓DOM check: every cssSelector in speakable resolves to actual DOM elements on the page.
- ✓AEO baseline test: capture citation rate before deploy across top 10 queries.
- ✓AEO post-deploy test: run same 10 queries 14 days after deploy. Expect 30-50% lift in citation count.
- ✓Voice test: ask Google Assistant a question your FAQ answers. Voice answer should pull from the Speakable-wrapped section.
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
