Sample report

Example report — illustrative data for a fictional business. Your report is written from your own site.

This is what FocalScore writes about a website. The business is made up — Brightleaf Dental, a family dental practice at brightleaf-dental.example — but the report is not mocked up: our real scoring engine scored it and our real report templates drew it, exactly as they do for a site you scan.

Below is the free report in full: the score, what to fix first, the key pages and every finding with its fix. Then four sections of the $49 AI Advanced Report in full, and a list of what else it covers.

The free report

Every scan shows its score straight away. The full report — page by page, every problem with its fix — is free with an email address. No card.

Full report

brightleaf-dental.example

Scanned 2026-10-02 · 6 pages · 11 issues to fix · 41 warnings · 260 passing · 21 for information · 64 couldn't be checked
Why 64 couldn't be checked: 64 didn't apply to this site or found nothing to check. None of them count toward the score.
A solid base, with a few costly gaps. The biggest single fix: Primary CTA above the fold (+1.4 points). Working well: Page title tag, Valid SSL certificate and AI crawlers allowed.
77.4
Grade C+ · out of 100
Built from 312 checks worth 629 points.
A 90+ · B 80+ · C 70+ · D 60+ · F below 60 · How this score is built
Convert & contentmessaging, offer, copy · 20% of your score
72.9
Trustproof you are real · 10% of your score
83.1
Searchhow Google finds you · 16% of your score
83.3
Speed & mobileload time, phones · 21% of your score
84.7
AI readinesshow AI reads you · 14% of your score
73.4
Foundationsecurity, accessibility · 19% of your score
69.1

Phone and desktop

These two numbers cover the same 21 checks, scored twice — once on Google's phone test, once on its desktop test. Any difference between them is the device and nothing else. Your overall score of 77.4 is the whole audit, judged phone-first, because that is how Google indexes your site.

Largest Contentful Paint
3.40 s
Good: 2.50 s or less
phone · real visitors · your page
Cumulative Layout Shift
0.04
Good: 0.1 or less
phone · real visitors · your page
First Contentful Paint
1.90 s
Good: 1.80 s or less
phone · your page
Phone
56.1/100
The same 21 checks. Measured on Google's phone test.
Desktop
82.9/100
The very same checks. Measured again on Google's desktop test, so any difference is the device and nothing else.
Phone only
86.8/100
19 checks with no desktop equivalent — tap targets, the mobile menu, text size. Not part of the comparison on the left, because there is nothing to compare them with.
Core Web Vitals

Your site does not pass Google's Core Web Vitals assessment. Largest Contentful Paint is 3.4s, against Google's target of 2.5s. All three are measured from real visits across your whole site: this page on its own doesn't get enough traffic for Google to report it separately.

What Google measured, on each device
MeasurementPhoneDesktop
Speed score 64 91 worse on the phone
Largest Contentful Paint 3.4s 1.3s worse on the phone
First Contentful Paint 1.9s 700ms worse on the phone
Server response (TTFB) 610ms 580ms much the same
Interaction delay (INP) 180ms 60ms worse on the phone
Layout shift (CLS) 0.04 0.01 worse on the phone

Everything else in this report reads the same on both — your DNS and mail records, your certificate, your security headers, the words on your pages and the data behind them — so it is checked once, not twice. Findings marked Phone measurement below are the ones scored on both devices; those marked Phone only are the phone-only set.

Fix these first

77.4 → 84
7 of your 52 findings, ranked by what fixing them is worth · 45 more in every open issue below. Each one is repeated in its section with the full fix.
Fix now Primary CTA above the fold +1.4
On a phone the first screen shows the logo, a photo of the waiting room and "Welcome to Brightleaf Dental"; the "Book online" button is a screen and a half further down. Conversion & messaging
Fix now Image alt text +0.8
11 of 27 images have no alt text, including the hero photo on the homepage. Accessibility
Fix soon Tappable phone number +0.8
The phone number in the header is plain text on all 6 pages, so a phone visitor can't tap it to call. Conversion & messaging
Fix now Color contrast +0.8
The light grey text in the fee table on /fees (#9aa5a3 on white) has a contrast of 2.6:1; body text needs 4.5:1. Accessibility
Fix now Overall accessibility / legal risk +0.8
An automated accessibility check found 12 issues across the 6 pages, 3 of them serious. Accessibility
Fix soon Form friction +0.8
The booking form on /contact asks for 9 fields before a first enquiry, 4 of them required — date of birth among them. Conversion & messaging
Fix now Opening states what you do +0.7
The homepage opens with "Welcome to Brightleaf Dental"; the first sentence that says what the practice does comes 240 words further down. AI readiness

Key pages

9 of 10 found
The pages every business site needs, and what we found on brightleaf-dental.example. A summary of checks already in this report. It adds nothing to your score and takes nothing away.
PageStatusPage foundChecked by
HomeEssential
Found
/
Products / ServicesEssential
Found
/treatments
ContactEssential
Found
/contact
About usStrongly recommended
Found
/about
Privacy policyEssential when collecting personal data
Found
/privacy
Terms & conditionsImportant for purchases or online services
Found
/terms
FAQRecommended
Missing
—
Testimonials / case studiesRecommended
Found
/about
#48#302 not run
Pricing / quoteRecommended
Found
/fees
404 pageEssential
Found
—
Every open issue: all 52, ranked
1 Fix now Primary CTA above the fold +1.4
Conversion & messaging
2 Fix now Image alt text +0.8
Accessibility
3 Fix soon Tappable phone number +0.8
Conversion & messaging
4 Fix now Color contrast +0.8
Accessibility
5 Fix now Overall accessibility / legal risk +0.8
Accessibility
6 Fix soon Form friction +0.8
Conversion & messaging
7 Fix now Opening states what you do +0.7
AI readiness
8 Fix now Buyer questions covered +0.7
AI readiness
9 Fix soon Thin content +0.7
Content quality
10 Fix soon Entity / structured data for AI +0.7
AI readiness
11 Fix soon Service structured data +0.7
AI readiness
12 Fix soon Say which areas you cover +0.7
AI readiness
13 Fix now Largest Contentful Paint (LCP) +0.6
Speed phone
14 Fix now Form field labels +0.6
Accessibility
15 Fix soon Button copy states the outcome +0.6
Conversion & messaging
16 Fix soon Every page offers a next step +0.6
Conversion & messaging
17 Fix soon One main button at the top of each page +0.6
Conversion & messaging
18 Fix soon Tap target size / spacing +0.6
Mobile phone only
19 Fix now Broken internal links +0.5
Search
21 Fix soon Unoptimized images +0.4
Speed phone
22 Fix now Google Business / NAP +0.4
Trust & credibility
23 Fix now Refusing cookies is as easy as accepting +0.4
Trust & credibility
24 Fix soon Q&A / FAQ content +0.4
AI readiness
25 Fix soon Meta description +0.4
Search
26 Fix soon Per-page titles & descriptions +0.4
Search
27 Fix soon Address and map pin are usable +0.4
Search
28 Fix soon Mobile vs desktop speed gap +0.4
Mobile phone only
29 Fix soon Image alt text sitewide +0.4
Accessibility
30 Fix soon Form autofill support +0.4
Accessibility
31 Fix soon Alt text says what the picture shows +0.4
Accessibility
32 Fix soon DKIM / DMARC +0.3
Security & privacy
33 Fix soon Legal business name shown +0.3
Trust & credibility
34 Fix soon Testimonials name a real person +0.3
Trust & credibility
35 Fix soon Health, legal and money advice names a qualified reviewer +0.3
Trust & credibility
36 Fix soon Share previews on inner pages +0.3
Search
37 Fix soon Content-Security-Policy strength +0.3
Security & privacy
38 Fix soon Clickjacking protection +0.3
Security & privacy
39 Nice to have Open Graph / Twitter cards +0.3
Search
40 Fix soon LCP image loading strategy +0.2
Speed phone
41 Fix soon Render-blocking resources +0.2
Speed phone
42 Fix soon Total page weight +0.2
Speed phone
43 Fix soon Modern & responsive images +0.2
Speed phone
44 Fix soon Photos aren't bigger than the space they fill +0.2
Speed phone
45 Fix soon HSTS policy strength +0.2
Security & privacy
46 Fix soon MTA-STS policy enforces +0.2
Security & privacy
47 Nice to have Skip-to-content link +0.2
Accessibility
48 Nice to have Accessibility statement +0.1
Trust & credibility
49 Nice to have Security contact (security.txt) +0.1
Security & privacy
50 Nice to have CAA records +0.1
Security & privacy
51 Nice to have DNSSEC +0.1
Security & privacy
52 Nice to have You hear about failed secure email delivery (TLS-RPT) +0.1
Security & privacy

Conversion & messaging

60.5/100
18 passed · 6 to fix · 1 for information · 12% of your score
FIX Button copy states the outcome Fix soon+0.6
The homepage's main button reads "Contact us". It doesn't say what happens next.
FixWrite buttons as the outcome the visitor gets ("Get my quote", not "Submit"), and add a short reassurance such as "No card required".Plain-English guide: How to turn more website visitors into enquiries
FIX Tappable phone number Fix soon+0.8
The phone number in the header is plain text on all 6 pages, so a phone visitor can't tap it to call.
FixWrap your phone number in a tel: link: an <a href="tel:…"> tag with your full number, country code first, after "tel:". On a phone that becomes one tap to call; as plain text the visitor has to memorise it and dial by hand, and most won't.Plain-English guide: How to turn more website visitors into enquiries
Learn more: RFC 3966: The tel URI for telephone numbers https://www.rfc-editor.org/rfc/rfc3966.html
WARN Primary CTA above the fold Fix now+1.4
On a phone the first screen shows the logo, a photo of the waiting room and "Welcome to Brightleaf Dental"; the "Book online" button is a screen and a half further down.
FixAdd one obvious primary call-to-action above the fold so visitors know the next step.Plain-English guide: The pages every small-business website needs
WARN Form friction Fix soon+0.8
The booking form on /contact asks for 9 fields before a first enquiry, 4 of them required — date of birth among them.
FixCut form fields to the essentials — every extra field lowers completion.Plain-English guide: How to turn more website visitors into enquiries
WARN Every page offers a next step Fix soon+0.6
2 of the 6 pages end without a link or button to book or get in touch: /about and /fees.
FixFinish each page with one line and one link that names the next step - "Get a quote for this", "Book a visit", "Call us". Someone who reads to the bottom of a page is the most interested visitor you will get that day, and a page that just stops hands them nothing to do.
WARN One main button at the top of each page Fix soon+0.6
The top of /treatments offers "Call us", "Email us" and "Book online" side by side, with none of them the obvious first step.
FixChoose the one thing you most want a visitor to do on that page and make it the only solid button at the top — "Get a quote", "Book a visit". Keep at most one quieter second option beside it (an outline button or a plain link, such as "See our work"), and move the rest further down the page. When three buttons shout at once, visitors hesitate, and a visitor who hesitates usually leaves.Plain-English guide: How to turn more website visitors into enquiries
FOR INFO Error tracking installed Not scored
Checked on the 6 pages we read. It flags never - reported only when an error-tracking tool can be seen in the page's own code — none found.
18 passed: show what we checked
PASS Pricing visibility
Prices on /fees: "Check-up and clean £45", "Emergency appointment from £60".
PASS Menu labels are clear
Checked on the 6 pages we read. It flags navigation labels are vague or invented — none found.
PASS 404 page keeps navigation
Checked on the 6 pages we read. It flags the error page strips the menu, leaving visitors with nowhere to go — none found.
PASS Opening hours
Opening hours, Monday to Saturday, on /contact.
PASS Contact form
A booking enquiry form on /contact.
PASS Website analytics installed
Checked on the 6 pages we read. It flags no analytics or tag manager is present, or the only analytics tag is a Google Analytics line with an empty src that loads nothing — none found.
PASS Forms tell you what's wrong as you go
Checked on the 6 pages we read. It flags fields give no feedback until the form is submitted, errors show as one message for the whole form rather than beside each field, or the message is shown but a screen reader is not told (the field is not marked invalid with the message linked, and no live region carries it) — none found.
PASS Products / services page
Treatments listed on /treatments: check-ups, hygiene, fillings, crowns, whitening and emergency care.
PASS Autoplay media with sound
Checked on the 6 pages we read. It flags video or audio plays unprompted — none found.
PASS 404 page offers a way onward
Checked on the 6 pages we read. It flags the error page has no search box and no useful links — none found.
PASS 404 page is branded
Checked on the 6 pages we read. It flags the error page is the web server's default, not yours — none found.
PASS Consistent navigation
Checked on the 6 pages we read. It flags the menu changes from page to page — none found.
PASS Consistent button styling
Checked on the 6 pages we read. It flags buttons use many different treatments — none found.
PASS Main menu is short enough to scan
Checked on the 6 pages we read. It flags the main menu carries more than nine top-level items — none found.
PASS The menu shows which page you are on
Checked on the 6 pages we read. It flags no page highlights its own entry in the menu — none found.
PASS Your main button says the same thing on every page
Checked on the 6 pages we read. It flags the button in the site header has different wording, or a different style, on different pages for the same destination — none found.
PASS Slow actions show they're working
Checked on the 6 pages we read. It flags a search that takes longer than a second to answer shows no loading indicator while it works — none found.
PASS Shoppers can sign up to hear from you
Checked on the 6 pages we read. It flags never fails; a shop or publisher has no email signup form or mailing-list provider on any crawled page (other sites are not asked) — none found.
8 couldn't be checked: see why
  • Help centre or knowledge base This isn't a software product, so there was nothing to check.
  • Visitors can search the site The site has no search box, so there was nothing to check.
  • Sold-out products lead somewhere The site sells nothing online, so there was nothing to check.
  • The cart keeps items when shoppers come back The site sells nothing online, so there was nothing to check.
  • Site search forgives typos The site has no search box, so there was nothing to check.
  • Analytics counts every page in an app-style site The site isn't a single-page app, so there was nothing to check.
  • Shipping cost shown before checkout The site sells nothing online, so there was nothing to check.
  • A search with no results still offers a way forward The site has no search box, so there was nothing to check.

Trust & credibility

83.1/100
32 passed · 6 to fix · 10% of your score
WARN Google Business / NAP Fix now+0.4
The address is "12 Otley Road, Leeds" on the homepage and "12 Otley Rd, Headingley" on /contact — no postcode in either, so the two don't match the listing Google holds.
FixClaim and link your Google Business Profile and keep Name/Address/Phone identical everywhere.Plain-English guide: Getting your business details right for Google Maps and AI assistants
Learn more: Google Business Profile Help: Guidelines for representing your business https://support.google.com/business/answer/3038177
WARN Refusing cookies is as easy as accepting Fix now+0.4
The cookie banner has an "Accept all" button on its first screen; refusing takes two more clicks through "Manage preferences".
FixPut a "Reject all" button beside "Accept all", the same size and style. UK and EU regulators are explicit that refusing must be no harder than consenting - burying it behind "manage preferences" is the specific pattern they have been issuing fines over.
WARN Legal business name shown Fix soon+0.3
No registered business name on any page; the footer says only "© Brightleaf Dental".
FixShow your business's full legal name, with its legal form (LLC, Inc., Ltd, GmbH…), in the footer or copyright line and on your terms or contact page. Some countries ask for more: UK companies, for example, must also show their company number, where they are registered and their registered office address. Check what applies where you are registered.
WARN Testimonials name a real person Fix soon+0.3
The three reviews on /about are signed with initials only ("J.M., Headingley").
FixAdd a full name, role and company to each testimonial, and a photo where you can. An unattributed quote reads as something you wrote yourself - a named one from a real customer is the whole reason testimonials work.
WARN Health, legal and money advice names a qualified reviewer Fix soon+0.3
/treatments gives health advice ("how to look after a new filling") without naming the dentist who wrote or checked it.
FixAdd a line under the byline saying who checked the advice and what qualifies them - "Reviewed by Dr Jane Okafor, MBChB, GMC 1234567" or "Reviewed by Tom Ellis, solicitor, SRA 512345". On health, legal and money topics that line is what Google's own raters are told to look for, and what an AI assistant weighs before quoting you.
WARN Accessibility statement Nice to have+0.1
No accessibility statement on the site.
FixPublish an accessibility statement saying what standard you aim for, any known problems, and how someone can report a barrier. It is expected of public-sector sites and increasingly asked for in tenders - and it is the page a disabled customer looks for before deciding to persevere.
32 passed: show what we checked
PASS Visible contact info
Phone number, email and street address on the homepage and on /contact.
PASS Privacy policy page loads
The privacy policy at /privacy loads (200).
PASS Contact details in the header or footer
Checked on the 6 pages we read. It flags no page's header or footer carries a phone, email or address, and none appear anywhere on the site, fails; warns when they never appear in the header or footer, some pages lack them there, or a local or service business shows only an email there — none found.
PASS Your email address can receive mail
Checked on the 6 pages we read. It flags a published email address has no mail routing — none found.
PASS Content loads without accepting cookies
Checked on the 6 pages we read. It flags a visitor who has not accepted cookies is served the consent notice instead of the page — none found.
PASS Testimonials / reviews on site
Three patient reviews quoted on /about.
PASS Trust badges / guarantees
Checked on the 6 pages we read. It flags none present — none found.
PASS About / team page
An About page at /about introduces the practice and its two dentists.
PASS Privacy policy & terms
Privacy policy and terms both linked from the footer of every page.
PASS Cookie consent banner
Checked on the 6 pages we read. It flags missing where required — none found.
PASS Privacy policy is substantive
The privacy policy at /privacy runs to 1,310 words and covers what is collected and why.
PASS Data-request route
Checked on the 6 pages we read. It flags the privacy policy never says how someone can ask for or delete their data — none found.
PASS Cookie policy
Checked on the 6 pages we read. It flags the site sets tracking cookies but publishes no cookie policy — none found.
PASS Contact details match your markup
Checked on the 6 pages we read. It flags the phone or address in your code differs from the visible one — none found.
PASS Privacy notice on forms
Checked on the 6 pages we read. It flags a form collects personal data with no privacy notice — none found.
PASS Authoritative profile links
Checked on the 6 pages we read. It flags sameAs links point at no independently maintained profile, or every profile the site links to answers 'page not found' — none found.
PASS Terms page has real content
The terms page at /terms has real content: appointments, cancellations and payment.
PASS Accreditations carry a registration number
Checked on the 6 pages we read. It flags a scheme is claimed with no number to check it against — none found.
PASS Privacy policy states a lawful basis
Checked on the 6 pages we read. It flags a policy written to UK/EU rules never says on what lawful basis it processes personal data — none found.
PASS Privacy policy states retention periods
Checked on the 6 pages we read. It flags the policy never says how long personal data is kept, or what decides how long — none found.
PASS Privacy policy matches the rules you trade under
Checked on the 6 pages we read. It flags a business whose site shows where it trades (the UK, the EU, California or Canada) has a policy naming only another jurisdiction's privacy law — none found.
PASS The numbers you quote agree with each other
Checked on the 6 pages we read. It flags two pages give different counts for the same thing — none found.
PASS Cookie lifetimes match the policy
Checked on the 6 pages we read. It flags a cookie outlives the duration its own cookie policy states for it — none found.
PASS Your headline numbers are backed up on the site
Checked on the 6 pages we read. It flags the site quotes a figure about itself (customers served, projects finished, reviews, satisfaction) and nothing on the site lets a visitor check it — none found.
PASS Social media presence
Checked on the 6 pages we read. It flags no profile links, placeholder links, or social icons that link nowhere — none found.
PASS Stale / dated content
Checked on the 6 pages we read. It flags old copyright or visible dates — none found.
PASS Policy last-updated date
Checked on the 6 pages we read. It flags the policy shows no last-updated or effective date — none found.
PASS YouTube privacy-enhanced embeds
Checked on the 6 pages we read. It flags YouTube embeds set tracking cookies before consent — none found.
PASS How long you have been trading
"Caring for Headingley since 2009" on /about.
PASS Disclaimer where the advice needs one
Checked on the 6 pages we read. It flags a site giving health, legal or financial guidance publishes no disclaimer — none found.
PASS The year you started is the same everywhere
Checked on the 6 pages we read. It flags two pages state different years for when the business began — none found.
PASS Who runs the business is named the same everywhere
Checked on the 6 pages we read. It flags two pages name different people as the business's chief executive or managing director — none found.
6 couldn't be checked: see why
  • Status page This isn't a software product, so there was nothing to check.
  • Your ad inventory is authorised (ads.txt) The site shows no adverts, so it needs no ads.txt.
  • Client, partner or press logos No client logos, case studies or quoted research on the pages we read.
  • Logo row links to the story behind it No client logos, case studies or quoted research on the pages we read.
  • Case studies quantify the outcome No client logos, case studies or quoted research on the pages we read.
  • Star ratings are not self-awarded No star ratings on the site, so there was nothing to check.

Content quality

91.7/100
15 passed · 1 to fix · 8% of your score
WARN Thin content Fix soon+0.7
/fees has 96 words of text — a price list with nothing about what each visit includes.
FixExpand thin pages with the information buyers need to decide.
Learn more: Google Search Central: Creating helpful, reliable, people-first content https://developers.google.com/search/docs/fundamentals/creating-helpful-content
15 passed: show what we checked
PASS Readability level
Checked on the 6 pages we read. It flags too complex (Flesch) — none found.
PASS A page comparing you with the alternatives
Checked on the 6 pages we read. It flags no page compares the business with the alternatives a buyer is also weighing up — none found.
PASS Declared language matches the content
Checked on the 6 pages we read. It flags the lang attribute names a different language than the text — none found.
PASS Prices quoted elsewhere match your pricing page
Checked on the 6 pages we read. It flags a page quotes a price for a named plan or package that differs from the price the pricing page gives it, or two pages give one plan two prices — none found.
PASS Duplicate content
Checked on the 6 pages we read. It flags two pages share 80% or more of their wording, setting aside the menu, header and footer; warns at 60–79%, when two pages share one title and main heading, when a page repeats the same 25-word passage, or when 3 or more passages of 40+ words appear on more than one indexable page — none found.
PASS Spelling & grammar
Checked on the 6 pages we read. It flags placeholder text such as lorem ipsum or TODO is live on a page; warns on a placeholder image (placehold.co, via.placeholder.com, dummyimage.com, picsum.photos, or a file named placeholder.* or dummy.*), when the page title or meta and share tags still carry website-template words, or when the text has a known misspelling or a doubled word — none found.
PASS Content freshness
Checked on the 6 pages we read. It flags stale / no new content — none found.
PASS Brand description consistent
Checked on the 6 pages we read. It flags site descriptions disagree with each other — none found.
PASS Outbound link health
Checked on the 6 pages we read. It flags a link to another website answers 404 or 410, points at a domain that no longer exists, or lands on a domain-for-sale page (social networks are not counted) — none found.
PASS Long pages split into sections
Checked on the 6 pages we read. It flags warns (never fails) when a page of 600+ words has fewer than two H2/H3 subheadings or runs over 400 words without one, or when a homepage of 150–599 words has no H2/H3 at all — none found.
PASS Comparison tables and step lists
Checked on the 6 pages we read. It flags content is unbroken prose with no tables or lists — none found.
PASS Key structure near the top
Checked on the 6 pages we read. It flags tables and lists are buried at the foot of long pages — none found.
PASS Headline and first subheading differ
Checked on the 6 pages we read. It flags the H1 and the first H2 say the same thing — none found.
PASS Stale year in a title or heading
Checked on the 6 pages we read. It flags a heading advertises a year that has passed — none found.
PASS How old your photographs are
Checked on the 6 pages we read. It flags the photos on the homepage were taken years ago — none found.
9 couldn't be checked: see why
  • Published and updated dates No blog, news or articles on the pages we read, so there was nothing to date.
  • Changelog or release notes This isn't a software product, so there was nothing to check.
  • Publishing is current No blog, news or articles on the pages we read, so there was nothing to date.
  • Editorial standards published No blog, news or articles on the pages we read, so there was nothing to date.
  • PDFs have web page equivalents No PDFs are linked from the pages we read.
  • Research claims name their source No client logos, case studies or quoted research on the pages we read.
  • Offers that have already ended No blog, news or articles on the pages we read, so there was nothing to date.
  • Borrowed figures say when they are from No client logos, case studies or quoted research on the pages we read.
  • Cited sources say what you quote them saying No client logos, case studies or quoted research on the pages we read.

AI readiness

73.4/100
21 passed · 6 to fix · 9 for information · 14% of your score
FIX Opening states what you do Fix now+0.7
The homepage opens with "Welcome to Brightleaf Dental"; the first sentence that says what the practice does comes 240 words further down.
FixOpen the page with one plain sentence saying what you do and who for. AI assistants quote that sentence when recommending you.Plain-English guide: The pages every small-business website needs
Learn more: Google Search Central: Creating helpful, reliable, people-first content https://developers.google.com/search/docs/fundamentals/creating-helpful-content
WARN Buyer questions covered Fix now+0.7
Of eight questions a new patient typically asks, the site answers four (prices, location, opening hours, treatments). Not answered: same-day emergency appointments, NHS places, payment plans, what a first visit involves.
FixAnswer the eight questions every buyer asks — what it is, who for, pricing, how it works, alternatives, integrations, security, support — in plain text.Plain-English guide: How to get your business recommended by ChatGPT and other AI assistants
WARN Entity / structured data for AI Fix soon+0.7
The homepage carries Organization markup but no Dentist or LocalBusiness type, so an assistant can't read the address, hours or phone number from it.
FixAdd Organization structured data (name, logo, website, contact, and the profiles that are really yours) so machines reading your site can tell exactly which business it describes. Mark up products or services only where the page actually shows them.Plain-English guide: How to get your business recommended by ChatGPT and other AI assistants
Learn more: Google Search Central: Organization structured data https://developers.google.com/search/docs/appearance/structured-data/organization
WARN Q&A / FAQ content Fix soon+0.4
No question-and-answer content on any of the 6 pages we read.
FixAnswer the questions buyers actually ask — price, timing, what's included, where you work — in plain text on your pages. FAQ structured data is optional; the visible answer is what counts.Plain-English guide: The pages every small-business website needs
WARN Service structured data Fix soon+0.7
No Service markup for any of the six treatments listed on /treatments.
FixAdd Service structured data for each thing you do, naming the service, your business as the provider, and the areas you cover. This is the label that tells an AI assistant what you actually do and where - the exact question behind "who does X near me".
WARN Say which areas you cover Fix soon+0.7
The site names Leeds but not the areas it serves — Headingley appears only inside the street address.
FixPublish the towns and areas you cover, as a short list or an "areas we cover" page, and add areaServed to your structured data. "Who does this near me" is the question AI assistants are asked most about trades - without a coverage statement there is nothing for them to match you against.
FOR INFO Wikidata record for the business Not scored
Checked on the 6 pages we read. It flags informational — no Wikidata record names this domain (never scored) — none found.
FOR INFO Crawl delay isn't starving AI crawlers Not scored
Checked on the 6 pages we read. It flags robots.txt throttles the crawlers that honour Crawl-delay beyond any documented value, or sets one that does nothing — none found.
FOR INFO llms.txt present Not scored
Checked on the 6 pages we read. It flags never scored; warns only when a file published at /llms.txt doesn't open with a '# Business name' heading, or the server answers that address with an error (HTTP 5xx); not publishing one costs a site nothing — none found.
Learn more: llmstxt.org: The /llms.txt file https://llmstxt.org/
FOR INFO llms.txt says something useful Not scored
Checked on the 6 pages we read. It flags a file you chose to publish sends readers to somebody else's site, or lists nowhere to go; reported for information and carries no weight — none found.
Learn more: llmstxt.org: The /llms.txt file https://llmstxt.org/
FOR INFO Text and data mining rights Not scored
Checked on the 6 pages we read. It flags a mining declaration is published in a form no agent can read, or waives the rights it means to reserve — none found.
FOR INFO AI content signals Not scored
Checked on the 6 pages we read. It flags the site's stated AI preferences contradict its own robots.txt, or are written in a form no parser reads — none found.
FOR INFO AI opt-out tags Not scored
Checked on the 6 pages we read. It flags a noai or noimageai tag is the site's only AI-training opt-out and robots.txt still lets the training crawlers in — none found.
FOR INFO Your robots.txt says why it turns AI training away Not scored
Checked on the 6 pages we read. It flags nothing - this one is informational and never counts against your score — none found.
FOR INFO Your firewall and robots.txt agree on AI training crawlers Not scored
Checked on the 6 pages we read. It flags nothing - informational and never counts against your score; it warns only when robots.txt turns Bytespider away and your server still hands it the page — none found.
21 passed: show what we checked
PASS AI crawlers allowed
robots.txt lets GPTBot, ClaudeBot, PerplexityBot and Google-Extended read every page.
PASS Content readable without JS
Every page's text is in the HTML the server sends; nothing waits for JavaScript.
PASS Search crawlers allowed
Checked on the 6 pages we read. It flags robots.txt blocks Googlebot, Bingbot or Applebot — none found.
PASS Snippets allowed for AI answers
Checked on the 6 pages we read. It flags the site asks engines not to quote it (nosnippet, or data-nosnippet around the main content); warns on a quote limit shorter than a sentence or max-image-preview:none — none found.
PASS AI crawlers reach your inner pages
Checked on the 6 pages we read. It flags key pages answer differently to an AI crawler than to a browser — none found.
PASS Bot protection isn't blocking AI answers
Checked on the 6 pages we read. It flags a security challenge page is served instead of your content — none found.
PASS Author and expertise signals
Checked on the 6 pages we read. It flags articles carry no author, or only a placeholder byline such as Admin, Staff, a team name or the business itself — none found.
PASS Schema points at your domain
Checked on the 6 pages we read. It flags structured data references a different website — none found.
PASS Valid HTML structure
Checked on the 6 pages we read. It flags the pages parsed (up to 12) have 10 or more structure-breaking HTML errors in total, or errors on at least half of them; warns on fewer errors, or when an id is used twice on one page — none found.
PASS Semantic landmarks across the site
Checked on the 6 pages we read. It flags inner pages have no main/nav/header structure — none found.
PASS Structured data is joined up
Checked on the 6 pages we read. It flags schema entries sit in isolation, never referencing one another — none found.
PASS Link previews get the same page you do
Checked on the 6 pages we read. It flags social scrapers are served different content — none found.
PASS Facts an assistant can quote
Checked on the 6 pages we read. It flags content pages carry no price, date, quantity or measurement to lift — none found.
PASS Named crawler groups keep your Disallow rules
Checked on the 6 pages we read. It flags a section naming a crawler allows a path the catch-all "User-agent: *" section disallows — none found.
PASS Each section answers its own heading
Checked on the 6 pages we read. It flags several ordinary H2 sections don't deliver what their heading promises when read on their own — none found.
PASS Headings can be linked to directly
Checked on the 6 pages we read. It flags headings carry no id, so no section has its own address — none found.
PASS Long pages offer a contents list
Checked on the 6 pages we read. It flags a long page is split into sections but nothing links to them — none found.
PASS Questions buyers type that your site answers
Checked on the 6 pages we read. It flags several of the questions a buyer asks before choosing have no answer anywhere on the site — none found.
PASS The facts you publish match the public record
Checked on the 6 pages we read. It flags the founding year, head office or chief executive on the site differs from the Wikidata item for the same domain — none found.
PASS Lighthouse's Agentic Browsing score
Checked on the 6 pages we read. It flags warns (never fails) when Lighthouse's Agentic Browsing category scores the homepage under 90 — on Google's phone test, or on its desktop test when the phone test ended on another site — none found.
PASS Answers name the business
Checked on the 6 pages we read. It flags several FAQ or question-heading answers open with "we", "it" or "they" and never say who that is — none found.
14 couldn't be checked: see why
  • How AI describes your business No AI-visibility reading was taken for this scan.
  • AI citation / mention tracking No AI-visibility reading was taken for this scan.
  • Answers under question headings No question-and-answer content on the site to check.
  • Questions answered in the page source No question-and-answer content on the site to check.
  • API documentation published This isn't a software product, so there was nothing to check.
  • Machine-readable API spec This isn't a software product, so there was nothing to check.
  • Answers survive being quoted alone No question-and-answer content on the site to check.
  • How long the answers are No question-and-answer content on the site to check.
  • Content feed published No blog, news or articles on the pages we read, so there was nothing to date.
  • Video transcripts No events, job adverts or videos on the pages we read.
  • Author credentials No blog, news or articles on the pages we read, so there was nothing to date.
  • Answers aren't locked behind interaction No question-and-answer content on the site to check.
  • Your glossary is marked up as definitions No question-and-answer content on the site to check.
  • Step-by-step guides are marked up as steps No question-and-answer content on the site to check.

Search

83.3/100
50 passed · 7 to fix · 3 for information · 16% of your score

Indexing & crawl35 checks · 1 to fix

FIX Broken internal links Fix now+0.5
1 broken link: "Meet the team" on /about points to /team, which answers 404.
FixFix or redirect broken links — they waste crawl budget and frustrate visitors.
Learn more: Google: How HTTP status codes affect Google's crawlers https://developers.google.com/crawling/docs/troubleshooting/http-status-codes
FOR INFO Sitemap priority and changefreq Not scored
Checked on the 6 pages we read. It flags nothing - this is reported for information and carries no weight; Google ignores both tags, so neither keeping them nor dropping them can cost a site anything — none found.
FOR INFO IndexNow key file is valid Not scored
Checked on the 6 pages we read. It flags nothing - informational; it warns only when your site points at an IndexNow key file that is missing or does not contain its own name — none found.
FOR INFO Your site is connected to Google Search Console Not scored
Checked on the 6 pages we read. It flags for information only: no Google Search Console verification was found in the homepage or the domain's DNS (Search Console can also be verified through Google Analytics, Tag Manager or an uploaded file, so this is never scored) — none found.
Learn more: Search Console Help: Verify your site ownership https://support.google.com/webmasters/answer/9008080
31 passed: show what we checked
PASS robots.txt
Checked on the 6 pages we read. It flags the site has no robots.txt, the file fails to deliver (a 5xx, which crawlers read as a full block), its rules cover pages you publish, or it has a line Google's PageSpeed test marks as not valid — none found.
PASS Indexability
Checked on the 6 pages we read. It flags the homepage is marked noindex for Google or for all search engines, more than half the pages are, or Google's PageSpeed test finds a script adding noindex, fails; warns when fewer pages are, a noindex targets only another crawler, or a made-up address doesn't answer 404 — none found.
PASS HTTPS enforced
http:// redirects to https:// on every address we tried.
PASS Sitemap URLs actually work
Checked on the 6 pages we read. It flags a quarter or more of the sitemap entries we sampled or our crawl reached return errors (fewer warns); also warns when entries redirect to another address — none found.
PASS Rendering files are crawlable
Checked on the 6 pages we read. It flags robots.txt blocks Googlebot from a quarter or more of the homepage's own stylesheets, scripts and images fails; fewer warns (files on other hosts aren't judged) — none found.
PASS Preview environments kept out of search
Checked on the 6 pages we read. It flags a staging or preview site is publicly indexable — none found.
PASS No live page says "not found"
Checked on the 6 pages we read. It flags a working page shows not-found wording — none found.
PASS Search engines get the same page your visitors get
Checked on the 6 pages we read. It flags asked for the homepage as Google's phone crawler, the server sends a different page: one that ends on another website, links to 3 or more websites the visitors' copy never mentions, or has a different title and shares under 30% of its words (warns on a different title, a noindex only the crawler gets, or text half the length) — none found.
PASS No hidden links to other websites
Checked on the 6 pages we read. It flags 3 or more links on the homepage go to other websites while a visitor cannot see them: placed far off the page, shrunk to nothing, in the background's colour, or hidden by a style written into the served HTML (warns on 1 or 2); menus, pop-ups, carousels and tabs are left out — none found.
PASS XML sitemap
Checked on the 6 pages we read. It flags missing / not referenced — none found.
PASS Canonical tags
Checked on the 6 pages we read. It flags a page has several canonical tags, an invalid one, HTML and header canonicals that disagree, or one naming a broken page or another language version, or over half the pages lack a correct one, fails; warns on a missing, body-placed, relative, redirecting, noindex or other-page canonical — none found.
PASS Social preview image is crawlable
Checked on the 6 pages we read. It flags robots.txt blocks the image used for link previews — none found.
PASS Sitemap URLs are indexable
Checked on the 6 pages we read. It flags warns when sitemap entries are marked noindex or name a canonical elsewhere, the sitemap leaves out indexable pages the crawl reached, or a sampled entry is a working page no crawled page links to — none found.
PASS Consistent URL capitalisation
Checked on the 6 pages we read. It flags the same page is linked with different capitalisation — none found.
PASS The sitemap in robots.txt loads
Checked on the 6 pages we read. It flags the sitemap robots.txt names answers an HTTP 4xx or 5xx error fails; warns when it isn't well-formed sitemap XML, lacks the sitemaps.org namespace, has relative or off-site entries, or exceeds 50,000 addresses or 50 MB — none found.
PASS The www version of your address works
Checked on the 6 pages we read. It flags www does not resolve while the plain address does — none found.
PASS Canonical tag uses your secure address
Checked on the 6 pages we read. It flags an https page's canonical names the http:// address — none found.
PASS Everything is a few clicks from the homepage
Checked on the 6 pages we read. It flags pages sit more than three clicks from the homepage — none found.
PASS Pages that worked last time still work
Checked on the 6 pages we read. It flags an address that answered on the previous scan now returns not found — none found.
PASS Old page addresses still work
Checked on the 6 pages we read. It flags addresses the Internet Archive saved working copies of now return not found — none found.
PASS Each page answers at one address
Checked on the 6 pages we read. It flags another address for the same page (an index alias such as /Home or /index.php, a made-up query parameter, or the address in capitals) shows the page with no redirect and no canonical naming the proper address, and the site's own pages link to that copy (warns when nothing links to it) — none found.
PASS No hidden text or stuffed keywords
Checked on the 6 pages we read. It flags 1,000 or more characters of homepage text are hidden from visitors (placed far off the page, shrunk to nothing, set in a near-zero font size, or in the background's colour); warns from 200 characters, or when one word is 8% or more of 250+ words of running text and appears 20 times or more; menus, pop-ups, tabs and screen-reader text are left out — none found.
PASS Redirect chains / loops
Checked on the 6 pages we read. It flags >1 hop to final URL — none found.
PASS Internal linking / orphan pages
Checked on the 6 pages we read. It flags important pages weakly linked — none found.
PASS Sitemap freshness dates
Checked on the 6 pages we read. It flags sitemap entries carry no lastmod, or it never changes — none found.
PASS Internal links point at final addresses
Checked on the 6 pages we read. It flags internal links go through redirects instead of the destination — none found.
PASS Internal links are clean
Checked on the 6 pages we read. It flags warns when links between your own pages carry tracking parameters (utm_, gclid, fbclid, mc_, msclkid, _ga, ref, source), or, on an https site, point at http:// addresses — none found.
PASS Search engines are allowed to follow your links
Checked on the 6 pages we read. It flags the homepage carries nofollow (or none) in a robots meta tag or the X-Robots-Tag header fails; warns when another page does, or links to your own pages carry rel="nofollow" — none found.
PASS No pages redirect with a meta refresh
Checked on the 6 pages we read. It flags a page sends visitors to another address with a meta refresh, at any delay, fails; warns when a meta refresh reloads the same page — none found.
PASS Pages with no reason to be in search are kept out
Checked on the 6 pages we read. It flags a cart, account, search-results or confirmation page - or a near-empty tag, author or date archive - is left indexable — none found.
PASS Your addresses are easy to read
Checked on the 6 pages we read. It flags addresses use underscores, capital letters, double slashes or deep nesting — none found.

Search basics25 checks · 6 to fix

FIX Local business details in structured data Fix soon+0.4
No LocalBusiness or Dentist markup with an address on any page.
FixExtend your LocalBusiness structured data with opening hours, the areas you serve, your phone number and price range. These are the fields Google reads when deciding whether to show you for "near me" searches.Plain-English guide: Getting your business details right for Google Maps and AI assistants
Learn more: Google Search Central: Local business structured data https://developers.google.com/search/docs/appearance/structured-data/local-business
WARN Meta description Fix soon+0.4
2 of the 6 pages have no meta description: /fees and /privacy.
FixWrite a unique meta description of about 150 characters for each page that earns the click.Plain-English guide: How your business shows up in Google: titles, descriptions and headings
Learn more: Google Search Central: Snippets in search results https://developers.google.com/search/docs/appearance/snippet
WARN Per-page titles & descriptions Fix soon+0.4
/treatments and /fees share the title "Brightleaf Dental".
FixGive every page its own title under 60 characters and description under about 160, not just the homepage — these are the words people read in search results.Plain-English guide: How your business shows up in Google: titles, descriptions and headings
Learn more: Google Search Central: Title links https://developers.google.com/search/docs/appearance/title-link
WARN Share previews on inner pages Fix soon+0.3
Inner pages fall back to the homepage's share preview: 4 of 5 have no title or image of their own.
FixGive each page its own og:title, og:description and og:image rather than repeating the homepage's. People share the specific page that helped them, not your front page, and a shared link that shows the wrong title and picture gets far fewer clicks.Plain-English guide: How your links look when people share them
Learn more: The Open Graph protocol https://ogp.me/
WARN Address and map pin are usable Fix soon+0.4
The map on /contact is a picture of a map: it doesn't link to Google Maps and the address isn't beside it as text.
FixCorrect the address and map coordinates in your structured data - check #142 confirms the fields exist, but the values themselves don't hold up. A pin at 0,0 puts your business in the Atlantic, and an address with no town cannot be matched to a place at all.Plain-English guide: Getting your business details right for Google Maps and AI assistants
Learn more: Google Search Central: Local business structured data https://developers.google.com/search/docs/appearance/structured-data/local-business
WARN Open Graph / Twitter cards Nice to have+0.3
4 of the 6 pages have no og:image, so a shared link shows no picture.
FixAdd OG and Twitter Card tags so shared links show a title, description, and image.Plain-English guide: How your links look when people share them
Learn more: The Open Graph protocol https://ogp.me/
19 passed: show what we checked
PASS Page title tag
Checked on the 6 pages we read. It flags the homepage has no <title> in its <head> (one that sits only in the page body included) fails; warns when there are two or more titles, the title is added by a script, it's a placeholder, the bare domain or the business name alone, it's one word or under 10 characters, it repeats a word three times, it's over 60 characters, or another page uses the same title — none found.
PASS H1 & heading structure
Checked on the 6 pages we read. It flags the homepage has no <h1>, or every <h1> on it is empty, fails; warns when it has more than one, the <h1> runs over 120 characters or 20 words, or it's only a welcome line or the business name — none found.
PASS Structured data present
Checked on the 6 pages we read. It flags no schema.org markup — none found.
PASS One H1 per page
Checked on the 6 pages we read. It flags more than a third of the inner pages have no <h1>, an empty one or several fails; fewer warns, as does an inner page whose <h1> reads like a paragraph or says nothing about the page — none found.
PASS Schema type names spelled correctly
Checked on the 6 pages we read. It flags a structured-data type name is misspelled — none found.
PASS Links and buttons built properly
Checked on the 6 pages we read. It flags 5 or more clickable divs or spans, or 12 or more such boxes and unfollowable links together, fails; fewer warns, as do buttons whose onclick only navigates to another page — none found.
PASS Two pages don't chase the same search
Checked on the 6 pages we read. It flags two different indexable pages are titled and headed for the same search — none found.
PASS Structured data valid
Checked on the 6 pages we read. It flags a structured-data block is broken JSON fails; warns when an item has no @type, a page's markup has no @context, an Organization, LocalBusiness or WebSite entry has no name or url, or a property is left empty — none found.
PASS Heading hierarchy
Checked on the 6 pages we read. It flags more than a third of the pages skip a heading level fails; fewer warns, as does a page that repeats the same heading — none found.
PASS Descriptive link text
Checked on the 6 pages we read. It flags generic "click here" links — none found.
PASS Breadcrumb navigation
Checked on the 6 pages we read. It flags inner pages have no breadcrumb trail — none found.
PASS Large social preview image
Checked on the 6 pages we read. It flags the Twitter card is set to the small thumbnail layout — none found.
PASS Meta description length
Checked on the 6 pages we read. It flags descriptions are truncated or too short to earn the click — none found.
PASS Your site has a tab icon
Checked on the 6 pages we read. It flags no favicon is declared and /favicon.ico does not load as an image — none found.
PASS Your title and description use the words your page is about
Checked on the 6 pages we read. It flags the page's most frequent words appear in neither the title nor the description — none found.
PASS No out-of-date HTML tags
Checked on the 6 pages we read. It flags the homepage is a frame around another site, a page carries Flash, Silverlight or Java plugin content, or uses marquee, blink, applet, frameset, frame, bgsound, isindex or plaintext, fails; warns on presentational tags like font, center or big — none found.
PASS One search goal per page
Checked on the 6 pages we read. It flags a page's title and headings aim at two or more different kinds of searcher at once — none found.
PASS Structured data entries are complete
Checked on the 6 pages we read. It flags warns when breadcrumb, article, rating, review, recipe, dataset or FAQ markup lacks a field Google requires, an Organization logo isn't an image address, a field name has the wrong capitals, or an article lacks an author or datePublished — none found.
PASS Your social preview image is small enough to share
Checked on the 6 pages we read. It flags the og:image file is over 8 MB, Facebook's limit (warns over 5 MB, LinkedIn's limit) — none found.
14 couldn't be checked: see why
  • hreflang correctness The site is in one language, so there was nothing to check.
  • Product and Offer markup The site sells nothing online, so there was nothing to check.
  • Event markup No events, job adverts or videos on the pages we read.
  • Job posting markup No events, job adverts or videos on the pages we read.
  • Video markup No events, job adverts or videos on the pages we read.
  • Software product markup This isn't a software product, so there was nothing to check.
  • Pagination is crawlable No paged or filtered listings on the pages we read.
  • hreflang points both ways The site is in one language, so there was nothing to check.
  • Filter and sort links don't trap crawlers No paged or filtered listings on the pages we read.
  • Page two keeps its own address No paged or filtered listings on the pages we read.
  • Paged listings have their own titles No paged or filtered listings on the pages we read.
  • Filtered listings point back at the real page No paged or filtered listings on the pages we read.
  • Star ratings visitors can actually see No star ratings on the site, so there was nothing to check.
  • Each location has its own business details The site lists one location, so there was nothing to compare.

Speed

83.3/100
54 passed · 7 to fix · 3 for information · 13% of your score

Speed: Google PageSpeed Insights (Lighthouse), run by Google on its own test machines during this scan (2026-10-02 at 08:55 UTC). Phone figures come from its phone test and desktop figures from its desktop test, both of your page.

FIX Largest Contentful Paint (LCP) Phone measurement Fix now+0.6LCP 3.40 s · phone
Largest Contentful Paint is 3.4 s on a phone (Google's real-visitor data for the site); good is 2.5 s or less. The largest element is the homepage hero photo.
FixCompress and resize the hero / above-the-fold image, preload it, and serve WebP or AVIF.Plain-English guide: Why your site is slow, and what to fix first
Learn more: web.dev: Optimize Largest Contentful Paint https://web.dev/articles/optimize-lcp
FIX Unoptimized images Phone measurement Fix soon+0.4
The homepage hero photo is a 1.8 MB JPEG shown 1,200 px wide; 4 more images are over 400 KB.
FixConvert images to WebP/AVIF and serve responsive sizes — usually the single biggest speed win.Plain-English guide: Why your site is slow, and what to fix first
Learn more: web.dev: Browser-level image lazy loading https://web.dev/articles/browser-level-image-lazy-loading
FIX LCP image loading strategy Phone measurement Fix soon+0.2LCP 3.40 s · phone
The hero photo — the page's largest element — is marked loading="lazy", so the browser fetches it late.
FixRemove loading="lazy" from your main banner image and add fetchpriority="high" to it, so the browser fetches it first instead of last.
Learn more: web.dev: Fetch Priority https://web.dev/articles/fetch-priority
WARN Render-blocking resources Phone measurement Fix soon+0.2LCP 3.40 s · phone
2 stylesheets and 1 script hold up the first paint on a phone by about 0.7 s.
FixDefer or async non-critical CSS/JS so the page paints sooner.Plain-English guide: Why your site is slow, and what to fix first
Learn more: Chrome for Developers: Render-blocking requests https://developer.chrome.com/docs/performance/insights/render-blocking
WARN Total page weight Phone measurement Fix soon+0.2
The homepage weighs 3.9 MB on a phone, most of it photos.
FixCompress your images and remove unused scripts. Aim under 1.5MB total — every extra megabyte costs a second or more on a phone connection.Plain-English guide: Why your site is slow, and what to fix first
Learn more: Chrome for Developers: Avoid enormous network payloads https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight
WARN Modern & responsive images Phone measurement Fix soon+0.2LCP 3.40 s · phone
11 of 14 photos are JPEGs at a single size; none has a WebP or AVIF version or a smaller copy for phones.
FixServe images as WebP or AVIF and add srcset so phones download phone-sized files. Most site builders and image plugins do this automatically once switched on.Plain-English guide: Why your site is slow, and what to fix first
Learn more: Chrome for Developers: Improve image delivery https://developer.chrome.com/docs/performance/insights/image-delivery
WARN Photos aren't bigger than the space they fill Phone measurement Fix soon+0.2LCP 3.40 s · phone
6 photos are more than twice the size they are shown at on a phone.
FixSome of your photos are sent to visitors much larger than the space they appear in, so a phone downloads several times more than it shows. Save each one at roughly the size it is displayed and upload it again, or switch on the 'responsive images' option in your site builder or image plugin, which does it for you.Plain-English guide: Why your site is slow, and what to fix first
Learn more: Chrome for Developers: Improve image delivery https://developer.chrome.com/docs/performance/insights/image-delivery
FOR INFO Google's speed score Not scored Phone measurement
Checked on the 6 pages we read. It flags for information only (never scored): Google's speed score is under 50 (warns from 50 to 89), read from its phone test, or from its desktop test when the phone test ended on another site — none found.
Learn more: Chrome for Developers: Lighthouse performance scoring https://developer.chrome.com/docs/lighthouse/performance/performance-scoring
FOR INFO Nothing jumps after loading Not scored CLS 0.04 · phone
Checked on the 6 pages we read. It flags informational — what moves after loading (how much the page shifts is scored in #3) — none found.
Learn more: Chrome for Developers: Layout shift culprits https://developer.chrome.com/docs/performance/insights/cls-culprit
FOR INFO Real-user speed monitoring Not scored
Checked on the 6 pages we read. It flags never - reported only when a real-user monitoring tool can be seen in the page's own code — none found.
54 passed: show what we checked
PASS Interaction to Next Paint (INP) Phone measurement INP 180 ms · phone
Interaction to Next Paint is 180 ms on a phone; good is 200 ms or less.
PASS Text files are compressed
Checked on the 6 pages we read. It flags the homepage HTML, stylesheets and scripts are served uncompressed, or a large amount of text only with gzip — none found.
PASS JavaScript weight on a phone TBT
Checked on the 6 pages we read. It flags the page downloads a lot of JavaScript — none found.
PASS The main image can be found early LCP 3.40 s · phone
Checked on the 6 pages we read. It flags the biggest image is only discoverable after scripts run — none found.
PASS Cumulative Layout Shift (CLS) Phone measurement CLS 0.04 · phone
Cumulative Layout Shift is 0.04 on a phone; good is 0.1 or less.
PASS Time to First Byte (TTFB) Phone measurement TTFB 610 ms · phone
The server answered in 0.6 s.
PASS Homepage HTML size
Checked on the 6 pages we read. It flags the homepage's HTML alone, before images or code, is over 300 KB (warns over 150 KB); also warns when an inner page's HTML is over 300 KB — none found.
PASS No caching / no CDN TTFB 610 ms · phone
Checked on the 6 pages we read. It flags missing cache-control or CDN — none found.
PASS Broken images or assets
Checked on the 6 pages we read. It flags assets returning 404/500 — none found.
PASS JavaScript errors on load
Checked on the 6 pages we read. It flags uncaught errors in the console — none found.
PASS Third-party script load TBT
Checked on the 6 pages we read. It flags too many external origins — none found.
PASS Unused JavaScript & CSS Phone measurement TBT
Checked on the 6 pages we read. It flags large unused bundles shipped — none found.
PASS Total Blocking Time (long tasks) Phone measurement TBT
Checked on the 6 pages we read. It flags Google's lab phone test measures more than 600 ms of Total Blocking Time (200 ms or less is good): time when long-running scripts stop the page responding to taps and clicks while it loads — none found.
PASS Legacy JavaScript
Checked on the 6 pages we read. It flags the site ships polyfills for browsers nobody uses any more — none found.
PASS HTTP/2 or HTTP/3
Checked on the 6 pages we read. It flags the server, or one of the site's own file hosts, still serves over HTTP/1.1, so every asset queues — none found.
PASS Duplicate analytics tags
Checked on the 6 pages we read. It flags the same analytics or tag-manager container loads more than once — none found.
PASS Web font loading CLS 0.04 · phone
Checked on the 6 pages we read. It flags web fonts block text from appearing while they download — none found.
PASS Long-lived caching on versioned files
Checked on the 6 pages we read. It flags fingerprinted assets are re-downloaded on every visit — none found.
PASS Your address settles in one step TTFB 610 ms · phone
Checked on the 6 pages we read. It flags the bare domain redirects several times before loading — none found.
PASS Heavy embeds load before they're needed
Checked on the 6 pages we read. It flags a video, map or chat widget downloads on arrival — none found.
PASS Your images, fonts and files are cached long enough Phone measurement
Checked on the 6 pages we read. It flags most static files are sent with no caching rule, so returning visitors download them again — none found.
PASS Buttons work while the page is still loading
Checked on the 6 pages we read. It flags the menu button does nothing, or answers slowly, when tapped as soon as it appears on a phone-speed processor — none found.
PASS Every page shows the same version of your site
Checked on the 6 pages we read. It flags some pages are still served from an older release than the rest (two different build ids, or the same script or stylesheet with different fingerprints on different pages) — none found.
PASS Speed Index
Checked on the 6 pages we read. It flags the visible page takes more than 5.8 s to fill in on Google's lab phone test (3.4 s or less is good), or more than 2.3 s on its desktop test (1.3 s or less is good) — none found.
PASS JavaScript execution time TBT
Checked on the 6 pages we read. It flags the phone spends more than 3.5 s running the page's scripts while it loads in Google's lab test (warns above 2 s) — none found.
PASS Your page isn't hidden while it loads LCP 3.40 s · phone
Checked on the 6 pages we read. It flags an A/B-testing snippet hides the whole page for 3 seconds or more, or Google Optimize's snippet is still installed, or a full-screen loader stays up until every file has downloaded (warns on shorter hiding, a fade-in on the main heading or image, or a loader removed when the HTML is ready) — none found.
PASS Page complexity (DOM size)
Checked on the 6 pages we read. It flags very large rendered DOM — none found.
PASS IPv6 availability
Checked on the 6 pages we read. It flags the domain has no AAAA record, so IPv6-only networks can't reach it directly — none found.
PASS Connection hints match what the page loads
Checked on the 6 pages we read. It flags Google's PageSpeed test names an outside server the page should connect to early and the page has no preconnect for it (warns on a preconnect the page never uses, or more than 4) — none found.
PASS Speculation Rules
Checked on the 6 pages we read. It flags no prerender or prefetch rules, so onward navigation starts from cold — none found.
PASS Doctype and character set
Checked on the 6 pages we read. It flags a missing doctype or charset puts the browser in guessing mode — none found.
PASS Minified CSS and JavaScript Phone measurement
Checked on the 6 pages we read. It flags production ships un-minified development builds — none found.
PASS Instant back-navigation
Checked on the 6 pages we read. It flags the page can't be restored from the back/forward cache — none found.
PASS Only the font weights you use
Checked on the 6 pages we read. It flags font files download for weights the page never renders — none found.
PASS Font family discipline
Checked on the 6 pages we read. It flags the page loads more typefaces than it needs — none found.
PASS How many files the page loads Phone measurement
Checked on the 6 pages we read. It flags more than 150 requests on a connection that cannot fetch them in parallel — none found.
PASS Something appears on screen quickly Phone measurement FCP 1.90 s · phone
Checked on the 6 pages we read. It flags First Contentful Paint is over 3.0 s on Google's phone test or 1.6 s on its desktop test (warns over 1.8 s on a phone and 0.93 s on a desktop) — none found.
PASS How long until the page is completely loaded Phone measurement
Checked on the 6 pages we read. It flags the page is still downloading more than 10 seconds in — none found.
PASS Photos are compressed, not just converted Phone measurement
Checked on the 6 pages we read. It flags images are saved at a higher quality than any screen can show — none found.
PASS Files that wait for other files Phone measurement
Checked on the 6 pages we read. It flags a chain of dependent requests delays the first screen by over 3 seconds — none found.
PASS Animations run smoothly on a phone Phone measurement
Checked on the 6 pages we read. It flags an animation changes properties the phone's graphics chip cannot take over — none found.
PASS One tag-manager container
Checked on the 6 pages we read. It flags the homepage loads two or more different Google Tag Manager container ids — none found.
PASS Tags installed outside the tag manager
Checked on the 6 pages we read. It flags an analytics or advertising tag is hardcoded into the page alongside a tag-manager container — none found.
PASS Web fonts served from your own site
Checked on the 6 pages we read. It flags font files are fetched from another company's server, offered only as .ttf/.otf, or not trimmed to the characters the site uses — none found.
PASS Server sends early hints (103)
Checked on the 6 pages we read. It flags the server is slow to start answering, or sits behind Cloudflare, and sends no 103 Early Hints — none found.
PASS No library bundled twice
Checked on the 6 pages we read. It flags the site's public source maps show the same library installed in two places in its JavaScript — none found.
PASS Each page loads only the scripts it needs
Checked on the 6 pages we read. It flags every crawled page loads the same large set of the site's own script files — none found.
PASS Fonts have a size-matched fallback CLS 0.04 · phone
Checked on the 6 pages we read. It flags web fonts swap in over the visitor's installed font with no size-adjust fallback, so text re-flows when they load — none found.
PASS Scripts don't make the browser redo the layout
Checked on the 6 pages we read. It flags scripts force the browser to recalculate the page layout over and over while it loads — none found.
PASS Loading placeholders instead of spinners
Checked on the 6 pages we read. It flags spinning loaders, rather than placeholders shaped like the content, are on screen while the page loads — none found.
PASS Main-thread work TBT
Checked on the 6 pages we read. It flags the browser's main thread is busy for more than 4 s while the page loads in Google's lab test (warns above 2 s) — none found.
PASS No deprecated browser features
Checked on the 6 pages we read. It flags the page uses browser features that browsers have announced they will remove — none found.
PASS Browser-reported issues
Checked on the 6 pages we read. It flags Chrome reports problems while the page loads, such as files it refused to load, cookies it rejected or security-policy violations — none found.
PASS Preload and priority hints help rather than compete
Checked on the 6 pages we read. It flags never fails; warns when a preloaded file is never used, a font preload has no crossorigin, more than 3 fonts or more than 5 other files are preloaded, a preload points at a script the page itself defers, or fetchpriority=high sits on more than 2 elements or on an image that is not the main one — none found.
5 couldn't be checked: see why
  • Self-hosted video weight No events, job adverts or videos on the pages we read.
  • Service worker caches only the essentials up front The site registers no service worker, so there was nothing to check.
  • Service worker doesn't delay page loads The site registers no service worker, so there was nothing to check.
  • Service worker never shows out-of-date pages The site registers no service worker, so there was nothing to check.
  • Pages change without a full reload (single-page app) The site isn't a single-page app, so there was nothing to check.

Mobile

86.8/100
17 passed · 2 to fix · 8% of your score
WARN Tap target size / spacing Phone only Fix soon+0.6
8 links in the footer are closer together than 24 px on a phone.
FixMake buttons and links at least 24px tall and wide, and 44px where you can, or leave at least 24px of clear space around each small one, so a thumb lands on the control it aims for.Plain-English guide: Making your site work on a phone
Learn more: WCAG 2.2: Understanding Target Size (Minimum) https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html
WARN Mobile vs desktop speed gap Phone only Fix soon+0.4
The page's largest element appears after 3.4 s on a phone and 1.3 s on a desktop.
FixPrioritize mobile performance — most visitors and Google are mobile-first.
Learn more: Chrome for Developers: Lighthouse performance scoring https://developer.chrome.com/docs/lighthouse/performance/performance-scoring
17 passed: show what we checked
PASS Responsive viewport meta Phone only
Checked on the 6 pages we read. It flags missing viewport tag — none found.
PASS Mobile menu works Phone only
Checked on the 6 pages we read. It flags the hamburger menu doesn't open — none found.
PASS Phone visitors stay on your site Phone only
Checked on the 6 pages we read. It flags phone visitors opening the homepage are sent to a different website (another domain) — none found.
PASS Legible mobile font size Phone only
Checked on the 6 pages we read. It flags body text is under 12px on a phone (warns under 16px) — none found.
PASS Mobile viewport set up Phone only
Checked on the 6 pages we read. It flags a fixed layout width, zoom blocked, or the homepage rendered on a phone scrolls sideways (fails from 16px past the screen's edge, warns below); without our browser, warns on a fixed-width block wider than a phone in the CSS (not run when there is no viewport tag at all: #24 reports that) — none found.
PASS Primary CTA visible on mobile Phone only
Checked on the 6 pages we read. It flags CTA below the fold / hidden — none found.
PASS Intrusive pop-ups on mobile Phone only
Checked on the 6 pages we read. It flags an overlay covers the page on arrival — none found.
PASS Form fields don't trigger zoom Phone only
Checked on the 6 pages we read. It flags inputs under 16px make iPhones zoom in — none found.
PASS Headline visible on a phone Phone only
Checked on the 6 pages we read. It flags the main headline sits below the first screen at 390px or 375px wide (a warning at tablet and laptop sizes) — none found.
PASS Sticky header size on mobile Phone only
Checked on the 6 pages we read. It flags fixed header eats the screen — none found.
PASS Dark mode support Phone only
Checked on the 6 pages we read. It flags no prefers-color-scheme styling — none found.
PASS Installable web app (manifest) Phone only
Checked on the 6 pages we read. It flags manifest missing required fields, a dead start_url, no 192px and 512px icons, or a display mode browsers will not install — none found.
PASS Browser theme colour Phone only
Checked on the 6 pages we read. It flags no theme-color, so mobile browser chrome stays default grey — none found.
PASS Home-screen icon Phone only
Checked on the 6 pages we read. It flags no apple-touch-icon, so a saved shortcut shows a screenshot — none found.
PASS Dark mode is properly themed Phone only
Checked on the 6 pages we read. It flags dark mode leaves parts of the page light — none found.
PASS Images aren't stretched Phone only
Checked on the 6 pages we read. It flags images display at the wrong shape or scaled far beyond their size — none found.
PASS The main button sits within thumb reach on a phone Phone only
Checked on the 6 pages we read. It flags the page's main action button sits only in the top third of the first phone screen — none found.
1 couldn't be checked: see why
  • Offline helper file loads (service worker) The site registers no service worker, so there was nothing to check.

Accessibility

52.2/100
14 passed · 8 to fix · 9% of your score
Check these by hand

Some of these were measured on this scan, and are marked. The rest are worth trying yourself.

  1. Press Tab from the top of your homepage. Every link, button and form field should show a clear outline as it is reached, in the order you read the page. Measured on this scan: Passing
  2. Keep pressing Tab down the page. The highlighted item should never slide under a sticky header, a cookie banner or a chat button. Measured on this scan: Passing
  3. Turn on your phone's screen reader (VoiceOver on an iPhone, TalkBack on Android) and swipe through your homepage. It should read things in the order you see them. Measured on this scan: Passing
  4. On a phone, tap your menu button. The menu should open, every link in it should work, and it should close again. Measured on this scan: Passing
  5. Zoom your browser to 200%. The text should grow without anything overlapping and without the page scrolling sideways.
FIX Image alt text Fix now+0.8
11 of 27 images have no alt text, including the hero photo on the homepage.
FixAdd descriptive alt text to meaningful images (use empty alt for decorative ones).Plain-English guide: Making your site usable by everyone
Learn more: W3C WAI: An alt decision tree https://www.w3.org/WAI/tutorials/images/decision-tree/
FIX Form field labels Fix now+0.6
3 of the 9 fields on the /contact form have only placeholder text and no label.
FixAssociate a visible <label> with every form field.Plain-English guide: Making your site usable by everyone
Learn more: W3C WAI: Labeling controls https://www.w3.org/WAI/tutorials/forms/labels/
WARN Color contrast Fix now+0.8
The light grey text in the fee table on /fees (#9aa5a3 on white) has a contrast of 2.6:1; body text needs 4.5:1.
FixIncrease text/background contrast to at least 4.5:1 for body text.Plain-English guide: Making your site usable by everyone
Learn more: WCAG 2.2: Understanding Contrast (Minimum) https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html
WARN Overall accessibility / legal risk Fix now+0.8
An automated accessibility check found 12 issues across the 6 pages, 3 of them serious.
FixYour site likely fails accessibility standards — a growing legal risk (ADA / EU EAA). Full list inside.Plain-English guide: Making your site usable by everyone
Learn more: W3C: How to Meet WCAG (Quick Reference) https://www.w3.org/WAI/WCAG22/quickref/
WARN Image alt text sitewide Fix soon+0.4
Across the 6 pages, 11 of 27 images have no alt text.
FixAdd alt text describing every meaningful image on every page. Screen-reader users hear it, and search engines read it.
Learn more: W3C WAI: An alt decision tree https://www.w3.org/WAI/tutorials/images/decision-tree/
WARN Form autofill support Fix soon+0.4
The name, email and phone fields on /contact don't say what they hold, so a phone can't fill them in.
FixAdd autocomplete attributes to your form fields (autocomplete="email", "tel", "name", "street-address"). Browsers then fill them in one tap, which lifts completion rates and is a WCAG 2.2 requirement (1.3.5 Identify Input Purpose).
Learn more: WCAG 2.2: Understanding Identify Input Purpose https://www.w3.org/WAI/WCAG22/Understanding/identify-input-purpose.html
WARN Alt text says what the picture shows Fix soon+0.4
6 images use their file name as alt text ("IMG_2041.jpg").
FixReplace filename and placeholder alt text with a short description of what the picture shows. "IMG_4821.jpg" or "image" tells a blind visitor nothing, and gives search engines and AI assistants nothing to work with either - one honest sentence per meaningful photo is enough.
Learn more: W3C WAI: An alt decision tree https://www.w3.org/WAI/tutorials/images/decision-tree/
WARN Skip-to-content link Nice to have+0.2
No skip-to-content link on any page.
FixAdd a 'skip to content' link for keyboard users.Plain-English guide: Making your site usable by everyone
Learn more: WebAIM: Skip navigation links https://webaim.org/techniques/skipnav/
14 passed: show what we checked
PASS No rapidly flashing content
Checked on the 6 pages we read. It flags content flashes more than three times a second — none found.
PASS Keyboard nav & focus states
Checked on the 6 pages we read. It flags controls show no visible focus, Tab gets stuck, skips visible controls near the top of the page, or puts the focus on a control a visitor cannot see (off the page, with no size, or fully transparent) — none found.
PASS Required fields marked in code
Checked on the 6 pages we read. It flags required fields are shown with an asterisk only — none found.
PASS Buttons and fields stand out
Checked on the 6 pages we read. It flags control edges fall below the 3:1 contrast minimum — none found.
PASS Focus isn't hidden behind sticky bars
Checked on the 6 pages we read. It flags a sticky header covers the element being tabbed to — none found.
PASS No accessibility overlay widget
Checked on the 6 pages we read. It flags an overlay widget is installed over unfixed problems — none found.
PASS Pasting into fields is allowed
Checked on the 6 pages we read. It flags a form field stops visitors from pasting into it — none found.
PASS Videos play with captions
Checked on the 6 pages we read. It flags a self-hosted video that visitors play with sound has no captions track, or its captions file doesn't load (warns when it has subtitles only) — none found.
PASS Document language
Checked on the 6 pages we read. It flags no <html lang> — none found.
PASS ARIA & landmarks
Checked on the 6 pages we read. It flags misuse or missing landmarks — none found.
PASS Reduced motion respected
Checked on the 6 pages we read. It flags animations ignore the OS setting — none found.
PASS Text sizes and spacing follow one scale
Checked on the 6 pages we read. It flags the site's own stylesheets use far more distinct font sizes or spacing values than a consistent design needs — none found.
PASS Screen readers hear the page in the order it's shown
Checked on the 6 pages we read. It flags headings are announced in a different order from the one they appear on screen — none found.
PASS Every heading has words in it
Checked on the 6 pages we read. It flags 5 or more headings across the crawled pages have no text, image alt or label, so a screen reader announces an empty heading (warns on 1 to 4) — none found.
1 couldn't be checked: see why
  • PDFs carry real, tagged text No PDFs are linked from the pages we read.

Security & privacy

84.4/100
39 passed · 9 to fix · 5 for information · 10% of your score
What we saw
HTTPS
http:// redirects to https:// on every address we tried.
See the finding
Security headers
Checked on the 6 pages we read. It flags informational — which of CSP, X-Frame-Options and HSTS the homepage sends (each is scored in its own check)…
See the finding
Mixed content
Checked on the 6 pages we read. It flags http assets on an https page — none found.
See the finding
Trackers before consent
Checked on the 6 pages we read. It flags trackers or tracking beacons fire pre-consent (third-party fonts loaded before consent are a warning) — none…
See the finding
Cookies on a first visit
Checked on the 6 pages we read. It flags never - this is an inventory of the cookies and browser storage a first visit leaves behind, reported for…
See the finding
FIX DKIM / DMARC Fix soon+0.3
No DMARC record at _dmarc.brightleaf-dental.example, so nothing tells other mail servers to refuse email forged in the practice's name.
FixAdd DKIM and a DMARC policy to protect deliverability and your brand from spoofing.Plain-English guide: Stop people sending email as your business: SPF, DKIM and DMARC
Learn more: RFC 7489: DMARC https://www.rfc-editor.org/rfc/rfc7489.html
WARN Content-Security-Policy strength Fix soon+0.3
No Content-Security-Policy header on any page.
FixTighten your Content-Security-Policy: remove unsafe-inline and wildcard sources, and use nonces instead. This is the header that stops injected scripts running.Plain-English guide: Security settings for a small-business website, by platform
Learn more: web.dev: A strict Content Security Policy https://web.dev/articles/strict-csp
WARN HSTS policy strength Fix soon+0.2
HSTS is sent with max-age=86400 (one day); a year is the usual minimum.
FixSet Strict-Transport-Security with max-age=31536000 and includeSubDomains so browsers refuse to load your site over plain http.Plain-English guide: Security settings for a small-business website, by platform
Learn more: OWASP Cheat Sheet: HTTP Strict Transport Security https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Strict_Transport_Security_Cheat_Sheet.html
WARN Clickjacking protection Fix soon+0.3
Neither X-Frame-Options nor frame-ancestors is sent, so another site can show these pages inside a frame.
FixAdd `frame-ancestors 'self'` to your Content-Security-Policy (or send `X-Frame-Options: SAMEORIGIN`). It stops another site loading yours in an invisible frame over their own buttons, which is how visitors are tricked into clicking things they cannot see.Plain-English guide: Security settings for a small-business website, by platform
Learn more: MDN: X-Frame-Options https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options
WARN MTA-STS policy enforces Fix soon+0.2
No MTA-STS policy is published for the practice's email.
FixAn MTA-STS record in DNS only tells other mail servers where to look; the file at https://mta-sts.yourdomain/.well-known/mta-sts.txt is what actually refuses an unencrypted delivery. Publish it as plain text with "version: STSv1", "mode: enforce", one "mx:" line per server in your MX records, and "max_age: 604800" - your email provider's documentation gives the exact mx: lines. If you did not mean to run MTA-STS, remove the _mta-sts TXT record instead, so nothing advertises a policy that is not there.Plain-English guide: Stop people sending email as your business: SPF, DKIM and DMARC
WARN Security contact (security.txt) Nice to have+0.1
No /.well-known/security.txt.
FixAdd a /.well-known/security.txt file with a Contact: address and an Expires: date, so researchers can report a vulnerability instead of disclosing it publicly.
WARN CAA records Nice to have+0.1
No CAA record, so any certificate authority may issue a certificate for the domain.
FixAsk whoever manages your DNS to add a CAA record naming the authority that issues your certificate, and every other authority that issues for you, your CDN's included. It stops any other authority from issuing a certificate for your domain - a cheap way to close off one route to impersonation.Plain-English guide: Stop people sending email as your business: SPF, DKIM and DMARC
Learn more: RFC 8659: DNS Certification Authority Authorization (CAA) https://www.rfc-editor.org/rfc/rfc8659.html
WARN DNSSEC Nice to have+0.1
The domain isn't signed with DNSSEC.
FixTurn on DNSSEC where your domain's DNS is managed; with most DNS hosts it is a single switch. If that company is not the one your domain is registered with, the registrar then adds the DS record the DNS host gives you. It signs your DNS answers so an attacker can't quietly point your domain at their own server.
Learn more: RFC 4033: DNS Security Introduction and Requirements https://www.rfc-editor.org/rfc/rfc4033.html
WARN You hear about failed secure email delivery (TLS-RPT) Nice to have+0.1
No TLS-RPT record, so failed secure deliveries of the practice's email go unreported.
FixAdd one TXT record to your DNS named _smtp._tls.yourdomain with the value "v=TLSRPTv1; rua=mailto:tls-reports@yourdomain". Mail providers such as Google and Microsoft then send a short daily report whenever they could not deliver email to you over a secure connection - the only warning you get when a certificate problem on your mail server starts quietly stopping your email.Plain-English guide: Stop people sending email as your business: SPF, DKIM and DMARC
FOR INFO Security headers Not scored
Checked on the 6 pages we read. It flags informational — which of CSP, X-Frame-Options and HSTS the homepage sends (each is scored in its own check) — none found.
Learn more: OWASP Cheat Sheet: HTTP security response headers https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html
FOR INFO Cross-origin protection headers Not scored
Checked on the 6 pages we read. It flags informational — no COOP or CORP header that actually restricts anything (never scored) — none found.
Learn more: web.dev: Cross-origin isolation with COOP and COEP https://web.dev/articles/why-coop-coep
FOR INFO HSTS preload status Not scored
Checked on the 6 pages we read. It flags informational — the domain isn't on the browser HSTS preload list (optional; never scored) — none found.
Learn more: OWASP Cheat Sheet: HTTP Strict Transport Security https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Strict_Transport_Security_Cheat_Sheet.html
FOR INFO What your site stores on a first visit Not scored
Checked on the 6 pages we read. It flags never - this is an inventory of the cookies and browser storage a first visit leaves behind, reported for information — none found.
FOR INFO What your site is built with Not scored
Checked on the 6 pages we read. It flags never - an inventory of the server, framework, platform, libraries, analytics and advertising tags, consent tool, CDN, certificate, registrar, DNS host and email provider the scan saw, reported for information — none found.
Learn more: OWASP Top 10 2025: Software supply chain failures https://top10.owasp.org/2025/A03_2025-Software_Supply_Chain_Failures/
39 passed: show what we checked
PASS Valid SSL certificate
The certificate is valid for another 71 days.
PASS Known vulnerabilities
Checked on the 6 pages we read. It flags outdated library with a CVE — none found.
PASS Malware / blocklist status
Checked on the 6 pages we read. It flags domain flagged — none found.
PASS Domain expiry & transfer lock
Checked on the 6 pages we read. It flags expiring soon or unlocked — none found.
PASS Cookie security flags
Checked on the 6 pages we read. It flags session cookies missing Secure/HttpOnly/SameSite — none found.
PASS Exposed sensitive files
Checked on the 6 pages we read. It flags .git, .env, backups or phpinfo publicly readable — none found.
PASS TLS protocol version
Checked on the 6 pages we read. It flags the server negotiates a retired TLS version (1.0 / 1.1) — none found.
PASS Personal data in URLs
Checked on the 6 pages we read. It flags page URLs carry email addresses, names or other personal data — none found.
PASS Error pages leak no debug detail
Checked on the 6 pages we read. It flags stack traces, framework error details, printed PHP warnings, notices or deprecations, or WordPress's database-connection error are visible to visitors — none found.
PASS Cross-origin access is restricted
Checked on the 6 pages we read. It flags the server grants any website permission to read its responses — none found.
PASS No credentials in JavaScript
Checked on the 6 pages we read. It flags secret keys are visible in the site's own scripts — none found.
PASS Your test copy isn't open to the public
Checked on the 6 pages we read. It flags a staging or preview copy of the site loads for anyone, with no password — none found.
PASS Nobody else can publish on your address
Checked on the 6 pages we read. It flags a subdomain points at a hosting account that no longer exists, so anyone can claim it — none found.
PASS Your add-ons are up to date
Checked on the 6 pages we read. It flags an installed plugin or theme is behind its current release — none found.
PASS Mixed content
Checked on the 6 pages we read. It flags http assets on an https page — none found.
PASS Exposed software version
Checked on the 6 pages we read. It flags an exact software version is named in the response headers, a generator tag or an HTML comment (and says so when it is a PHP version past security support); warns when the software is named without a version — none found.
PASS SPF record
An SPF record names the practice's email provider.
PASS Cookies before consent
Checked on the 6 pages we read. It flags trackers or tracking beacons fire pre-consent (third-party fonts loaded before consent are a warning) — none found.
PASS Exposed staging subdomains
Checked on the 6 pages we read. It flags dev/staging hosts publicly visible — none found.
PASS CORS configuration
Checked on the 6 pages we read. It flags wildcard or null origin with credentials — none found.
PASS Third-party script integrity (SRI)
Checked on the 6 pages we read. It flags external scripts lack integrity hashes — none found.
PASS Nameserver redundancy
Checked on the 6 pages we read. It flags the domain has only one nameserver, so a single failure takes the whole site offline — none found.
PASS TLS cipher strength
Checked on the 6 pages we read. It flags the connection negotiates a weak cipher suite — none found.
PASS MIME-type sniffing blocked
Checked on the 6 pages we read. It flags no X-Content-Type-Options header — none found.
PASS Directory listings disabled
Checked on the 6 pages we read. It flags asset folders hand out a full file listing — none found.
PASS Source maps not published
Checked on the 6 pages we read. It flags production source maps expose your original code — none found.
PASS Admin pages kept out of search
Checked on the 6 pages we read. It flags a login or admin page is indexable — none found.
PASS Enquiry form shows spam protection
Checked on the 6 pages we read. It flags a lead form has no visible spam protection — none found.
PASS Visitors who opt out of tracking are respected
Checked on the 6 pages we read. It flags the homepage still sets tracking cookies for a visitor whose browser sends the Global Privacy Control opt-out signal — none found.
PASS A cookie choice is remembered and can be changed
Checked on the 6 pages we read. It flags the cookie banner asks again after the visitor answered it, or the page offers no way to change the answer later — none found.
PASS No permission prompts on load
Checked on the 6 pages we read. It flags the page asks for the visitor's location or for permission to send notifications as soon as it opens — none found.
PASS Referrer policy doesn't leak page addresses
Checked on the 6 pages we read. It flags Referrer-Policy is unsafe-url or no-referrer-when-downgrade, so full page addresses go to other sites — none found.
PASS Browser feature permissions
Checked on the 6 pages we read. It flags no Permissions-Policy restricting camera, microphone or location — none found.
PASS Cookie name prefixes
Checked on the 6 pages we read. It flags session cookies use no __Host- or __Secure- prefix — none found.
PASS Photos aren't giving away where they were taken
Checked on the 6 pages we read. It flags a published photo still carries the GPS location it was taken at — none found.
PASS Your login page isn't advertised on the site
Checked on the 6 pages we read. It flags a link in the public pages points straight at the admin or login page — none found.
PASS Third-party cookies
Checked on the 6 pages we read. It flags the page sets cookies for other companies' domains (third-party cookies), which browsers increasingly block — none found.
PASS Password managers can fill in your sign-in and sign-up forms
Checked on the 6 pages we read. It flags never fails; warns when a password box doesn't say whether it wants the current password or a new one (autocomplete current-password or new-password), or switches autofill off — none found.
PASS Family and office web filters let your site through
Checked on the 6 pages we read. It flags Cloudflare's malware-filtering resolver (1.1.1.2) answers 0.0.0.0 for your domain while the ordinary resolver gives its real address, so any home, school or office network using that filter cannot open your site (warns when only the family filter, 1.1.1.3, blocks it as adult content; not run when the ordinary lookup fails) — none found.
6 couldn't be checked: see why
  • WordPress XML-RPC closed The site doesn't run on WordPress, so there was nothing to check.
  • WordPress usernames not listed The site doesn't run on WordPress, so there was nothing to check.
  • WordPress add-ons are maintained The site doesn't run on WordPress, so there was nothing to check.
  • The sample pages that came with your site are gone The site doesn't run on WordPress, so there was nothing to check.
  • Content-Security-Policy reports violations There is no Content-Security-Policy to check this against.
  • Trusted Types on a strict CSP There is no Content-Security-Policy to check this against.

Answered by you

Not scored
16 questions
Everything above was measured from your live site. These 16 could not be — nobody can tell from outside whether your phone is answered, whether a backup has ever been restored, or whether a stranger can buy from you without an account. So they are yours to answer. Your answers are your own, and they do not change your score — we will not move a number we present as a measurement on the strength of a tick box.

Try it yourself5 questions

Things a real customer does. We won't ring your phone or put an order through your shop, so nobody but you can settle these.
If you ring the phone number on your site right now, does it reach you?
A number that rings out, or reaches a line you gave up two years ago, sends the customer to whoever answers instead. Closest we could measure: Visible contact info (#47)
Have you bought something from your own shop — all the way to the confirmation email — without logging in first?
Most people buying from you for the first time have no account, and a checkout that quietly demands one loses them at the last step.
Have you signed up to your own mailing list with a personal address and received the confirmation email?
A signup form that looks like it worked but never sends the confirmation collects addresses you can never email.
Do the pictures of your product on the site still match what a customer sees when they use it today?
A screenshot two versions out of date promises a product that no longer exists, and the first thing a new customer notices is the difference.
When something breaks on your site and the “sorry, something went wrong” screen appears, does it still look like your site?
A bare server error page looks like the site has been abandoned, and a visitor who sees one rarely tries again. Closest we could measure: Error pages leak no debug detail (#156)

Things we can't see from outside4 questions

Backups, alerts and traffic logs live inside your hosting account. Nothing on a page we can fetch says whether they exist.
If your site went down at three in the morning, would something tell you?
Sites almost never come back on their own, and the usual way an owner finds out is a customer asking why the site is broken.
Does your site back itself up somewhere other than the server it runs on — and have you ever restored one to check it works?
A backup nobody has ever restored is a promise, not a safety net, and the day you need it is the wrong day to find out.
Have you looked at your traffic log to confirm the crawlers you've told to stay out are actually being turned away?
A rule in a file only works if something enforces it, and only your own log shows whether anything did. Closest we could measure: Bot protection isn't blocking AI answers (#178)
Do the AI assistants' crawlers — ChatGPT, Perplexity and the rest — actually show up in your traffic log?
If they never visit, nothing you publish can end up in an AI answer, however well the pages are written.

Checks that need a person4 questions

A keyboard, a screen reader, and two tools that open in a browser window and nowhere else.
Have you gone through your site using only the keyboard — Tab, Enter and the arrow keys — including the menu, any date pickers, and any pop-ups?
Custom menus and pop-ups are where keyboard-only visitors get stuck, and getting stuck there means the sale never happens. Closest we could measure: Keyboard nav & focus states (#34), Focus isn't hidden behind sticky bars (#229)
Has anyone listened to your main pages read aloud by a screen reader and checked they still make sense?
Pages that look fine can read as a jumble of “link, link, button” out loud, and that is the whole experience for a blind customer.
Have you pasted your pages into Google's Rich Results Test and seen them come back clean?
It is Google's own verdict on whether your structured data is valid for the search features it supports, such as review stars and product prices. Closest we could measure: Entity / structured data for AI (#58)
Have you pasted a link to your site into Facebook's and LinkedIn's preview tools and seen the right picture and headline come up?
Those tools hold their own copy of your page, and until someone refreshes it your shared links keep showing whatever they cached, however old. Closest we could measure: Link previews get the same page you do (#259)

Things only you can do3 questions

Edits on someone else's platform, and one page of notes that lives in your business rather than on your site.
Have you created or claimed an entry for your business on Wikidata?
It is the open record AI assistants read to decide your business is a real, specific thing rather than a name they half-recognise. Closest we could measure: Wikidata record for the business (#241)
When an AI assistant has said something wrong about your business, have you published a page that puts it right?
Assistants answer from what they can read, so the only way to correct one is to publish the correct version where it will find it.
Have you written down, somewhere everyone who runs a campaign can see it, how your campaign links should be tagged?
Two people tagging the same campaign two different ways splits one result into two in your analytics, and neither number is true. Closest we could measure: Internal links are clean (#207)
Ready-to-paste fixes
2 generated from your site's own data
These are built from your scan — your domain, your pages, your email setup — so they can be pasted or merged as each item says. Anything you must personalise is marked REPLACE.
DMARC record for your email
Add as a TXT record named _dmarc at your DNS host.
v=DMARC1; p=none; rua=mailto:dmarc@brightleaf-dental.example; adkim=s; aspf=s
Start with p=none for two weeks, read the reports, then move to p=quarantine.
Dentist structured data for your homepage
Paste inside the <head> of your homepage.
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Dentist",
  "name": "Brightleaf Dental",
  "url": "https://brightleaf-dental.example/",
  "telephone": "+44 113 496 0123",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12 Otley Road",
    "addressLocality": "Leeds",
    "postalCode": "LS6 2AA",
    "addressCountry": "GB"
  },
  "openingHours": [
    "Mo-Fr 08:30-18:00",
    "Sa 09:00-13:00"
  ]
}
</script>

Pages scanned

6 pages
URLHTTPTitleMetaH1Words
https://brightleaf-dental.example/ 200 Brightleaf Dental — Family & Emergency Dentist in Headingley ✓ 1 412
https://brightleaf-dental.example/treatments 200 Brightleaf Dental ✓ 1 655
https://brightleaf-dental.example/fees 200 Brightleaf Dental — 1 96
https://brightleaf-dental.example/about 200 About us — Brightleaf Dental ✓ 1 540
https://brightleaf-dental.example/contact 200 Contact & booking — Brightleaf Dental ✓ 1 230
https://brightleaf-dental.example/privacy 200 Privacy policy — Brightleaf Dental — 1 1310
Generated by FocalScore · brightleaf-dental.example · Built by AstroLabix
Speed: Google PageSpeed Insights (Lighthouse), run by Google on its own test machines during this scan (2026-10-02 at 08:55 UTC). Phone figures come from its phone test and desktop figures from its desktop test, both of your page. Real-visitor data: real visits across your whole site (Google's Chrome UX Report). Pages: 6 pages read straight from your server by the scan's crawler, as your server sends them.

The AI Advanced Report — $49

Example report — illustrative data for a fictional business. Your report is written from your own site.

The paid report asks AI assistants and Google the questions a new customer asks, and records who they recommend. Four of its sections follow, exactly as a buyer sees them.

AI Advanced Report

Patients who find you trust you, but too few find you

Could convert — with fixes

Would a real prospect convert?

A nervous first-time patient would book once they reach your fees page, but the homepage never says you take emergencies or new patients, and there is no review in sight of the booking button.

AI visibility

Across AI assistants

4 of 19
answers where an AI assistant named your business — across ChatGPT, Perplexity, Gemini and Claude, with a link to your site in 2.
  • ChatGPTNamed you in 2 of 5 answers · linked your site in 1
  • PerplexityNamed you in 1 of 4 answers · linked your site in 1
  • GeminiDidn't name you in any of its 5 answers
  • ClaudeNamed you in 1 of 5 answers · never linked your site
Buyer questionChatGPTPerplexityGeminiClaude
Who is the best family dentist in Leeds?Cited you · #2Not mentionedNot mentionedMentioned
Where can I get an emergency dental appointment in Leeds today?Not mentionedCited you · #1Not mentionedNot mentioned
Which Leeds dentists offer teeth whitening with a payment plan?Not mentionedNot mentionedNot mentionedNot mentioned
Is there a dentist near Headingley taking new NHS patients?Not mentionedNot mentionedNot mentionedNot mentioned
How much is a dental check-up in Leeds?Mentioned—Not mentionedNot mentioned

Cited you: linked your site as a source (with its position among the sources). Mentioned: named you without linking. — : no answer to that question.

Who they recommend instead

  • smilecare-leeds.example — cited in 10 answers, by ChatGPT, Perplexity, Gemini and Claude
  • nhs.uk — cited in 7 answers, by ChatGPT, Perplexity, Gemini and Claude
  • leedsdental.example — cited in 5 answers, by ChatGPT, Gemini and Claude
  • whitesmile-leeds.example — cited in 4 answers, by ChatGPT, Perplexity, Gemini and Claude

Asked on 2026-10-02, each assistant using its own live web search (ChatGPT: gpt-6-luna, Perplexity: sonar, Gemini: gemini-3.8-flash, Claude: claude-haiku-4-5). The questions never name your business, so a mention has to be earned.

Scored from this: AI citation / mention tracking: warn · AI share of voice: warn — see Scored checks.

How AI describes you AI-judged

We asked each assistant: “What is Brightleaf Dental (brightleaf-dental.example)? Describe what it does and who it's for in 2–3 sentences.”
  • ChatGPTAccurate Cited your site“Brightleaf Dental is a family dental practice in Headingley, Leeds, offering check-ups, hygiene visits, emergency appointments and teeth whitening for adults and children. It lists its fees online.”Family dentistry in Headingley with check-ups, emergencies and whitening — as the site says.
  • PerplexityPartly accurate“Brightleaf Dental appears to be a cosmetic dentistry clinic in Leeds focused on teeth whitening and veneers for adults.”Right town and trade, but it calls a family practice a cosmetic clinic for adults only.

What they said is measured; whether it matches your site is a judgment: gpt-6-luna compared each answer with your own homepage's description, and nothing else. An answer that opens by saying it doesn't know you is marked so without a model.

Scored from this: How AI describes your business: warn — see Scored checks.

Assistants can read the site and occasionally cite it for family dentistry, but name a competitor for emergencies and whitening, and one describes you as a cosmetic clinic.

Issues
  • No page answers 'emergency dentist Leeds' directly.
  • Nothing on the site says you are a family practice in words an assistant can quote.
Recommendations
  • Publish an emergency appointments page with your hours and the same-day promise.
  • Open the homepage with one sentence saying what you do, for whom and where.

Where you rank on Google

2 of 4
You're on page 1 for 2 of 4 searches, and on page 2 or 3 for 1 more.
SearchYour positionYour pageTop competing sites
family dentist leeds#7 · page 1homepagesmilecare-leeds.example, nhs.uk, leedsdental.example
emergency dentist leeds#18 · page 2/treatmentssmilecare-leeds.example, nhs.uk
dentist headingley#4 · page 1homepagesmilecare-leeds.example, leedsdental.example
teeth whitening leedsNot in top 30—whitesmile-leeds.example, smilecare-leeds.example
nhs dentist leeds accepting new patientsCouldn't check

Who outranks you most

  • smilecare-leeds.example — near the top for 4 of your searches
  • leedsdental.example — near the top for 2 of your searches

Google showed a map of local businesses for 3 of these searches, and you were in it for 2.

Checked on 2026-10-02 with Google Leeds, England results (desktop, top 30). The searches are the ones a new customer would type — never your business name. 1 search couldn't be checked this time and isn't counted.

Who links to you

21 / 100DataForSEO's rating: a data company's relative score built from the links it has found, not a Google score. Useful to compare over time, or with a competitor rated the same way.

The strongest sites linking to you: leeds-chamber.example and yorkshire-news.example.

Redirect those broken addresses to the right live page and you keep the credit those links carry.

Scored from this: Ranks on Google page 1 for core searches: pass · Sites that link to you: pass — see Scored checks.

Searches you're missing

4
4 searches in your field where smilecare-leeds.example and leedsdental.example are in Google's top 20 and you don't appear — about 3,290 searches a month.
SearchSearches a monthWho ranks
dental implants leeds1,300smilecare-leeds.example #4
invisalign leeds880smilecare-leeds.example #6, leedsdental.example #12
private dentist leeds720leedsdental.example #3
nervous patients dentist leeds390smilecare-leeds.example #9

For comparison, you're in the top 20 for 6 searches in the same field (about 2,810 a month). Monthly volumes are DataForSEO's Google estimates for United Kingdom; a search counts as missed only when you have no position in Google's top 100 for it.

Scored from this: Missed searches: warn — see Scored checks.

Conversion rewrites

The highest-leverage copy changes, ranked.

Homepage hero headline
BeforeWelcome to Brightleaf Dental
AfterSame-day dental care for the whole family in Headingley
Why: It names the outcome and the place a patient is searching for.

1 of the 3 rewrites in this report is shown here.

Also in the $49 report

See yours

Your report is written from your own site: your pages, your findings, your fixes. The scan and the full report are free.

Download the sample as a PDF — the free report above, from the same engine that writes yours, marked as an example on every page.