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:
{
"@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.
{
"@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.
{
"@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:
- Google Rich Results Test. Confirm Google parses the schema without errors.
- 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.
- 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.
- YMYL and E-E-A-T audit module — the methodology
- Crypto Schema Generator — the tool used in this tutorial
- AEO for Web3 guide — broader context on identity signals
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
