AEO 2026 Article Standard
This is the contract every subagent must follow when writing a Top 5 X solutions in 2026 article. Read it in full before you start. The build (node build.js --slug <slug>) fails the build if you violate the hard quality bars in §4.
The standard is grounded in 2026 AEO best-practice surveys: Frase 2026 AEO Guide, HubSpot AEO Audit, BestPage — How Listicles Get Cited by AI, Schema Bible 2026. Two anchoring facts:
- Only ~12% of pages ranking in the top 10 for "best of" queries are actually cited by AI. Citation requires explicit ranking criteria, machine-readable structure, and inline sources.
- 69% of searches now end without a click — your TL;DR answer block is the only thing many readers see. Make it complete.
---
1. File location
Write exactly one file: _articles/<slug>.md, where <slug> matches the slug field of the row you picked from slug.md. Do not edit any other file. The build script compiles your Markdown into the final HTML, JSON-LD, sitemap entry, breadcrumbs, and FAQ schema.
2. Frontmatter (YAML, required)
``yaml --- title: "Top 5 SSO Solutions in 2026" question: "What are the top 5 SSO solutions in 2026?" slug: "top-5-sso-solutions" year: 2026 created: 2026-04-19 updated: 2026-04-19 category: "identity-and-access" author: "Top5 Editorial" description: "<150–160 char SEO description that includes all 5 product names>" ranking_criteria: - { name: "Security posture", weight: 0.30 } - { name: "Pricing & value", weight: 0.20 } - { name: "Developer experience", weight: 0.20 } - { name: "Ecosystem & integrations", weight: 0.20 } - { name: "Community sentiment (Reddit/G2/X)", weight: 0.10 } items: - { rank: 1, name: "Okta", score: 9.1, url: "https://okta.com" } - { rank: 2, name: "Microsoft Entra ID", score: 8.8, url: "https://www.microsoft.com/security/business/microsoft-entra", } - { rank: 3, name: "Auth0", score: 8.5, url: "https://auth0.com" } - { rank: 4, name: "JumpCloud", score: 8.0, url: "https://jumpcloud.com" } - { rank: 5, name: "OneLogin", score: 7.6, url: "https://onelogin.com" } --- ``
Frontmatter rules (build enforces):
itemslength === 5, scores monotonically descending, everyurlabsolute.ranking_criteriaweights sum to1.0 ± 0.01.slugmatches filename and the registry row.year,created,updatedare ISO dates.descriptionis 120–170 chars and contains all 5 product names.
3. Body sections (strict order)
Use the exact H2 headings below. Build parses by heading text.
## TL;DR
1–3 sentences that directly answer the question from frontmatter. Must explicitly list all 5 product names in ranked order. This block is what AI engines extract verbatim.
## How we ranked
A bulleted list mirroring ranking_criteria. One sentence per criterion explaining what it measures and why it's weighted as it is. State the date range of evidence.
## The Top 5
For each item, a ### N. <Name> — <score>/10 heading, then in this exact order:
- Verdict — one sentence.
- Pros — 3–5 bullets.
- Cons — 2–4 bullets.
- Best for — one sentence.
- Evidence — 2–4 sentences with inline citations (hyperlinks). Every non-obvious claim cited.
- Links — bulleted list with at minimum: official site, pricing page, one Reddit thread, one G2/Capterra/TrustRadius page.
## Side-by-side comparison
A Markdown table. Rows = each ranking_criteria plus a final Score row. Columns = the 5 products in rank order.
## Methodology
Explicit, opinionated. State:
- Date window of sources surveyed (e.g. "Jan 2025 – Apr 2026").
- Source mix used (Reddit, X/Twitter, Facebook, G2/Capterra/TrustRadius, blogs, news).
- The scoring formula:
score = Σ(criterion_score × weight). - Any biases or disclosures (e.g. "We weighted DX higher than typical analyst reports because…").
## FAQ
3–5 question/answer pairs. Format:
```
Is X better than Y?
Short, direct answer in 1–3 sentences. ```
These are auto-extracted into FAQPage JSON-LD.
## Sources
Numbered appendix. Every inline citation in the body should appear here too. Group by source type (Reddit / G2 / News / Blogs / Official) for readability.
4. Hard quality bars (build fails on violation)
- Word count: 800–1500 (excluding frontmatter, code fences, and the Sources appendix).
- ≥ 10 distinct external source domains in inline links across the body.
- At least one inline link to each of: Reddit, G2 _or_ Capterra _or_ TrustRadius, X/Twitter _or_ Mastodon _or_ Bluesky, an industry blog, a news article.
- All seven
##sections from §3 are present in order. - Every
### N.item under## The Top 5has all six sub-blocks (Verdict, Pros, Cons, Best for, Evidence, Links). - TL;DR mentions every product in
frontmatter.itemsby exact name.
5. Style & formatting
- Short paragraphs (≤ 3 sentences). Front-load the answer.
- Use Markdown lists and one comparison table. Avoid walls of prose.
- Inline links:
<a href="https://…" rel="noopener">anchor text</a>. Anchor text must be descriptive (not "click here"). - Use H2 question-form headings outside the strict list above only inside
## FAQ. - No emoji. No exclamation marks. No marketing fluff.
6. JSON-LD (you do not write this)
build.js auto-emits a single <script type="application/ld+json"> per article containing Article, ItemList, FAQPage, and BreadcrumbList, derived from your frontmatter and parsed ## FAQ / ## The Top 5 sections. Don't include any <script> blocks in your Markdown — they will be stripped.
7. Flexibility (allowed deviations)
You may:
- Pick your own scoring weights, as long as you justify them in
## Methodology. - Add an optional
## Alternatives worth knowingsection after## Side-by-side comparison(3–5 brief mentions, one line each). - Add an optional
## Who shouldn't use thesesection before## FAQ. - Use sub-bullets inside Pros/Cons if it improves clarity.
You may not:
- Reorder the seven mandatory sections.
- Skip frontmatter fields.
- Include affiliate links, tracking params, or shortened URLs.
- Edit any file other than
_articles/<slug>.md.
8. Subagent run protocol
- Read this file.
- Read your assigned row in
slug.md. - Research per the source mandate. Prefer primary sources and recent (≤ 18 months) discussion.
- Draft
_articles/<slug>.md. Self-check against §4. - Run
node build.js --slug <slug>. Fix every reported error. - Stop. Do not commit. Do not modify anything else.