NEWWorld's first AI visibility audit tool for Web3 is live.Run free audit →
Tutorial 04 · 30 minutes · Trust signals

Add Person and Organization schema for E-E-A-T.

The third highest-impact fix after FinancialProduct schema and AI crawler access. Add Person schema for your named team members and Organization schema for the project entity. AI engines weight identity signals heavily for YMYL crypto content. By the end of this tutorial your team pages and About section will surface as structured data AI engines can cite confidently.

// Why E-E-A-T matters for crypto

Crypto is YMYL by default.

Google calls them Your Money or Your Life pages. Every crypto site is YMYL because every crypto site affects financial decisions. The standard Google applies to a token page is the same standard it applies to a bank: prove you are who you say you are, prove you can be trusted with the user's money. Most crypto sites fail this test because 78% have no published team identity and 64% have no audit-firm citation. Adding E-E-A-T schema is the structural fix.

// Before you start

What you need.

  • A team page or About page on your site. If you do not have one, the tutorial includes a section on building one.
  • Verifiable LinkedIn or X profiles for at least 3 team members. Real people with real public profiles. Anon team members do not get Person schema (they break the trust signal rather than support it).
  • 30 minutes. Mostly spent collecting the sameAs URLs and audit firm links. The schema build itself takes 5 minutes.

// Step 1 of 6

Collect the identity data.

For each named team member, gather: full name, role/title, a short bio (1-2 sentences), URL of their photo on your site, and a list of verifiable sameAs URLs (LinkedIn, X/Twitter, GitHub, personal website). For the Organization, gather: project name, founding date, headquarters location (if disclosed), founder names (cross-reference to Person schema), and the project's sameAs graph (X, GitHub, Discord, Telegram, Etherscan if applicable, CoinGecko if applicable).

For audit-firm citations, gather: auditor name, audit date, audit report URL, and the scope audited. Audit citations live in a separate audit-related Organization schema graph but they connect through the project's Organization entity.

// Step 2 of 6

Generate Person schema for each team member.

Use Crypto Schema Generator with Person selected. Output template for a single team member:

person-schema.json
{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Maria Santos",
  "jobTitle": "Chief Technology Officer",
  "worksFor": {
    "@type": "Organization",
    "name": "Example Protocol",
    "url": "https://example.io/"
  },
  "description": "Maria leads protocol engineering. Previously security lead at ConsenSys, smart contract audits at Trail of Bits.",
  "image": "https://example.io/team/maria-santos.jpg",
  "sameAs": [
    "https://www.linkedin.com/in/maria-santos-protocol/",
    "https://twitter.com/mariasantos",
    "https://github.com/maria-santos"
  ]
}

Repeat for each named team member. Three to five Person entries is the right starting point. Adding 30 Person entries dilutes the signal rather than amplifying it; focus on the public-facing team that anchors the project identity.

// Step 3 of 6

Generate Organization schema for the project.

Organization is the parent entity. Every Person schema links up to it via worksFor. The token's FinancialProduct schema links up to it via provider. Done right, the three schema types form a graph that AI engines can traverse.

organization-schema.json
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Example Protocol",
  "url": "https://example.io/",
  "logo": "https://example.io/logo.png",
  "foundingDate": "2023-09-15",
  "founders": [
    { "@type": "Person", "name": "Maria Santos" },
    { "@type": "Person", "name": "David Chen" }
  ],
  "sameAs": [
    "https://twitter.com/exampleprotocol",
    "https://github.com/example-protocol",
    "https://discord.gg/exampleprotocol",
    "https://t.me/exampleprotocol",
    "https://www.coingecko.com/en/coins/example",
    "https://etherscan.io/address/0xabcdef..."
  ]
}

// Step 4 of 6

Add audit-firm citations.

Smart contract audit citations are a YMYL trust signal worth 8-12 points in median observed lift. Add them as a structured list on your About or Security page. Each audit is its own Organization (the auditor) with the audit itself referenced by date and report URL.

audit-citation.json
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Smart contract audit by Trail of Bits, March 2026",
  "author": {
    "@type": "Organization",
    "name": "Trail of Bits",
    "url": "https://www.trailofbits.com/"
  },
  "datePublished": "2026-03-12",
  "url": "https://example.io/audits/trail-of-bits-2026-03.pdf",
  "about": {
    "@type": "Organization",
    "name": "Example Protocol"
  }
}

// Step 5 of 6

Deploy the schema bundle.

All Person, Organization and audit Article schema goes in the head of your About / Team / Security pages. Wrap each in a script tag of type application/ld+json. You can combine multiple schema types into a single @graph array in one script tag if you prefer, or use one script per schema type. Both work.

// Step 6 of 6

Validate and re-audit.

Three checks in order:

  1. Google Rich Results Test. Confirm Google parses the schema without errors.
  2. LinkedIn URL verification. Click each sameAs LinkedIn URL. Confirm the profile exists and lists the role correctly. AI engines cross-check claimed identity against the sameAs profiles; broken or fake links damage trust signals.
  3. Crawlux audit re-run. Expected: Trust score (C-group analyzers) climbs 20-35 points. AI Visibility climbs 6-10 points (downstream lift from identity). Overall score climbs 8-14 points.

// After this tutorial

What to do next.

  • For ongoing cite-rate tracking after the three high-impact fixes, run Tutorial 05.
  • For dev teams who want automated re-audits on every deploy, run Tutorial 07.

// 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