NEWWorld's first AI visibility audit tool for Web3 is live.Run free audit →
PLAYBOOK Schema Last reviewed

Migrate Organization Schema to CryptoExchange on Exchange Pages

Less than 15% of CEXes use CryptoExchange schema. Most ship generic Organization. This migration enables featured snippet eligibility on "crypto exchange" queries and 3-4x more AI engine citations.

Time
45-60 minutes
Difficulty
Beginner
Impact
High

Why this matters

Before state (what bad looks like)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Example Exchange",
  "url": "https://example-exchange.com",
  "logo": "https://example-exchange.com/logo.png"
}
</script>

Step-by-step

Step 1: Inventory all exchange-page URLs

Identify every page that describes the exchange itself: homepage, /about/, /security/, jurisdiction-specific pages (/us/, /uk/, /eu/), per-asset trading pages (/trade/btc-usd/). The homepage and jurisdiction-specific pages need the full CryptoExchange schema. Per-asset trading pages get ExchangeRateSpecification stacked on the parent.

Step 2: Document your fee structure as structured data

CryptoExchange schema needs feeStructure as a PriceSpecification or QuantitativeValue, not a plain string. If your fees are tiered (30-day volume thresholds), use multiple Offer entries with eligibleQuantity. If flat, single PriceSpecification works.

"feeStructure": {
  "@type": "PriceSpecification",
  "description": "Maker 0.10%, Taker 0.20%",
  "eligibleQuantity": {
    "@type": "QuantitativeValue",
    "minValue": 0,
    "maxValue": 10000,
    "unitCode": "USD"
  }
}

Step 3: Build (or link to) your Proof of Reserves page

hasProofOfReserves should be a real URL pointing to a dedicated PoR page. If you don't have one yet, build it before migrating schema. Real PoR pages have: audit firm name, attestation date current to last quarter, methodology, links to PDF reports. See the dedicated playbook on building a PoR page.

Step 4: List jurisdictions in areaServed

Use ISO country codes or named Country entities. AI engines use this when answering "is X exchange available in my country" queries. List every jurisdiction where you legally operate. If you exclude jurisdictions (e.g., US-restricted features), document that elsewhere on the page.

"areaServed": [
  {"@type": "Country", "name": "United States"},
  {"@type": "Country", "name": "United Kingdom"},
  {"@type": "Country", "name": "Singapore"}
]

Step 5: Override CMS-default Organization schema

Most CMSes auto-emit Organization schema on the homepage. Strip it before adding CryptoExchange to avoid duplicate schemas describing the same entity. WordPress with RankMath:

<?php
add_filter('rank_math/snippet/rich_snippet_organization_entity', function($entity) {
    if (is_front_page() || is_page('about')) {
        return false;
    }
    return $entity;
});

Step 6: Inject CryptoExchange schema via @graph

Add custom JSON-LD using the @graph wrapper to stack CryptoExchange + BreadcrumbList + FAQPage cleanly. Use the "After state" example above as your template. Place in <head> or end of <body> (both work).

Step 7: Validate across three validators

Schema.org Validator first (syntax). Then Bing Markup Validator (strict parsing, important because ChatGPT uses Bing for retrieval). Then Google Rich Results Test (eligibility). Pass all three before deploy.

FREE WEB3 AUDIT

See where this playbook applies to your site.

Run a free Crawlux audit before you start the playbook. It tells you which fixes are most urgent.

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",
  "@graph": [
    {
      "@type": "CryptoExchange",
      "@id": "https://example-exchange.com/#exchange",
      "name": "Example Exchange",
      "url": "https://example-exchange.com",
      "logo": {"@type": "ImageObject", "url": "https://example-exchange.com/logo.png"},
      "description": "Spot and derivatives crypto exchange operating in 47 jurisdictions.",
      "currenciesAccepted": ["USD", "EUR", "GBP", "USDT", "USDC"],
      "paymentAccepted": ["Bank Transfer", "Credit Card", "Cryptocurrency"],
      "areaServed": [
        {"@type": "Country", "name": "United States"},
        {"@type": "Country", "name": "United Kingdom"}
      ],
      "feeStructure": {
        "@type": "PriceSpecification",
        "description": "Maker 0.10%, Taker 0.20%, tiered by 30d volume"
      },
      "hasProofOfReserves": "https://example-exchange.com/security/proof-of-reserves/",
      "termsOfService": "https://example-exchange.com/terms/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {"@type": "ListItem", "position": 1, "name": "Home", "item": "https://example-exchange.com/"}
      ]
    }
  ]
}
</script>

How to validate the fix

Common pitfalls

Pitfall

Treating CryptoExchange as a separate type from Organization

CryptoExchange extends FinancialProduct extends Service. It's a different inheritance branch from Organization. Don't emit both for the same entity; pick CryptoExchange and drop Organization on exchange pages.

Pitfall

Missing hasProofOfReserves on a custodial exchange

Post-FTX, this is table stakes. Without it, AEO systems flag your trust signals as incomplete. Build the PoR page first, then migrate schema.

Pitfall

Using string instead of structured data for feeStructure

Plain strings fail validation. Use PriceSpecification or QuantitativeValue. Tiered fees as multiple Offer entries.

Pitfall

Skipping areaServed

AI engines use areaServed for geo-specific queries. Without it, your exchange doesn't get cited for "available in [country]" questions. List every jurisdiction explicitly.

Pitfall

Forgetting the BreadcrumbList

BreadcrumbList stacks naturally with CryptoExchange in the @graph. Skipping it leaves a small but real ranking signal on the table.

If something breaks: rollback

Revert CMS filter changes to restore Organization schema. Remove custom JSON-LD injection. Clean rollback within minutes. The PoR page (if built fresh for this) can stay; it's valuable independently.

Run a free Crawlux audit on this fix

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

Run free audit →

FAQ

Does CryptoExchange schema work for DEXes?

Yes. CryptoExchange doesn't care if you're custodial or non-custodial. Set provider to your DAO or company, currenciesAccepted to supported assets, areaServed to "Global" if no geo restrictions. Schema-correct DEX listings get cited at the same rate as CEXes.

Should I add CryptoExchange to my homepage or a /trade/ page?

Whichever page Google considers your primary entity. For most exchanges this is the homepage. If your /trade/ page outranks the homepage, put it there. Add minimal Service or BreadcrumbList to the other page.

How do I handle multi-jurisdiction differences?

Build separate /us/, /uk/, /eu/ pages with hreflang tags. Each gets its own CryptoExchange schema with that jurisdiction's specific feature set in additionalProperty (e.g., supported assets that vary by jurisdiction). Areas served = just that jurisdiction.

Is this safe for a regulated exchange?

Yes. Schema is metadata describing your service publicly. It doesn't add any new disclosures beyond what's already on your site. If your fee structure is public, schema-tagging it changes nothing legally.

Will I lose existing branded query rankings?

No. Branded queries are extremely sticky. Schema migrations don't affect them. The lift comes on generic queries ("crypto exchange", "safest exchange", comparison terms) where schema-correct exchanges outperform schema-broken ones.

Related playbooks

Pillar guides

Audit modules

RUN YOUR FIRST AUDIT

Run the playbook against a real audit.

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

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

Audit this fix → Free audit