How to Implement CORD-AEO on Your Website: A Step-by-Step Guide
This is the guide I wish someone had handed me the day I started building the CORD-AEO protocol. If you read why I authored it and want to ship it on your own site, this is the practical walkthrough.
I will use a generic example throughout. A three-person consulting firm called Northgate Advisory. The structure is the same whether you run a consultancy, a law firm, a dealership, a SaaS product, or a hardware company. Adapt the example to your business.
Time to complete: under an hour for a basic implementation.
What You Will Need Before You Start
Three things.
Access to your website's file structure. You need to be able to upload files to your domain root. This means access through your CMS, your hosting control panel, or your developer relationship.
A list of three canonical questions about your business. The questions you want AI engines to quote your business correctly for. Examples: What does this company do? What is their pricing model? Who founded the company? More on choosing questions in the next post in this series.
The hosted validator URL. Bookmark cordspec.org/aeo/validate. You will use it twice before going live.
Optional: Python 3.8+ installed locally if you want to run the validator yourself. pip install cord-aeo-validator.
Step One: Create the Directory
CORD-AEO uses the /.well-known/ convention, the same convention that powers SSL verification, security.txt, and several other web standards.
Create this directory structure at the root of your website:
your-domain.com/
└── .well-known/
└── cord-aeo/
├── index.json
├── what-does-the-company-do.json
├── what-is-the-pricing-model.json
└── who-founded-the-company.json
The directory must be served from the root of your primary domain. CORD-AEO envelopes at subdomain.your-domain.com/.well-known/cord-aeo/ will not be discovered by engines looking at the primary domain.
If your hosting uses Apache, add a line to your .htaccess file so JSON files in the directory are served with the right MIME type:
<Directory ".well-known/cord-aeo">
AddType application/json .json
</Directory>
If you are on Nginx, ensure your config block includes:
location ~ ^/\.well-known/cord-aeo/.*\.json$ {
default_type application/json;
add_header Content-Type application/json;
}
If you are on Vercel, Netlify, or another static host, no server config is needed. JSON files served as static assets work out of the box.
Step Two: Write Your First Envelope
An envelope is a single JSON file. One canonical question per file. Each file follows the same structure.
Here is a complete first envelope for our example consultancy, answering the question, what does the company do:
{
"cord_aeo_version": "0.1",
"envelope_id": "northgate-what-do-you-do",
"question": {
"canonical": "What does Northgate Advisory do?",
"variants": [
"What is Northgate Advisory?",
"What does Northgate do?",
"What services does Northgate Advisory provide?",
"Tell me about Northgate Advisory"
]
},
"answer": {
"canonical_short": "Northgate Advisory is a three-person strategy consultancy that helps mid-market technology companies design their go-to-market operations. We focus on the operational layer between strategy and execution.",
"required_claims": [
"three-person consultancy",
"strategy consulting",
"mid-market technology companies",
"go-to-market operations"
]
},
"metadata": {
"published": "2026-06-04T10:00:00Z",
"last_verified": "2026-06-04T10:00:00Z",
"valid_until": "2026-12-04T10:00:00Z",
"publisher": "Northgate Advisory",
"publisher_url": "https://northgate-advisory.example.com"
},
"schema_org_bridge": {
"@context": "https://schema.org",
"@type": "Organization",
"name": "Northgate Advisory",
"description": "A three-person strategy consultancy helping mid-market technology companies design their go-to-market operations.",
"url": "https://northgate-advisory.example.com",
"numberOfEmployees": 3
}
}
Save this file as what-does-the-company-do.json in your /.well-known/cord-aeo/ directory.
The five sections matter in specific ways. Let me walk through each one.
The Question Block
The canonical field is the exact question you want AI engines to recognize. Variants are common ways users actually phrase the same question. The protocol expects three to five variants. More is fine. Fewer reduces the engine's ability to match incoming queries.
The Answer Block
The canonical_short answer is what you want the AI engine to return when asked. Keep it under 300 characters when possible. Engines paraphrase. The shorter and tighter the canonical, the more likely your phrasing survives the reformulation.
Required claims is the most important field in the envelope. These are the facts that must survive any paraphrase. If the model reformulates your answer and any required claim is missing or contradicted, your Envelope Fidelity Score drops. Write required claims as short, specific phrases. Verifiable facts, not adjectives.
The Metadata Block
Published is when the envelope was first created. Last_verified is when you last confirmed the answer is still accurate. Valid_until is when the engine should consider the envelope potentially stale and refresh. Six months is a reasonable default. Update last_verified each time you confirm the envelope still holds.
The Schema.org Bridge
This is what makes CORD-AEO work today. Most AI engines do not yet fetch /.well-known/cord-aeo/ directly. They do read Schema.org structured data. By including a Schema.org JSON-LD block inside every CORD-AEO envelope, you give engines a path to the same information using infrastructure they already read.
The bridge is not optional. It is how the protocol delivers value today, before native consumption is widespread.
Step Three: Create the Index
The index file lists all envelopes available at your site. It lives at /.well-known/cord-aeo/index.json.
{
"cord_aeo_version": "0.1",
"publisher": "Northgate Advisory",
"publisher_url": "https://northgate-advisory.example.com",
"envelopes": [
{
"id": "northgate-what-do-you-do",
"question_canonical": "What does Northgate Advisory do?",
"path": "/.well-known/cord-aeo/what-does-the-company-do.json"
},
{
"id": "northgate-pricing",
"question_canonical": "What is Northgate Advisory's pricing model?",
"path": "/.well-known/cord-aeo/what-is-the-pricing-model.json"
},
{
"id": "northgate-founding",
"question_canonical": "Who founded Northgate Advisory?",
"path": "/.well-known/cord-aeo/who-founded-the-company.json"
}
],
"last_updated": "2026-06-04T10:00:00Z"
}
The index is what an engine fetches first to discover what envelopes you publish. Without an index, engines have no map of your canonical answers.
Step Four: Validate Before Going Live
Open cordspec.org/aeo/validate in a new tab.
Paste your domain in the validator field. The validator fetches your /.well-known/cord-aeo/index.json. It fetches each envelope listed in the index. It runs the full conformance suite against each one.
You will get a report with three sections.
Structural conformance. Whether every envelope has the required fields, valid JSON, correct types. If any envelope fails structural validation, fix it before continuing. The validator will tell you exactly which field is wrong and why.
Schema.org bridge validation. Whether the embedded Schema.org JSON-LD validates against Schema.org's own validator. The validator runs the bridge through Schema.org Validator automatically. Bridge errors are the most common issue in first implementations.
Envelope Fidelity Score baseline. The EFS calculation for each envelope, assuming a perfect paraphrase. This is the maximum possible score your envelope can achieve. If the baseline is below 0.85, your required claims are likely too long, too vague, or in conflict with the canonical answer.
Address every error before going live. The validator is what makes CORD-AEO enforceable.
Step Five: Test From Outside Your Network
Once the validator gives you a clean report, do one more check. Open a private browser window. Navigate to your-domain.com/.well-known/cord-aeo/index.json directly.
You should see your index file render as JSON. If you see a 404, your hosting is not serving the directory correctly. If you see the file contents as HTML or with garbled formatting, your MIME type configuration is wrong.
Test each envelope file the same way. Direct URL. Private window. JSON response.
If all three checks pass, you are live.
Step Six: Run the AI Engine Baseline Test
Now go ask the AI engines the canonical questions you just published envelopes for.
Open ChatGPT, Claude, Perplexity, and Google's AI in four tabs. Ask each one the canonical question. Read the responses. Compare each response to your canonical answer.
Note what is missing. Note what is wrong. Note which required claims survived the paraphrase and which did not.
This is your starting baseline. Today the protocol works through the Schema.org bridge, not native consumption. The bridge lets engines that crawl your structured data read your canonical answer as Schema.org Organization or FAQPage data. The change in engine output is gradual, not immediate.
Check the baseline again in two weeks. Then monthly. The Envelope Fidelity Score becomes meaningful when you can measure your actual engine responses against your canonical answer over time.
Common Mistakes I See
Five things I see go wrong in first implementations.
Required claims too long. A required claim is a phrase the model must preserve through paraphrase. If the claim is a full sentence, the model will reformulate it and lose the score. Keep required claims under five words when possible.
Canonical answer too long. Engines paraphrase. If your canonical is 600 characters, the model will compress it to 200. Whatever was in the compressed-out section is lost. Keep the canonical under 300 characters and put the most important claims first.
Missing Schema.org bridge. Without the bridge, your envelope provides no value today. Native consumption is not widespread yet. The bridge is how the protocol delivers value in v0.1.
Variants too similar. If all your question variants are minor rewordings of the canonical, you have not covered the actual ways users phrase questions. Look at how real people would ask. Look at "people also ask" boxes in search results for inspiration.
No verification process. Last_verified should be updated whenever you confirm the answer still holds. If you publish envelopes and never revisit them, they become stale and the protocol loses credibility. A quarterly review is the minimum.
What to Do Next
Three things, in order.
First, publish three to five envelopes for the questions that matter most to your business. The next post in this series walks through how to choose your first three canonical questions.
Second, sample the engine responses monthly. Track which engines represent you well and which do not. This data is what you act on.
Third, update your envelopes as your business changes. Pricing changes, services change, team changes. The envelope is a living artifact, not a one-time publication.
If you publish a CORD-AEO envelope to your site, send me a link. I want to track adoption beyond my own deployment. The protocol becomes a real standard when the production deployment count passes one.
Structure before tools. Strategy before speed. Systems before scale.
The AI Operator Framework is the methodology for designing, governing, and scaling AI operations inside a business, including the citation fidelity layer most companies skip. Explore the full framework at JamilAshkar.com/framework. Start with the free course at JamilAshkar.com/course.