SEO.MD
THE OPEN STANDARD FOR AI ENGINE OPTIMIZATION
01.OVERVIEW
SEO.md is a plain-text protocol specification file that enables founders, developers, and content teams to declare their brand's AI search intent in a version-controlled, human-readable format.
It is part of a growing family of open standards — alongside CLAUDE.md, AGENTS.md, and DESIGN.md - that make machine-readable context a first-class part of every software project.
SEO.md separates what the founder declares from what the platform writes back. This dual-layer model ensures that strategic intent is always human-authored, while analytical intelligence is machine-populated.
02.FILE FORMAT
An SEO.md file consists of two parts:
NO PREFIX
Fields without a prefix are owned by the founder. Edit freely. Commit to version control.
_ANALYSIS: PREFIX
Fields prefixed with _analysis: are written by the connected platform. Do not edit manually.
The file uses Markdown headings (##) as section delimiters, with YAML-formatted fields under each section. This makes it readable in any text editor, diff-able in any Git client, and parseable by any YAML parser.
# SEO.md
## {{brand}}
### spec v1.0 | https://seomd.dev
#### generated: {{date}}
## FIELD OWNERSHIP
### no prefix = founder declares (you own this)
### _analysis: = platform writes back (do not edit manually)
## Site
site:
type: saas # blog | saas | ecommerce | local | marketplace
domain: {{domain}}
canonical: https://{{domain}}
locale: en-US
launched: null # YYYY-MM-DD03.SITE TYPES
The site.type field determines which page templates and intent patterns the CLI scaffolds. Each type has a different required page set.
| Type | Value | Required Pages | Primary Use Case |
|---|---|---|---|
Blog | blog | homepage, category, article, author, about | Content publishers, newsletters |
SaaS | saas | homepage, features, pricing, comparison, blog | Software products, platforms |
eCommerce | ecommerce | homepage, category, product, cart, checkout | Online stores |
Local | local | homepage, services, location, reviews | Local businesses |
Marketplace | marketplace | homepage, listing, search, seller | Two-sided platforms |
04.SITE
Core site metadata. The site section identifies the type, domain, canonical URL, and locale of the project.
site.typestringrequiredSite type identifier. One of: blog, saas, ecommerce, local, marketplace.
site.domainstringrequiredThe primary domain, without protocol (e.g. example.com).
site.canonicalurlrequiredThe canonical HTTPS URL (e.g. https://example.com).
site.localestringoptionalBCP 47 locale code. Default: en-US.
site.launcheddateoptionalLaunch date in YYYY-MM-DD format.
05.IDENTITY
Brand identity and social presence. Defines how your brand is named, positioned, and discovered across platforms.
identity.brandstringrequiredThe canonical brand name exactly as it should appear in citations.
identity.taglinestringoptionalA short brand tagline, 10 words or fewer.
identity.social.twitterstringoptionalTwitter/X handle (without @).
identity.social.linkedinurloptionalLinkedIn company page URL.
identity.social.githubstringoptionalGitHub organization or user handle.
identity.schema_org_typestringoptionalSchema.org type. Default: Organization.
06.KEYWORDS
Keyword strategy. Define your primary keyword, secondary terms, negative keywords that dilute your intent signal, and competitor terms for monitoring.
keywords.primarystringrequiredThe single most important keyword your brand must own in AI search results.
keywords.secondarystring[]optionalSupporting keyword cluster. 3–10 terms recommended.
keywords.negativestring[]optionalTerms that dilute intent signal. Platform uses these to filter noise from analysis.
keywords.competitor_termsstring[]optionalCompetitor brand terms to monitor for citation displacement.
keywords.category_termsstring[]optionalUnbranded category queries (e.g., "best ai seo tools").
keywords.long_tailstring[]optionalLong-tail keyword variations.
keywords._analysisobjectoptionalPlatform-populated search volume, intent type, trend data, and recommendations.
← platform writes back07.INTENT
AI query intent mapping. List the exact queries your buyers type into AI engines across five intent categories. These are fed directly to the citation analysis engine.
intent.informationalIntentBlockrequiredPriority: critical. Queries seeking information about your category (e.g., "what is AI SEO").
intent.comparisonIntentBlockoptionalQueries comparing your brand to competitors.
intent.transactionalIntentBlockoptionalQueries with purchase or trial intent.
intent.reputationalIntentBlockoptionalQueries about brand credibility, reviews, problems.
intent.categoryIntentBlockoptionalUnbranded category-level queries (e.g., "best SEO tools 2026").
intent._analysisobjectoptionalPlatform-populated citation rates, gap scores, and competitor citations per intent category.
← platform writes back08.PAGES
Page inventory and citation targets. List every page that should appear in AI search results with its target keyword and status.
pages.site_typestringrequiredMirrors site.type. Used by the CLI to scaffold the required page set.
pages.requiredPageDef[]requiredArray of page definitions. Each has: id, url, primary_keyword, status (live|draft|planned), priority.
pages._analysisobjectoptionalPlatform analysis: citation rates per page, missing pages, and build order recommendations.
← platform writes back09.COPY
Content quality standards. Declare minimum word counts, reading level targets, and structural copy rules that the validator checks against.
copy.h1_contains_primary_keywordbooleanoptionalRequire H1 to contain the page's primary keyword. Default: true.
copy.meta_description_lengthstringoptionalTarget meta description length range (e.g., "150-160").
copy.min_word_countobjectoptionalMinimum word counts by page type: homepage, feature_page, blog_post, comparison_page.
copy.reading_levelnumberoptionalTarget Flesch-Kincaid grade level. Default: 8.
10.STRUCTURE
Content structure rules for AI scannability. These rules are checked by the validator and inform the platform's content gap analysis.
structure.answer_firstbooleanoptionalRequire a direct answer in the first 50 words of each page. Default: true.
structure.faq_section_requiredbooleanoptionalRequire a FAQ section on all key pages. Default: true.
structure.faq_minimum_questionsnumberoptionalMinimum number of FAQ entries. Default: 6.
structure.statistics_per_pagenumberoptionalMinimum data points with citations per page. Default: 2.
structure.heading_hierarchystringoptionalHeading hierarchy enforcement. Options: strict (H1>H2>H3, no skipping).
11.AUTHORITY
E-E-A-T signals. Declare your Experience, Expertise, Authority, and Trust signals so the platform can assess and improve your citation authority score.
authority.cite_sourcesbooleanoptionalRequire links to primary sources in all content. Default: true.
authority.expert_quotesbooleanoptionalInclude expert quotes in content. Default: false.
authority.eeat_signals.experiencestringoptionalDescription of your experience signal (e.g., "5 years running SEO campaigns").
authority.eeat_signals.expertisestringoptionalDescription of your expertise signal.
authority.eeat_signals.authoritystringoptionalDescription of your authority signal (e.g., "cited in TechCrunch").
authority.eeat_signals.truststringoptionalDescription of your trust signal (e.g., "SOC2 Type II certified").
12.SCHEMA
JSON-LD structured data declarations. Specify which Schema.org types and structured data patterns the validator should enforce across your pages.
schema.typesstring[]requiredSchema.org types to implement (e.g., Article, FAQPage, BreadcrumbList, Product).
schema.faq_schemabooleanoptionalRequire FAQPage schema on all pages with FAQ sections. Default: true.
schema.breadcrumb_schemabooleanoptionalRequire BreadcrumbList schema. Default: true.
schema.organization_schemabooleanoptionalRequire Organization schema on homepage. Default: true.
13.CRAWL
Bot access and indexing rules. Declare your sitemap location, robots.txt path, and the full list of AI bots you permit to crawl your content.
crawl.sitemapurloptionalPath to your XML sitemap. Default: /sitemap.xml.
crawl.robots_txtpathoptionalPath to robots.txt. Default: /robots.txt.
crawl.allow_ai_botsbooleanoptionalMaster switch to allow or block all AI crawlers. Default: true.
crawl.allowed_botsstring[]optionalExplicit bot allowlist: Googlebot, Bingbot, PerplexityBot, ChatGPT-User, GPTBot, ClaudeBot, anthropic-ai, cohere-ai.
crawl.disallowstring[]optionalURL patterns to exclude from all crawlers (e.g., /admin, /api/*).
14.AEO
AI Engine Optimization rules. This section configures how your brand interacts with AI search engines — the most important section for citation optimization.
aeo.answer_first_formatbooleanrequiredRequire direct answers in the first paragraph of every page. Critical for AI citation.
aeo.faq_on_all_key_pagesbooleanoptionalRequire FAQ sections on all priority 1-3 pages. Default: true.
aeo.structured_data_prioritystringoptionalStructured data priority level: high | medium | low. Default: high.
aeo.content_freshness_targetstringoptionalHow often key pages must be updated (e.g., 30d, 7d). Default: 30d.
aeo.competitors_to_monitorstring[]optionalList of competitor domains to track for citation displacement.
aeo._analysisobjectoptionalPlatform data: overall citation rate, gap score, engines tracked, and last analysis timestamp.
← platform writes back15.MONITORING
Sync and alert configuration. Controls how and when the connected platform updates your _analysis blocks.
monitoring.sync_schedulestringoptionalHow often the platform syncs: monthly | weekly | on_demand. Default: monthly.
monitoring.auto_commitbooleanoptionalAllow the platform to commit _analysis updates directly to your repo. Default: false.
monitoring.pr_modebooleanoptionalOpen a PR with _analysis updates instead of committing directly. Default: true.
monitoring.branchstringoptionalTarget branch for sync commits or PRs. Default: main.
monitoring.alert_on_gap_score_abovenumberoptionalAlert when gap score exceeds this threshold. Range: 0–100. Default: 80.
monitoring.alert_on_citation_dropbooleanoptionalAlert if citation rate drops between analysis cycles. Default: true.
16.PLATFORM
Platform connection settings. Connect a provider to enable live _analysis writeback.
platform.project_idstringoptionalPlatform project or workspace ID.
API keys are loaded from the SEOMD_API_KEY environment variable. Never commit API keys to version control. Add .env to your .gitignore.
17.VERSIONING
The SEO.md spec follows a lifecycle from alpha to stable.
Current. Spec is being validated against real-world usage. Breaking changes possible.
Spec is feature-complete. Minor breaking changes only with migration guides.
Spec is finalized. Only additive, backwards-compatible changes allowed.