Methodology: How Everyday AEO Scores a Page
Everyday AEO reads one web page, runs 99 documented rules over it and turns the results into a 0 to 100 score. This page explains every step so you can check our work. Every rule below has a stable ID you can link to.
How scoring works
- Rules earn points. Each scored rule has a maximum number of points. A rule earns all, part or none of them, and records the evidence it saw on the page and, when it lost points, a plain-English fix.
- Categories. A category score is 100 × points earned ÷ points available, counting only the scored rules that were measured.
- Overall score. The overall score is the weighted average of the category scores, using the weights below. Only the final number is rounded.
- Not measured is excluded, never a free pass. If we could not get the data for a rule (for example Google PageSpeed was unavailable or robots.txt could not be read), the rule is marked “not measured” and leaves both the points earned and the points available. If a whole category cannot be measured, the other weights are re-normalised. If nothing can be measured, the page is “Not scored”.
- Caps are applied last. A few dealbreakers limit the final score. The report always shows both the capped score and the score before caps.
| Category | Weight | What it covers |
|---|---|---|
| Content Structure | 22 | How the page's headings, sections, lists and metadata are organised so people and AI can scan and extract it. |
| Authority & Trust (E-E-A-T) | 18 | Experience, expertise, authoritativeness and trust signals: authorship, citations, sourcing and article markup. |
| AI Access & Readiness | 15 | Whether AI crawlers and answer engines are allowed to fetch, index and quote the page. |
| Technical Optimization | 15 | Behind-the-scenes markup and delivery: HTTPS, structured data, canonical URL, social tags and speed. |
| Content Clarity & Relevance | 12 | Writing that is clear, direct and easy for readers and AI systems to extract answers from. |
| Trust & Compliance | 10 | Disclosures, freshness dates and contact information that show the page is transparent and maintained. |
| User Experience | 8 | Mobile readiness, navigation and accessibility basics that make the page usable. |
| Total | 100 |
There is no base score, no default value and no bonus for passing several rules at once. 70 rules are scored and 29 are information only.
Score caps
A cap is the highest score a page can receive when a dealbreaker is present. If several caps apply, the lowest one wins.
| Cap | Maximum score | Applies when |
|---|---|---|
cap-noindex | 20 | meta robots or X-Robots-Tag header says noindex (or none) |
cap-robots-blocked | 20 | robots.txt (fetched OK) disallows the start page for EverydayAEO-Analyzer or * |
cap-empty-page | 30 | under 10 words of main text and no other body content |
cap-thin-content | 49 | under 100 words of main-content text |
cap-no-title | 69 | no non-empty <title> element |
A robots.txt file that cannot be reached, or that returns a server error, never triggers the robots cap.
Grades
| Grade | Label | Score |
|---|---|---|
| A | Excellent | 90 to 100 |
| B | Good | 80 and above |
| C | Fair | 70 and above |
| D | Needs work | 50 and above |
| F | Poor | 0 and above |
What we fetch
When you submit a URL our servers fetch it, not your browser. We identify ourselves with this user agent:
EverydayAEO-Analyzer/2.0 (+https://everydayaeo.com/methodology)
- The page you submitted (HTTP or HTTPS, following up to 5 redirects).
/robots.txtand/sitemap.xmlon the same site.- A handful of optional files used only for information:
/llms.txt,/AGENTS.mdand agent discovery files under/.well-known/. - Google PageSpeed Insights data for the URL, when that service is available.
We audit one page per request. We do not crawl your site, log in or submit forms. Requests to private or internal network addresses are refused. You can block our crawler in robots.txt with the token EverydayAEO-Analyzer.
AI crawler policy
Different AI crawlers do different jobs, so we treat them differently.
- Citation and search crawlers are scored. These fetch pages so an AI product or search engine can find and cite them (for example OAI-SearchBot, Claude-SearchBot, PerplexityBot, Googlebot, Bingbot). Blocking one costs points.
- Training crawlers are reported, not penalised. Crawlers that collect content to train models (for example GPTBot, ClaudeBot, CCBot, Google-Extended) are shown with their status. Opting out of model training is a legitimate choice and never lowers your score.
- Speculative standards are informational.
llms.txt,AGENTS.md, agent files under/.well-known/, Content-Signal directives and markdown responses are reported, but they do not move the score.
| Token | Vendor | Purpose | Treatment |
|---|---|---|---|
OAI-SearchBot | OpenAI | search | Scored |
ChatGPT-User | OpenAI | user-action | Scored |
Claude-SearchBot | Anthropic | search | Scored |
Claude-User | Anthropic | user-action | Scored |
PerplexityBot | Perplexity | search | Scored |
Perplexity-User | Perplexity | user-action | Scored |
Googlebot | search | Scored | |
Bingbot | Microsoft | search | Scored |
Applebot | Apple | search | Scored |
GPTBot | OpenAI | training | Reported, never penalised |
ClaudeBot | Anthropic | training | Reported, never penalised |
anthropic-ai | Anthropic | training | Reported, never penalised |
Google-Extended | training | Reported, never penalised | |
Applebot-Extended | Apple | training | Reported, never penalised |
CCBot | Common Crawl | training | Reported, never penalised |
Bytespider | ByteDance | training | Reported, never penalised |
Meta-ExternalAgent | Meta | training | Reported, never penalised |
cohere-ai | Cohere | training | Reported, never penalised |
Amazonbot | Amazon | training | Reported, never penalised |
Healthcare add-on
If a page looks like health or life-sciences content (for example a drug product page, clinician content, patient education or a health organisation), we also run a labelled healthcare add-on. It checks for items such as important safety information, fair-balance language, a prescribing information link, an adverse-event reporting contact, a named medical reviewer, a recent “last reviewed” date, medical schema markup and links to primary sources. These rules are tagged “healthcare add-on” in the list below and are scored under Trust & Compliance and Authority & Trust.
On pages that are not health content, every add-on rule is marked not applicable, so non-health sites are never penalised.
Not an MLR review. The healthcare add-on is an automated check for the presence of common signals. It is not a medical, legal or regulatory (MLR) review, does not judge whether any claim is accurate or compliant, and does not replace your review process. Passing it does not mean content is approved for use.
Full rule list
99 rules, grouped by category. Each rule's anchor is its ID, for example #ai-agents-md. Rule IDs are stable: once published they are not renamed.
Content Structure
How the page's headings, sections, lists and metadata are organised so people and AI can scan and extract it.
If it fails: Add a short FAQ section answering the questions customers most often ask.
If it fails: Add one clear H1 that states the page topic. It anchors the content hierarchy for search engines and AI.
If it fails: Make the H1 and the title describe the same topic (they may differ in wording, not in subject).
If it fails: Break the content into more sections with descriptive H2/H3 headings (aim for 6 or more).
If it fails: Fix the heading order so levels never skip (H1, then H2, then H3).
If it fails: Add bulleted or numbered lists (or a table) for key points; AI often extracts them directly.
If it fails: Add a meta description of 70-160 characters summarising the page.
If it fails: Rewrite key headings as questions people ask ("What is...?", "How does...work?"). AI assistants match them to queries.
If it fails: Lengthen the title to 30-60 characters with the page topic and brand.
If it fails: The page is thin. Expand it with substantive, useful detail (aim for 800+ words where the topic warrants it).
Authority & Trust (E-E-A-T)
Experience, expertise, authoritativeness and trust signals: authorship, citations, sourcing and article markup.
If it fails: If this is an article or post, add Article/BlogPosting JSON-LD with headline, author and dates.
If it fails: Cite authoritative sources (research, official guidance, standards) with links.
Reported for information. Never changes the score.
If it fails: Link to more reputable external sources that support your claims; well-sourced pages are cited more.
If it fails: Show a visible "Last reviewed: date " line near the top of the content and refresh it every time a clinician re-checks the page.
If it fails: Add a line such as "Medically reviewed by Jane Smith, MD" near the top, and add reviewedBy to your MedicalWebPage schema.
If it fails: Add JSON-LD: MedicalWebPage (with lastReviewed and reviewedBy) for content pages, Drug for product pages, MedicalCondition for condition pages, MedicalOrganization for the organisation.
If it fails: Cite at least two primary sources (PubMed, FDA, CDC, NIH, WHO, ClinicalTrials.gov, DailyMed or a DOI link) for medical claims.
AI Access & Readiness
Whether AI crawlers and answer engines are allowed to fetch, index and quote the page.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
If it fails: Raise max-snippet to at least 160 or use -1 (unlimited) so AI can quote meaningful excerpts.
Reported for information. Never changes the score.
If it fails: Remove the noindex directive unless the page is intentionally private. It stops search engines and AI from indexing it.
If it fails: Remove nosnippet, or use a generous max-snippet instead, so AI can show excerpts.
If it fails: Make the JSON-LD describe what a visitor can actually read: headline, author name, FAQ questions and dates must appear on the page.
If it fails: Wrap the primary content in <main>, use one <h1> with ordered <h2>/<h3> sections, and present key facts as lists, tables or definition lists so AI can extract them.
If it fails: Publish an XML sitemap and add a "Sitemap: https://your-site/sitemap.xml" line to robots.txt so crawlers can discover every page.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Technical Optimization
Behind-the-scenes markup and delivery: HTTPS, structured data, canonical URL, social tags and speed.
If it fails: Add a link rel="canonical" href="https://..." tag with the absolute preferred URL to consolidate duplicate URLs.
If it fails: Mark up your FAQ content with FAQPage JSON-LD so AI can extract question/answer pairs.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
If it fails: Fix the JSON syntax of the invalid JSON-LD block(s) (trailing commas, missing brackets or quotes). Validate with the Schema Markup Validator.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
Reported for information. Never changes the score.
If it fails: Add lang="en" (or the right language code) to the html element.
If it fails: Load every image, script, stylesheet and frame over https://. Browsers block or warn on mixed content.
If it fails: Add og:title, og:description and og:image so shared links render well.
If it fails: Reduce the size and nesting of the HTML (unclosed or deeply nested elements, extremely large generated pages). Very large DOMs also slow browsers and AI crawlers.
Reported for information. Never changes the score.
If it fails: Add valid JSON-LD structured data (Article, FAQPage, HowTo, Organization or Product as relevant).
If it fails: Add the missing required properties to each schema item (for example Article needs headline, author and datePublished).
If it fails: Add valid JSON-LD with @type values describing the page.
If it fails: Add twitter:card (and optionally twitter:title/description/image) so links render well on X.
Content Clarity & Relevance
Writing that is clear, direct and easy for readers and AI systems to extract answers from.
If it fails: Put a 1-3 sentence direct answer (10-80 words) right after each question heading; this is what AI extracts.
If it fails: Replace all placeholder text with real content before publishing.
If it fails: Simplify the language: shorter sentences and plainer words.
If it fails: Sentences are very long. Split them; aim for an average under 20 words.
Trust & Compliance
Disclosures, freshness dates and contact information that show the page is transparent and maintained.
If it fails: Add a line telling people how to report side effects: the company contact (phone or email) and FDA MedWatch at www.fda.gov/medwatch or 1-800-FDA-1088.
pharma-audience-gating-signalHealthcare: Audience pathways (patient vs healthcare professional)info onlyhealthcare add-on#Reported for information. Never changes the score.
If it fails: Add a plain disclaimer such as "This information is not a substitute for professional medical advice, diagnosis or treatment. Talk to your healthcare provider."
pharma-fair-balanceHealthcare: Risk information near efficacy claims (fair balance)2 ptshealthcare add-on#Reported for information. Never changes the score.
If it fails: Add a visible link to the full Prescribing Information (and Medication Guide where one exists) near the safety information and in the footer.
pharma-promotional-claims-infoHealthcare: Promotional or absolute claims for compliance reviewinfo onlyhealthcare add-on#Reported for information. Never changes the score.
If it fails: Add visible contact details (email, phone or a contact page link).
If it fails: Show publication and last-updated dates (use time datetime="..." and schema datePublished/dateModified).
If it fails: Add the disclaimers, editorial policy or disclosures appropriate to your industry (for example a medical or financial disclaimer).
If it fails: Review and update the content, then show a new "Last updated" date. Stale pages are cited less.
If it fails: Link your privacy policy, terms and (for editorial sites) editorial policy from the footer.
User Experience
Mobile readiness, navigation and accessibility basics that make the page usable.
If it fails: Add descriptive alt text to your images (use alt="" only for purely decorative images).
If it fails: Add meta name="viewport" content="width=device-width, initial-scale=1" so the page works on mobile.
Limitations
- One page at a time. A score describes the single URL you submitted, not your whole site.
- Heuristics, not verdicts. Rules look for patterns in the HTML and related files. They can miss things or flag things incorrectly, especially on unusual layouts.
- Static HTML. By default we read the HTML the server returns. Content added later by scripts may not be seen.
- No guarantees. A higher score does not guarantee rankings, traffic or citations by any AI product. Vendors change how their crawlers and answer engines work, and we review the crawler list regularly.
- Third-party data. Speed metrics come from Google PageSpeed Insights and are shown as not measured when that service is unavailable.
- Not professional advice. Reports are not legal, medical or regulatory advice.
Changelog
- Scoring version 2 (current)
- Server-side and rule-based. Every rule has a stable ID, points, evidence and a fix. Seven weighted categories, score caps for dealbreakers, “not measured” excluded from the score, per-crawler AI access checks and a healthcare add-on. Scores can differ from version 1 for the same page.
- Scoring version 1
- Browser-side. The score was calculated in your browser using hash-based and heuristic checks, with fixed starting values for some signals.