How the scan works
Every check, every weight and every formula, so you can judge the numbers for yourself.
What we read
robots.txt first. If it asks crawlers like ours to stay out, we stop. Then your homepage, the pages it links to and the pages those link to, up to 20 pages, with contact, booking and quote pages first, and a few pages from your sitemap that none of those pages link to. We read each page as your server sends it and do not run its scripts, so content that loads by script after the page arrives is not seen. We also check whether your site answers at http and at its www or non-www twin, and whether it publishes /llms.txt. About our crawler.
The checks
Severity sets how much of your search traffic a finding is assumed to put at risk. These are our published assumptions, not measurements. A robots.txt that blocks Google from the whole site uses 60% / 80% / 95%. Slow main content (E1) counts as high severity above 4 seconds.
Crawl and index
| Check | Rule | Severity | Search visits at risk (low / mid / high) | Minutes to fix |
|---|---|---|---|---|
| T1 Google is told to stay out of important pages | robots.txt disallows Googlebot on key URLs | high | 10% / 20% / 40% | 15 |
| T2 Important pages are marked "do not index" | noindex on the homepage or a main navigation page | high | 10% / 20% / 40% | 15 per page |
| T3 Pages point Google to the wrong address | Canonical tag targets another host, a redirect or an error page | medium | 2% / 4% / 8% | 20 per page |
| T4 Your site answers at more than one address | HTTP does not 301 to HTTPS, or www and non-www both return 200 | medium | 2% / 4% / 8% | 30 |
| T5 Links on your site lead to error pages | Internal links return 4xx or 5xx | medium | 2% / 4% / 8% | 20 per page |
| T6 Some links bounce through several redirects | Internal redirect chains of 2 or more hops | low | 0.5% / 1% / 2% | 20 per page |
| T7 Your sitemap is missing or out of date | No readable XML sitemap, or over 10% of checked sitemap URLs (at least 5 checked) are not live and indexable | low | 0.5% / 1% / 2% | 30 |
| T8 Pages in your sitemap that nothing links to | Sitemap URLs not linked from any page read | low | 0.5% / 1% / 2% | 30 per page |
T8 samples up to 5 pages from your sitemap that none of the pages we read link to, and the free report lists them. For each one, the orphan finder names a page to link it from, among the pages we reached by following links from your homepage, and the words to link it with. The Roadmap Audit includes those suggestions, and the free report shows them when T8 is the one finding whose fix it shows. A sitemap entry that lands on a page we reached by links is that page, not an orphan. An entry that redirects to another site is left out, and one that redirects within your site is listed by the page it lands on. One fixed rule picks the page, so the same scan always gives the same answer. First, the page whose address shares the most leading folders with the orphan's, the shorter address winning a tie and never a page deeper than the orphan, so /services/ comes before /services/water-heaters/ for /services/drain-cleaning/. If no page qualifies that way, the page whose title shares the most words with the orphan's title, leaving out short and common words and the site name most of your titles repeat. A page with no title of its own is left out of this step. If no title shares a word, your homepage. The words for the link are the orphan's own title without the site name, or the last part of its address when it has no title. We only know the pages we read, so a page we did not reach may already link to it.
Content
| Check | Rule | Severity | Search visits at risk (low / mid / high) | Minutes to fix |
|---|---|---|---|---|
| C1 Pages missing a title, or sharing one | Missing or duplicate <title> across pages read | medium | 2% / 4% / 8% | 10 per page |
| C2 Service pages say too little | Service pages under 250 words | medium | 2% / 4% / 8% | 90 per page |
| C3 Your city is not in your main headline | addressLocality absent from the homepage title and H1 | medium | 2% / 4% / 8% | 15 |
| C4 Pages without a search description | Missing meta description | low | 0.5% / 1% / 2% | 10 per page |
| C5 Pages with no main heading, or several | Zero or multiple H1 elements | low | 0.5% / 1% / 2% | 10 per page |
AI search
| Check | Rule | Severity | Search visits at risk (low / mid / high) | Minutes to fix |
|---|---|---|---|---|
| A1 AI search crawlers are blocked from your site | robots.txt disallows OAI-SearchBot, Claude-SearchBot, Claude-User or PerplexityBot | medium | 2% / 4% / 8% | 10 |
| A1T AI training crawlers are blocked | robots.txt disallows GPTBot or ClaudeBot | info | Not counted | 5 |
| A1G Google-Extended is blocked | robots.txt disallows the Google-Extended token | info | Not counted | 5 |
| A2 Your homepage has no structured data | No JSON-LD on the homepage | medium | 2% / 4% / 8% | 30 |
| A3 Search engines can't confirm who your business is | No Organization or LocalBusiness entity with name, contact details and sameAs | medium | 2% / 4% / 8% | 30 |
| A4 Service pages don't answer common questions | No question-form headings or FAQ on service pages | low | 0.5% / 1% / 2% | 45 per page |
| A5 No llms.txt file | /llms.txt not found | info | Not counted | 15 |
A1 counts a robots.txt block on OAI-SearchBot, Claude-SearchBot, Claude-User or PerplexityBot: OpenAI, Anthropic and Perplexity say these crawlers feed their assistants' search answers or fetch a page when someone asks. A block on GPTBot or ClaudeBot, which collect pages for AI training, is a note (A1T). So is a block on Google-Extended, which Google says lets you manage whether your pages may be used to train future Gemini models and for grounding in Gemini Apps and Grounding with Google Search on Vertex AI, and does not affect inclusion in Google Search (A1G). Notes add nothing to the estimate. We leave out ChatGPT-User and Perplexity-User: OpenAI says robots.txt rules may not apply to ChatGPT-User, and Perplexity says Perplexity-User generally ignores them.
Experience
| Check | Rule | Severity | Search visits at risk (low / mid / high) | Minutes to fix |
|---|---|---|---|---|
| E1 Your main content loads slowly | LCP at the 75th percentile over 2.5 s (high severity over 4 s) | medium | 2% / 4% / 8% | 120 |
| E2 Your pages are slow to respond to taps | INP at the 75th percentile over 200 ms | medium | 2% / 4% / 8% | 120 |
| E3 The page jumps around while loading | CLS at the 75th percentile over 0.1 | low | 0.5% / 1% / 2% | 60 |
| E4 Your server is slow to answer | Homepage time to first byte over 800 ms | medium | 2% / 4% / 8% | 60 |
| E5 Your site is not set up for phones | No viewport meta tag | high | 10% / 20% / 40% | 10 |
| E6 Scripts hold up the page | 3 or more render-blocking scripts in <head> | low | 0.5% / 1% / 2% | 30 |
| E7 Images without descriptions | Over 20% of images missing alt text, once at least 5 images are read | low | 0.5% / 1% / 2% | 30 |
| E8 No preview image when your site is shared | No og:image on the homepage | low | 0.5% / 1% / 2% | 15 |
Conversion
| Check | Rule | Severity | Search visits at risk (low / mid / high) | Minutes to fix |
|---|---|---|---|---|
| V1 Phone visitors can't tap to call | No tel: link on the homepage | medium | 2% / 4% / 8% | 10 |
| V2 No contact form or booking link found | No form, embedded form widget or booking link in the page code of the homepage or the linked pages we read | medium | 2% / 4% / 8% | 30 |
| V3 Your contact form asks too much | A form requires more than 6 fields | low | 0.5% / 1% / 2% | 20 |
| V4 No analytics found | No analytics tag detected on the homepage | info | Not counted | 20 |
Local
| Check | Rule | Severity | Search visits at risk (low / mid / high) | Minutes to fix |
|---|---|---|---|---|
| L1 Your phone number doesn't match across the site | More than one phone number across tel: links and structured data | medium | 2% / 4% / 8% | 20 |
| L2 Your address in structured data doesn't appear on the page | Structured data streetAddress not found in homepage text | medium | 2% / 4% / 8% | 20 |
V2 reads page code: your homepage and the pages it links to that we read, with links to contact, booking and quote pages read first. It counts a form, a form or booking widget embedded from a provider we recognize, a link to one of the booking providers, a link to one of the form providers that reads as a way to get in touch, such as "Request a quote" or "Contact us" (a link to new patient paperwork does not count), and a link with booking wording such as "Book now" or "Schedule service". Form providers: LeadConnector (GoHighLevel), LeadConnector on an agency domain, HubSpot forms, Jotform, Typeform, Formstack, Cognito Forms, Wufoo, Google Forms, Microsoft Forms, Demand IQ. Booking providers: LeadConnector (GoHighLevel) calendars, LeadConnector calendars on an agency domain, HubSpot meetings, Calendly, Acuity Scheduling, Square Appointments, Setmore, Zocdoc, NexHealth, LocalMed, Weave, Solutionreach, Flex Dental, Housecall Pro, ServiceTitan Scheduling Pro, ServiceTitan Schedule Engine (legacy), Jobber, Vagaro, Boulevard, Mangomint, GlossGenius, Booksy, Schedulicity, Jane, Aesthetic Record, AestheticsPro, Moxie, Podium booking. We do not run your page's scripts, so a form embedded from a provider not on this list, a form your site's own scripts build after the page loads, or a form a tag manager adds would not show here, and V2 can fire on a site that has such a form.
The math
For each of the low, middle and high bands, the share of your search visits at risk combines the findings rather than adding them:
share = 1 - (1 - p1) x (1 - p2) x ... x (1 - pn)
customers lost a month = visitors x search share of visitors x share x close rate
monthly cost = customers lost x value of a customer
The headline is the middle band, with the low and high bands as the range. Each finding's own amount splits the middle estimate by its weight, -ln(1 - p), so the amounts add up exactly to the headline. The business-type presets are starting assumptions: change them to your own numbers and everything recalculates in your browser.
Our ROI calculator spreads the recovery of the middle estimate over twelve months: 10% a month in months 1 to 3, 40% a month in months 4 to 6 and 80% a month in months 7 to 12. Our illustrative assumption for how fast fixed findings stop costing you, not a measurement and not a forecast. Every step can be changed in the calculator.
- Months 1 to 3: 10% of the estimate recovered each month
- Months 4 to 6: 40% of the estimate recovered each month
- Months 7 to 12: 80% of the estimate recovered each month
How we pick a recommendation
Effort is the sum of each finding's minutes. The first rule that matches wins:
- No findings that need action: no plan. Watching the site weekly is the useful next step.
- Up to 12 hours of work and no local or conversion findings: Fix Sprint.
- Not a local business and more than 12 hours of work: Roadmap Audit, then Growth.
- A local business with AI search findings: Growth.
- A local business with local findings: Local.
- Any business, local or not, with conversion findings (such as no tap-to-call link or no contact form), no local findings, and up to 12 hours of work: Fix Sprint.
- A local business with only technical, content, speed or conversion findings and more than 12 hours of work: Fix Sprint, then GBP Care.
- Anything else: Roadmap Audit, so the fixes happen in the right order.
If your structured data lists more than one street address, Local or Growth adds an Additional location for each extra address.
Saved results and weekly watches
A saved result is the report as it stood on the day of the scan, at a private link, for 30 days. A weekly watch runs the same checks every 7 days and compares them with the week before. It emails only when a high or medium finding appears that the week before did not show, or one the week before showed is no longer found. It leaves out server response time (E4), which changes from hour to hour, and compares real-visitor speed (E1, E2 and E3) only in a week with real-visitor data, and only against the last week that had real-visitor data. A week without it, or with only a lab test, leaves that comparison as it stood. When a scan stops early at our time or request limit, it reports nothing as fixed that week, because it did not read every page.
What the free scan does not measure
- Backlinks and domain authority
- Keyword search volumes
- Google rankings and map-pack position
- Reviews on your Google Business Profile
- Call tracking and lead attribution
- Content that loads by script after the page arrives, such as some financing, booking or chat widgets
Real-visitor speed data comes from Google's Chrome UX Report when your site has enough traffic to be in it. When it does not, we show a single lab test and label it as one. That test gives no reading for responsiveness, so E2 goes unchecked in that report.
How our metro pages are made
Each metro page covers one industry in one metro area: a core-based statistical area as OMB drew them in July 2023. The metros are the 25 most populous metropolitan areas in the Census Bureau's Vintage 2025 population estimates, and every comparison on a page is with those metros, or with those of them where BLS publishes the figure.
Business counts come from County Business Patterns for 2023, which counts establishments with paid employees under an industry code: 621210 for dental offices, 621310 for chiropractic offices, and 238220, plumbing, heating and air-conditioning contractors, where the Census counts HVAC and plumbing contractors together (NAICS index). The change since 2018 adds up the same counties in both years, because some metros took in different counties then. Offices per resident divide the 2023 count by that year's population in the American Community Survey, whose 2024 1-year estimates also give each metro's population, median household income with its margin of error, and share of homes lived in by their owners. Private jobs and pay are 2024 annual averages from the Quarterly Census of Employment and Wages; BLS withholds them for some metros, and stopped publishing metro figures by industry with its third quarter 2025 data (BLS notice).
A page states its figures in order of how far the metro sits from the middle of the list, not in a fixed order, and every sentence it carries is chosen by what its figures show. We publish a page only when it passes all of these, and otherwise ask search engines not to index it:
- At least 6 figures about the place, each with its source and year, at least 3 of them about the industry's own code.
- Copy made from those figures: the facts in order of that distance, and every figure in the sentences written from them one of its own figures, a comparison computed from them, or a national average labeled as one.
- At least 40% of the sentences written from its figures found on no other metro page, reading every place name as the same word, so a sentence counts only when its figures differ.
- No more than 20% of its wording shared with any other page on this site, leaving aside wording that appears on three or more pages, which is how we check every published page.
- The city in the address, title, heading and structured data is in the state the Census Gazetteer puts it in.
- No ranking promise, no unsourced figure and no hype.
- A full breadcrumb from the home page through the industry and the state to the metro.
- Links up to the industry page, over to our local SEO page and across to 3 to 6 of the nearest metro pages that pass.
- One date: the page's Updated line, its structured data and our sitemap all carry the day its figures or its words last changed.