There is a category of SEO audit tool that has existed for fifteen years and barely changed. You plug in a URL, the tool crawls the site, and forty-five seconds later you get a PDF with two hundred items color-coded red, yellow, and green. "47 pages missing meta descriptions." "12 images without alt text." "Mobile usability: 78/100." The PDF lands in your inbox. You feel slightly worse about your site. Nothing changes.
These tools aren't useless. They catch the obvious stuff, and the obvious stuff is real work. The failure mode is what they leave out and how they report it. They flag a missing meta description on a page nobody visits, then stay silent on whether an answer engine is allowed to crawl you at all, whether the phone number in your structured data matches the one in your footer, and whether a screen-reader user can get through your contact form. Then they average two hundred items into a friendly 78 and call it a health score.
The Emaration audit runs five per-page layers and two site-wide passes, then hands the result to a human before you see it. Here's the walk-through: what each layer reads, what it can conclude, and — the part most audit pages skip — what this run does not do.
A note on the examples below. Every "example finding" in this article is an illustrative composite, a realistic scenario assembled from the kinds of problems we see, not a write-up of a single named client. The numbers show the shape of the work, not a promised result. We never publish a real client's data without permission, and we never invent a metric and attach it to a real name.
What runs, in order
We crawl the site once, keep the HTML, and read every page that returns a usable response. Five layers run against each of those pages. Two more run once, over the whole crawl.
- Technical and on-page SEO — per page
- Content quality — per page
- Business-presence signals — per page
- Answer Engine Optimization (AEO) readiness — per page
- Accessibility and mission — per page
- Crawl health — once, site-wide
- AI-crawler access — once, site-wide
The crawl is bounded on purpose: 20 pages at two levels of depth by default, hard-capped at 30 pages and three levels. That bound is a real limit, so the report prints how many pages were discovered, how many were analyzed, and how many couldn't be fetched. If a page timed out or dead-ended in a redirect we couldn't follow, it shows up as a coverage finding instead of quietly vanishing from the denominator.
Layer 1 — Technical and on-page SEO
The unsexy fundamentals, read off the delivered HTML: title and meta tags, heading structure, JSON-LD schema, social/Open Graph tags, images, indexability (the robots meta and the response headers together), static Core Web Vitals signals, and mixed content. This is the layer the SaaS tools do genuinely cover. We run it because it's table stakes and because the rest of the report needs the same parse.
Where it earns its keep is schema. Most sites either have none or have the 2018 spec: an Organization block and nothing else. What answer engines lean on is entities and the relationships between them.
Example finding (illustrative composite): A multi-location vet group had clean LocalBusiness markup on every location page and no Person entity anywhere — the named veterinarians on the team pages existed as text and nothing more. There was no entity for a model to attach a specialization, a credential, or a testimonial to. Adding Person markup with knowsAbout (specializations), alumniOf (vet school), and a worksFor link back to the practice gives the answer engines something citable in a category where every competitor's markup looks identical.
Layer 2 — Content quality
Topical depth, readability, heading hierarchy, internal linking, meta alignment (do the title and description actually describe the page?), and keyword stuffing — read page by page across the crawl. This layer strips scripts, styles, and noscript blocks before it reads, so it judges the words a reader actually gets, not the markup around them.
Be clear about the boundary here, because most audit pages blur it. This layer reads your pages. It is not a competitor gap analysis — competitor comparison is not this layer's job and it is not part of this audit run. It also has no traffic data: it can tell you a page is thin, generically linked, or misaligned with its own title. It cannot tell you that page earns six visits a month, because it never sees your analytics.
Example finding (illustrative composite): A regional dental group had roughly 240 blog posts. The crawl covered the 30 pages it could reach from the homepage, and the pattern was already visible in that sample: a majority under the thin-content floor, service pages whose titles and descriptions described a page other than the one they sat on, and internal links that read "read more" and "click here" almost everywhere — anchors that pass equity while telling both the reader and the model nothing about the destination. Thinness is what a tool sees. The redundancy pattern across a portfolio is what an analyst sees, which is why a human reads this layer before it ships.
Layer 3 — Business-presence signals
Three passive checks, all read from the page HTML, with no logins and no third-party APIs:
- Social footprint discovery. We scan links for actual profile URLs, matched on host — so a blog post that mentions Instagram is never miscounted as a linked Instagram profile.
- Google Business Profile signal. An embedded Maps iframe, a maps/place link, a review widget, or
LocalBusinessJSON-LD carrying an address. - NAP consistency. The name, address, and phone in your structured data, compared against the ones a human reads in your footer.
This layer is deliberately conservative: at most one warning per check, never a critical, so a presence signal can never dominate your score. It is a cheap, high-signal read, not a local-SEO audit.
Example finding (illustrative composite): A four-location clinic had a tracking number in the footer of every page and the old front-desk line in the LocalBusiness JSON-LD, left over from a site migration. Two phone numbers, one business, both crawlable. Every downstream system that reads structured data — maps, aggregators, answer engines — had a coin-flip on which one to publish.
Thinness is what a tool sees. The redundancy pattern across a portfolio is what an analyst sees.
Layer 4 — Answer Engine Optimization (AEO) readiness
This is the layer that didn't exist three years ago. AI Overviews are eating informational-query click-through, and Perplexity, ChatGPT search, and Claude with browsing keep growing. The question this layer answers is narrow and answerable from your HTML alone: is this page built to be cited?
It scores seven signals into a 0–100 citation-readiness composite:
- Schema types a model can use —
Article,FAQPage,HowTo,Organization,Person(15 points each, capped at 50) - An author signal, in schema or as a visible byline (10)
- Two or more
sameAsURLs tying your entity to profiles elsewhere (10) - A direct-answer lede — the first paragraph after the H1 answering the page's question outright (10)
- Two or more question-format H2s, the shape models lift verbatim (5)
- A summary or key-takeaways block (5)
- A reading grade at or below twelve (5)
Under 30 is a critical finding. 30 to 60 is a partial surface. Above 60 reads healthy. The composite is reported as the measured number, alongside the individual misses, so you can see which signal to add first.
What this layer is not: it does not ask a language model anything. There is no live probe in the audit run — the analyzer reads your HTML and says whether it is citation-shaped. Tracking whether Perplexity, Claude, ChatGPT, Gemini, or Grok actually name you, on the prompts your customers type, trended over time, is a separate ongoing tool that members get. Two different jobs. Conflating them is how audit pages end up promising a tracker the audit never ran.
Example finding (illustrative composite): An audiology practice with strong organic rankings scored 25 out of 100 on its most-trafficked education pages: no Article or FAQPage schema, no author signal in schema or on the page, no sameAs links, no direct-answer lede under the H1, zero question-format H2s, and a reading grade of fifteen. Every one of those is a page-level fix a copywriter can make in an afternoon, and they compound — because the practices getting cited weren't outranking anyone, they just had one clean, answerable page a model could lift from.
Layer 5 — Accessibility and mission
A read for common WCAG Level A barriers on every page we crawl. Language declaration on the document, accessible labels on every form control that's actually in the accessibility tree, a skip link to main content, captions on video, autoplaying audio, and image alternative-text coverage. That last one is worth a note: we count an absent alt attribute as a gap and treat alt="" as correct, because an empty alt is the right way to mark a decorative image. Tools that count both flag textbook-correct markup on every site they scan.
Accessibility is one of the categories that anchors the score, which we'll get to below. A critical accessibility failure caps the composite at 55 no matter how clean the rest of the site is. That's a deliberate choice: a site a disabled customer can't use is not an A-grade site.
Example finding (illustrative composite): A dental group's appointment-request form had six inputs with placeholder text and no labels — no label for, no aria-label, nothing. A screen-reader user tabbing through heard "edit text" six times. The document had no language attribute either, so the whole page was read in the wrong locale's pronunciation. Both are hour-one fixes. Both had been live for three years, on the page the entire ad budget pointed at.
The mission half is not a scored layer and we won't dress it up as one. It's how the firm is structured: 10% of net profit routes to Emaration's Outreach and Community Support, the community-focused assistive-technology initiative co-founder Jordan Williams runs. Its first project is a light-up white cane — in development now, not yet available — that Jordan is building because the existing options didn't keep him safe at night. Every report we deliver carries the EOCS pledge line, and the math goes public quarterly, starting with the first quarter there's profit to report.
Site-wide pass 1 — Crawl health
Everything a single-page read structurally cannot see, run once over the whole crawl: robots.txt validity and whether it points at a sitemap, sitemap.xml validity, redirect chains and how deep they run, broken internal pages, orphan pages nothing links to, canonical clusters where several URLs claim the same canonical, hreflang reciprocity, and security headers.
This is also where the audit is honest about its own coverage. If nothing returned analyzable HTML, you get one critical finding that says we couldn't read the site — not a flattering average computed over zero pages. If some pages were reachable and others weren't, the unreachable ones are named in a coverage finding and the report says the scores cover only what we could read.
Example finding (illustrative composite): A multi-location group's robots.txt returned 200 with no Sitemap: directive, the sitemap itself still listed the pre-migration URLs, and every one of them resolved through a four-hop redirect chain into the new structure. Crawlers were spending their budget walking hops to reach pages that a one-line sitemap fix would have handed them directly.
Site-wide pass 2 — AI-crawler access
The cheapest high-signal check in the whole audit, and the one almost nobody runs. Your robots.txt gates AI-citation eligibility. If it disallows GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, or Google-Extended, those engines cannot crawl you, which means they cannot cite you — no amount of citation-readiness work on the page will change that. It's silent, it's common, and it's usually a copy-pasted robots.txt nobody has read since launch. We also note whether you publish an llms.txt, the emerging convention for pointing AI assistants at your key content.
This pass pairs with Layer 4 to explain why a brand is uncited: the page might be perfectly citation-shaped and simply unreachable.
A blocked crawler cannot cite you at all. No amount of on-page work changes that.
One number that can't lie by averaging
Findings from all seven passes are deduplicated — the same defect found by two layers is reported once, and notes that are properties of the report rather than of a page appear once, not on all thirty. What's left is scored into a 0–100 composite and a letter grade: 90 and up is an A, 80 a B, 70 a C, 60 a D, below that an F.
The part that matters is the anchor cap. A critical finding in an anchored category caps the composite regardless of what the rest of the site scores — accessibility criticals cap it at 55, and the lowest applicable cap wins. Without that rule, one genuinely broken thing gets averaged against a hundred passing checks and disappears into a 78. The cap is what keeps a score from being a comfort blanket.
What this audit does not do
Every audit page should have this section, and almost none do. Here's ours.
- It does not probe live LLMs. Layer 4 reads your HTML for citation-readiness. Whether Perplexity, Claude, ChatGPT, Gemini, or Grok actually name you on real prompts, trended over time, is a separate ongoing member tool — not part of this run.
- It does not audit your measurement stack. Your GA4, GTM, ad platforms, and CRM revenue data are behind logins the audit never touches. Whether your conversions are triple-counted or your bidder is optimizing against placeholder events is real work and it's important work — it's implementation we scope with you after access, not something a crawl can see from outside.
- It does not run a competitor comparison. The content layer reads your pages. Rival benchmarking is the Compete engine. The Compete engine is built but deliberately not deployed, and no launch date is set.
- It does not put a dollar figure on every finding. Findings come with severity, detail, and the fix. Membership is one flat price, with one consulting hour a month included; anything beyond that hour is scoped with you before it starts.
- It does not ship an audio version. Our own pages have a read-aloud control. That's a control on this site, not a file we deliver. Alternate formats are available on request, by asking a person.
The close a person writes
Built with AI. Reviewed by humans. Always. The scan itself is a queued job that finishes in minutes; the rest of the window is Andrew writing your plan from what it found. Delivered within three business days — we aim for the same day.
If we put the audit in front of you, we stand behind every finding. We'll get on a call to defend any one of them. We'll eat any one we can't defend, in writing, and re-issue the report. We don't ship slop.
Everything you pay for is delivered and yours to keep. Whether or not you keep working with us, the audit is yours. Take it to another agency. Take it in-house. We'd rather you fix the problem than argue with us about the report.
Andrew Dall is the CEO of Emaration, an AEO (Answer Engine Optimization) company built around disclosed AI and measurement that survives an audit. Disabled U.S. Coast Guard veteran. Twenty-one years in IT, cybersecurity, and MSP leadership. B.S. Cybersecurity, Oregon Institute of Technology, cum laude.
Jordan Williams is the Director of Emaration's Outreach and Community Support. He lives with vision and hearing loss and is developing a light-up white cane — early development, not yet available.
Onboarding runs all five layers on your business.
Onboarding — our automated five-layer audit and setup — has a list price of $1,000, and it's waived with membership. You'll get a plain-English read on what's leaking, ranked by severity, with the generated fixes attached and a human sign-off before it reaches you. Within three business days — we aim for the same day. The audit is delivered and yours to keep, and monitoring runs weekly for as long as your membership is active. Membership is $99/month, month-to-month.
Start membership — $99/mo →Or start free, no cardBack to Insights