Website checks
Every check the website check runs on your site, by area, with its severity and what it means.
The website check runs 338 checks in 20 areas. Each one is listed once below, under its area, worded as it appears on the Issues tab without its count: on your site, Pages have no title reads 3 pages have no title. Open an issue there for how to fix it and the pages it affects.
Each check has a severity:
- Error: something that stops Google or patients reaching a page. Errors count most towards Health.
- Warning: something that clearly costs rankings or trust. Warnings count towards Health.
- Notice: worth knowing, but it never changes Health. Every accessibility check is a notice; the Accessibility report scores them on their own.
How the scores are worked out explains Health and the other scores.
A note in brackets after a check's name says when it counts towards a score or runs only in some cases:
- AI search: counts towards the AI search score.
- PageSpeed: needs Google PageSpeed Insights. It isn't checked while Setup says Speed checks need a Google key, nor on a page Google couldn't measure.
- Chrome UX Report: needs Chrome's figures from real visitors, which Google has only for pages with enough visitors. It isn't checked while Setup says Speed checks need a Google key.
- Search Console: needs Search Console connected.
- Google profile: compares your website with your Google profile. These checks are coming soon; for now they show as not checked, even with your profile connected.
- UK only: runs only for practices in the UK.
- not in the US: runs for practices in every country Smileline serves except the US.
A check that can't be done, for want of what it needs, is never counted as a pass: it is left out of the scores.
Status codes
| Check | Severity | What it means |
|---|---|---|
| Pages fail with a server error | Error | The server answered with a 5xx error, so visitors see an error page and Google may drop the page if it keeps happening. |
| Pages can't be found or are refused | Error | These addresses answer with a 4xx code (not found, gone, forbidden). People who follow a link to them hit a dead end. |
| Pages didn't answer | Error | The server didn't respond in time or dropped the connection, so the page couldn't be read at all. |
| Addresses point to a domain that doesn't exist | Error | The domain name didn't resolve, so nobody can reach these pages. |
| Addresses can't be opened | Error | The address is written in a way browsers can't open. |
| Google got a server error on pages (Search Console) | Error | Search Console says Google's last visit failed with a server error, even if the page works for you now. |
| Google found pages missing (Search Console) | Error | Search Console says Google got a 404 for this address. |
| Pages say "not found" but load normally | Warning | The page reads like an error page yet tells search engines it is fine, so Google wastes time on it and may treat it as thin content. |
| Addresses that don't exist still load a page | Warning | Asking for a made-up address returned a normal page instead of a 404, so every mistyped or old link looks like a real page to Google. |
| Google thinks pages are empty error pages (Search Console) | Warning | Search Console treats the page as a soft 404: it loads, but looks empty or like an error, so Google won't show it. |
| Pages don't say they are web pages | Notice | The server doesn't send the text/html content type for these pages, so some browsers and crawlers may not read them as web pages. |
Redirects
| Check | Severity | What it means |
|---|---|---|
| Addresses redirect more than once | Error | Each extra hop slows visitors down and Google may stop following before it reaches the page. |
| Addresses redirect in a loop | Error | The redirects lead back to where they started, so the page never loads for anyone. |
| Redirects end on a broken page | Error | The redirect works but the page it lands on is missing or failing. |
| Pages redirect with a timed refresh | Error | A meta refresh moves visitors after a delay. It is slow, confusing for screen readers, and Google may not pass the page's value on. |
| Secure addresses redirect to insecure ones | Error | Visitors on a secure https:// page are sent to an http:// page, which browsers mark as not secure. |
| Google hit a redirect error on pages (Search Console) | Error | Search Console says the redirect was too long, looped or pointed nowhere when Google tried it. |
| Addresses use a temporary redirect | Warning | A temporary redirect (302 or 307) tells Google the old address will be back, so it may keep showing the old one. |
| Addresses redirect permanently | Notice | Permanent redirects are fine, but links that still use the old address add a step for every visit. |
| Pages redirect with a Refresh header | Notice | The server sends visitors on with a Refresh header, which search engines don't treat as a proper redirect. |
| Pages redirect with JavaScript | Notice | The page sends visitors elsewhere with a script. Crawlers and AI tools that don't run scripts never see the move. |
| Links go through a redirect | Notice | These links point to an old address that redirects, adding a step for visitors and for Google. |
| Links to other sites redirect | Notice | The other site has moved these pages. Redirects can break later, leaving a dead link. |
| Images or files are loaded through a redirect | Notice | The page asks for a file at an old address that redirects, which delays loading. |
| Redirects aren't linked from your site | Notice | These redirecting addresses were only found in a sitemap or as the start address, not through your own links. |
| Google sees pages as redirects (Search Console) | Notice | Search Console treats the address as a redirect, so it indexes the target instead. |
Crawlability
| Check | Severity | What it means |
|---|---|---|
| Google was refused access to pages (Search Console) | Error | Search Console says Google got 401, 403 or another refusal, often a firewall or security plugin blocking it. |
| Files your pages need are blocked by robots.txt | Warning | Google can't load these scripts, styles or images, so it may see a broken version of your pages. |
| Addresses use underscores | Warning | Google reads hyphens as spaces between words but underscores as part of a word, so dental_implants reads as one word. |
| Addresses have a double slash | Warning | A double slash in the path makes a second copy of a page at a slightly different address. |
| Addresses have too many parameters | Warning | Addresses with many ?key=value parts multiply into near-identical pages that waste Google's visits. |
| Pages are built with frames | Warning | Old-style frames split a page into separate documents that search engines index poorly. |
| Pages have no doctype | Warning | Without <!DOCTYPE html> at the top, browsers fall back to an old display mode and the page can look wrong. |
| Pages don't declare their character set | Warning | Without a declared encoding, accents and symbols can show as garbled characters. |
| Pages have tags that end their head early | Warning | An image, text or other body tag inside the head closes it early, so Google ignores the title, canonical or robots tags after it. |
| Pages have a broken HTML outline | Warning | The page is missing its head or body, or has more than one, so browsers and Google have to guess where things belong. |
| Google is blocked from pages by robots.txt (Search Console) | Warning | Search Console says robots.txt stopped Google crawling this page. |
| Pages are blocked by robots.txt | Notice | Your robots.txt tells Google not to crawl these pages, so they can't rank on their own content. |
| Files from other sites are blocked to crawlers | Notice | Another site's robots.txt stops Google loading a file your pages use. It only matters if the file shapes what the page shows. |
| Addresses are very long | Notice | Long addresses are hard to read, share and remember, and are often cut off in search results. |
| Addresses use capital letters | Notice | Addresses are case-sensitive, so /Implants and /implants can count as two pages. |
| Addresses have accented or special characters | Notice | Accents and symbols get encoded into long strings when shared, and some tools handle them badly. |
| Addresses contain spaces | Notice | Spaces turn into %20 in links and break easily when pasted. |
| Addresses repeat part of themselves | Notice | Addresses like /blog/blog/ usually come from a broken relative link, which can create endless fake pages. |
| Search or sorting pages can be crawled | Notice | Site search results and sorted lists can produce endless variations that use up Google's visits. |
| Pages are more than 3 clicks from the home page | Notice | Pages buried deep get visited less by Google and found less by patients. |
Indexability
| Check | Severity | What it means |
|---|---|---|
| Pages give Google conflicting instructions | Warning | The page says both index and noindex (or follow and nofollow). Google picks the stricter one. |
| Pages tell Google not to follow their links | Warning | A page-wide nofollow stops Google following any link on the page, so the pages it links to get found less. |
| Pages have their robots tag in the wrong place | Warning | Robots tags outside the head can be ignored. |
| Pages Google shouldn't index still show in search (Search Console) | Warning | Search Console shows impressions for a page that is noindex, redirected, broken or pointed elsewhere. Searchers land on the wrong page or a dead one. |
| Google visited pages but left them out (Search Console) | Warning | Search Console says Google read the page and chose not to index it, usually because it adds little beyond your other pages. |
| Google doesn't know pages yet (Search Console) | Warning | Search Console has never seen this address, so it can't appear in search. |
| Pages are set to stay out of Google | Notice | A noindex tag keeps the page out of search results. That's right for thank-you or private pages, and a costly mistake on a treatment page. |
| Pages are kept out of Google by the server | Notice | The server's X-Robots-Tag header says noindex. It doesn't show in the page itself, so it is easy to miss. |
| Pages repeat their robots instructions | Notice | Several robots tags, or the same rule in both the page and the server header, make later changes easy to get wrong. |
| Pages keep their images out of Google | Notice | noimageindex keeps the page's photos out of Google Images, where patients also look for practices. |
| Pages have an expiry date for Google | Notice | unavailable_after tells Google to drop the page after a date. It is often left over from an old offer. |
| Pages have a faulty base tag | Notice | A broken or repeated <base> tag changes where every relative link on the page points. |
| Google knows pages but hasn't visited them (Search Console) | Notice | Search Console says Google found the address but hasn't crawled it yet. |
| Google saw noindex on pages (Search Console) | Notice | Search Console says Google left the page out because of noindex. |
Canonical URLs
| Check | Severity | What it means |
|---|---|---|
| Pages have more than one canonical | Error | When a page names several canonicals, Google may ignore them all. |
| Secure pages name an insecure canonical | Error | The https:// page asks Google to index its http:// copy, which browsers mark as not secure. |
| Pages name a broken canonical | Error | The canonical points at a page that is missing or failing, so Google may drop both. |
| The www and non-www versions of your site don't agree | Error | Your site should open under one address and send the other one there. Here one version loads separately or not at all. |
| Pages have a canonical that isn't an address | Warning | The canonical is empty or not a web address, so Google ignores it. |
| Pages' canonicals contain a # | Warning | Google ignores everything after # in a canonical, so it may not point where you meant. |
| Pages have their canonical outside the head | Warning | Google only reads the canonical in the head. |
| Canonicals keep tracking codes | Warning | The canonical includes ad or session codes (utm_, gclid and the like), naming one tagged copy instead of the clean page. |
| Pages' headers and HTML name different canonicals | Warning | The server's Link header and the page disagree on the canonical, so Google may ignore both. |
| Pages name the home page as their canonical | Warning | Pointing a treatment or blog page's canonical at the home page asks Google to drop it. It is usually a theme setting gone wrong. |
| Pages name a canonical that redirects | Warning | The canonical points at an address that moves elsewhere. |
| Canonicals point to pages that point elsewhere | Warning | Page A names B, and B names C. Google may not follow the chain. |
| Pages' canonicals lead back in a loop | Warning | Pages name each other as canonical, so Google can't tell which to index. |
| Pages name a canonical Google can't index | Warning | The canonical target is noindex or blocked by robots.txt, so neither page may show in search. |
| Google picked a different main page for pages (Search Console) | Warning | Search Console says Google ignored your canonical and indexes another page as the original. |
| Google sees pages as copies with no canonical (Search Console) | Warning | Search Console found the page duplicates another and no canonical says which one to keep. |
| Pages have no canonical | Notice | A canonical tag names the main address of a page. Without one, Google guesses, and links with tracking codes can count as copies. |
| Pages have a relative canonical | Notice | A canonical like /implants works, but a full address can't be misread on a copied or staging site. |
| Pages name another site as their canonical | Notice | Google is asked to credit another domain with this page, for example an old domain or a copied template. |
| Pages point Google to other pages | Notice | These pages name a different page as the one to index. That's right for copies and wrong for pages that should rank. |
| Canonical pages aren't linked from your site | Notice | Other pages name it as the one to index, but none of your pages link to it. |
Titles & descriptions
| Check | Severity | What it means |
|---|---|---|
| Pages have no title | Error | The title is the blue link people click in Google. Without one Google makes one up, often badly. |
| Pages have more than one title | Warning | Google uses one of them, not necessarily the one you wrote. |
| Pages have their title outside the head | Warning | Titles outside the head can be ignored. |
| Titles are cut off in search results | Warning | Google cuts titles off after about 70 characters, so the end of a longer one disappears. |
| Titles are too short | Warning | A very short title wastes the space Google gives you to say what you offer and where. |
| Pages repeat their title as their main heading | Warning | Using different words in the title and the H1 lets the page match more of the ways people search. |
| Pages have no meta description | Warning | The description is the text under your link in Google. Without one, Google picks words from the page, which rarely make people click. |
| Pages have more than one meta description | Warning | With several descriptions, Google may ignore them all. |
| Pages have their description outside the head | Warning | Descriptions outside the head can be ignored. |
| Descriptions are cut off in search results | Notice | Google shows about 150 characters; the rest is cut. |
| Descriptions are short | Notice | There's room for about 150 characters to convince someone to choose your page. |
| Pages use their title as their description | Notice | The description should add what the title can't fit. |
| Your site has no favicon | Notice | Google shows the small site icon next to your result on phones. Without it you get a generic globe. |
| Pages share badly on social media | Notice | Missing Open Graph tags (title, description, image, address) make links shared on Facebook, WhatsApp or LinkedIn show without a proper picture or text. |
| Pages share a different address than their canonical | Notice | og:url and the canonical disagree, so shares and search credit different addresses. |
| Pages' sharing images don't load | Notice | Shared links show no picture because og:image is broken. |
| Pages have no X (Twitter) card | Notice | Posts on X show a plain link instead of a large preview. |
Content
| Check | Severity | What it means |
|---|---|---|
| Pages are mostly code, little text | Warning | Readable text is 10% or less of the page's HTML. Heavy page builders do this; it slows pages and gives Google little to read. |
| Pages have very little text | Warning | Pages under 200 words rarely rank for treatments people compare carefully. |
| Pages have no main heading | Warning | The H1 tells visitors, screen readers and Google what the page is about. |
| Pages still have placeholder text | Warning | Template filler (lorem ipsum) is still on the page for patients to see. |
| Pages have several main headings | Notice | One clear H1 makes the page's main topic obvious. |
| Main headings are long | Notice | A long H1 is hard to take in at a glance. |
| Pages have no subheadings | Notice | Subheadings break the page into answers people can scan, and AI tools quote them. |
| Pages skip heading levels | Notice | Screen readers and search engines read headings as an outline; jumping from H2 to H4 breaks it. |
| Pages have empty headings | Notice | Empty headings confuse screen readers and add noise. |
| Pages may have spelling mistakes | Notice | Typos make a practice look careless. Names and clinical terms may be flagged too, so check each one. |
| Pages are hard to read | Notice | Long sentences and long words make the page hard going for patients. Measured on English pages only. |
Duplicates
| Check | Severity | What it means |
|---|---|---|
| Pages share their title with another page | Error | Pages with the same title compete with each other in Google and look identical in results. |
| Pages share their description with another page | Error | Copied descriptions make different pages look the same in Google. |
| Pages have the same text as another page | Error | Google shows only one of the copies, and may not pick the one you want. |
| Pages load at two addresses | Warning | The same page opens with and without a trailing slash, in different capitals or with tracking codes, and nothing says which one counts. |
| Pages share their main heading with another page | Notice | The same H1 on several pages makes it unclear which page answers what. |
| Pages are almost the same as another page | Notice | Pages that only swap a town or treatment name, like location pages from one template, read as copies. |
Links
| Check | Severity | What it means |
|---|---|---|
| Links on your site are broken | Error | These links lead to a missing or failing page on your own site. |
| Links are written wrongly | Error | The link address has a typo (a missing slash or colon, spaces) so it goes nowhere. |
| Links point to a developer's computer | Error | Links to localhost, a private network address or a file on someone's computer only worked while the site was being built. |
| Links to other sites are broken | Warning | The other site's page is gone or failing. |
| Links to your own pages are nofollow | Warning | nofollow tells Google to ignore the link, so your own pages lose the boost it would give. |
| Links on secure pages use http:// | Warning | Links to your own pages over http:// cost a redirect or land on an insecure copy. |
| Link addresses are extremely long | Warning | Addresses over 2,000 characters break in some browsers and crawlers. |
| Pages have an enormous number of links | Warning | More than 3,000 links on one page dilutes each one and is usually a menu or footer gone wrong. |
| Pages have links crawlers can't follow | Warning | Buttons or links that work only through a script have no real address, so Google and AI tools can't follow them. |
| Links to other sites were refused | Notice | The other site refused our check (403). Many sites do that to crawlers while working fine for people. |
| Links to other sites are nofollow | Notice | Fine for ads and paid links; for trusted sources like a health service or a dental association a normal link is better. |
| Links have no text (AI search) | Notice | Icon or image links with no text or alt give screen readers, Google and AI tools nothing to say where they go. |
| Links say only "click here" or similar (AI search) | Notice | Words like "read more" don't say where a link goes, to people, screen readers, Google or AI tools. |
| Links open a file instead of a page | Notice | Linking straight to an image or code file sends visitors to a bare file with no way back to your site. |
| Pages are linked from only one page (AI search) | Notice | A page with a single link pointing to it is easy for visitors, Google and AI tools to miss. |
| Pages in your sitemap aren't linked from your site | Notice | Nothing on your site links to these pages, so visitors can't reach them and Google sees them as unimportant. |
| Pages don't link to the rest of your site | Notice | A dead-end page gives visitors no next step, such as booking or a related treatment. |
| Pages are reached only through nofollow links | Notice | Every link to these pages tells Google to ignore it, so Google may never find them. |
| Pages are linked only from hidden pages | Notice | The only links to these pages sit on pages kept out of Google, so they carry little weight. |
| Links to your own pages carry tracking codes | Notice | utm_ or session codes on your own links create extra copies of pages and muddle your visit reports. |
Images
| Check | Severity | What it means |
|---|---|---|
| Images on your site don't load | Error | Visitors see a broken picture where it should be. |
| Images from other sites don't load | Warning | An image you show from another site is gone. |
| Pages have images without alt text | Warning | Screen readers can't describe the image and Google Images can't tell what it shows. |
| Pages have very long alt text | Notice | Alt text over 100 characters is tiring to listen to and often stuffed with keywords. |
| Images are large files | Notice | Images over 100 KB slow pages down on phones, especially big photos straight from a camera. |
| Pages have images without a set size | Notice | Without width and height, the page jumps as images load, which annoys visitors and hurts Core Web Vitals. |
| Pages could load their images faster (PageSpeed) | Notice | Lighthouse found images that are bigger than shown, poorly compressed or in old formats. |
| Pages show stretched or squashed images (PageSpeed) | Notice | Images displayed at the wrong shape look distorted. |
| Pages have alt text that repeats nearby words (PageSpeed) | Notice | Screen readers read the same words twice when alt text repeats the caption or link next to it. |
Performance
| Check | Severity | What it means |
|---|---|---|
| Pages take over 3 seconds to arrive | Error | The page's HTML alone took over 3 seconds to download, before any images or scripts. Visitors on phones give up. |
| Pages are too big for Google to read in full | Error | Google reads only the first 2 MB of a page's HTML, so anything after that is invisible to it. |
| Script and style files on your site are missing | Error | Pages ask for code that isn't there, so menus, forms or the layout may not work. |
| Pages are sent uncompressed | Warning | Compression makes pages several times smaller to download. It is a server setting. |
| Script and style files are sent uncompressed | Warning | Uncompressed code files take longer to download. |
| Script and style files aren't cached | Warning | Without cache headers, returning visitors download the same files again on every page. |
| Script and style files aren't minified | Warning | Minifying strips spaces and comments from code files, making them smaller. |
| Pages load over 2 MB of scripts and styles | Warning | That much code makes phones slow to show and use the page. |
| Pages load over 100 script and style files | Warning | Each file is another request that slows the page down. |
| Pages fail Core Web Vitals for real visitors (Chrome UX Report) | Warning | Chrome users' own visits show slow loading, slow responses or a jumping layout. Google uses this in rankings. |
| Your site fails Core Web Vitals for real visitors (Chrome UX Report) | Warning | Across all your pages, real Chrome visitors find the site slow or jumpy. |
| Script and style files from other sites are missing | Notice | A widget or tool your pages load from elsewhere is gone. |
| Pages show their main content slowly to visitors (Chrome UX Report) | Notice | Largest Contentful Paint for real visitors is over 2.5 seconds. |
| Pages respond slowly to taps (Chrome UX Report) | Notice | Interaction to Next Paint for real visitors is over 200 ms, so buttons and menus feel laggy. |
| Pages jump around while loading (Chrome UX Report) | Notice | Cumulative Layout Shift for real visitors is over 0.1: content moves as the page loads, causing mis-taps. |
| Pages are blank for a while for visitors (Chrome UX Report) | Notice | First Contentful Paint for real visitors is over 1.8 seconds. |
| Pages' servers answer slowly (Chrome UX Report) | Notice | Time to First Byte for real visitors is over 0.8 seconds. |
| Pages score below 90 for mobile speed (PageSpeed) | Notice | Lighthouse's mobile performance score is below the good band (90 to 100). |
| Pages show their main content slowly in testing (PageSpeed) | Notice | In Lighthouse's phone test the largest image or text block took over 2.5 seconds. |
| Pages jump around in testing (PageSpeed) | Notice | In Lighthouse's test the layout shifted by more than 0.1. |
| Pages are busy running scripts (PageSpeed) | Notice | Scripts blocked the page for over 200 ms in testing, so taps wait. |
| Pages are blank for a while in testing (PageSpeed) | Notice | Nothing appeared for over 1.8 seconds in Lighthouse's test. |
| Pages fill in slowly in testing (PageSpeed) | Notice | The page took over 3.4 seconds to visibly fill in on Lighthouse's phone test. |
| Pages wait for files before showing anything (PageSpeed) | Notice | Scripts and styles in the head hold up the first paint. |
| Pages' first responses are slow (PageSpeed) | Notice | Lighthouse found the document slow to arrive, redirected or uncompressed. |
| Pages hide text while fonts load (PageSpeed) | Notice | Text stays invisible until the web font arrives. |
| Pages are built from too many elements (PageSpeed) | Notice | A very large page structure makes every change slow, often from page builders nesting boxes. |
| Pages find their main image late (PageSpeed) | Notice | The largest image is lazy-loaded or hidden in a script, so it starts downloading late. |
| Pages have elements that push content around (PageSpeed) | Notice | Lighthouse found what moves the layout: unsized images, late fonts or injected banners. |
| Pages make the browser redo their layout (PageSpeed) | Notice | Scripts read and change the layout in a way that stalls the page. |
| Pages send old-browser code to every browser (PageSpeed) | Notice | Compatibility code for old browsers adds weight modern phones don't need. |
| Pages load the same code twice (PageSpeed) | Notice | Two plugins bundle the same library, doubling the download. |
| Pages load files over old HTTP/1.1 (PageSpeed) | Notice | HTTP/2 and HTTP/3 load many files at once; HTTP/1.1 queues them. |
| Pages are slowed by other companies' scripts (PageSpeed) | Notice | Chat widgets, review badges, trackers and embeds from other sites take a big share of loading time. |
| Pages load files one after another (PageSpeed) | Notice | Files that only start once another has finished delay the page. |
| Pages are very heavy to download (PageSpeed) | Notice | The page downloads several megabytes, costly on mobile data. |
| Pages load styles they don't use (PageSpeed) | Notice | Most of the CSS downloaded isn't used on the page. |
| Pages load scripts they don't use (PageSpeed) | Notice | Much of the JavaScript downloaded never runs on the page. |
| Pages spend long running JavaScript (PageSpeed) | Notice | Phones spend seconds running the page's scripts. |
| Pages keep the browser busy (PageSpeed) | Notice | Layout, styles and scripts keep the phone's processor tied up. |
| Pages reload fully when visitors go back (PageSpeed) | Notice | Something on the page stops the browser keeping it ready for the Back button. |
| Pages have jerky animations (PageSpeed) | Notice | Animations that the browser can't hand to the graphics chip stutter. |
Mobile
| Check | Severity | What it means |
|---|---|---|
| Pages aren't set up for phones | Error | Without a viewport tag phones show the desktop layout zoomed out, and Google ranks the mobile version of your site. |
| Pages don't fit the phone's width | Error | The viewport tag doesn't say width=device-width, or fixes a pixel width, so the page doesn't adapt to the screen. |
| Pages have more than one viewport tag | Warning | Browsers use one of them, maybe not the right one. |
| Pages stop visitors zooming in | Warning | The viewport tag blocks or limits pinch-zoom, which people with poor eyesight rely on. |
| Pages use Flash or other dead plugins | Warning | No current browser or phone runs Flash or Java applets. |
| Pages have buttons too small to tap (PageSpeed) | Notice | Call, book and menu buttons that are small or crowded are hard to hit on a phone. |
Security
| Check | Severity | What it means |
|---|---|---|
| Pages aren't secure (http://) | Error | Browsers label http:// pages Not secure, which puts patients off, and Google prefers secure pages. |
| Your security certificate has expired | Error | Browsers show a full-page warning instead of your site until it is renewed. |
| Your server still accepts outdated encryption | Error | SSL and TLS 1.0 and 1.1 are broken; browsers have dropped them. |
| Your security certificate is for a different address | Error | The certificate doesn't cover this domain (or its www version), so browsers warn visitors. |
| Your server allows weak encryption | Error | Old ciphers can be cracked, exposing what visitors send. |
| Secure pages load insecure files | Error | Images, scripts or styles load over http:// on an https:// page. Browsers block them or drop the padlock. |
| The http:// version of your home page doesn't redirect | Error | People who type your address without https:// get an insecure copy, and Google sees two home pages. |
| Pages send form details insecurely | Error | A contact or booking form posts to an http:// address, or sits on an insecure page, so patients' details travel unencrypted. |
| Your site doesn't use HTTPS | Warning | The home page opens over http://, without encryption. |
| Your security certificate expires within 14 days | Warning | Automatic renewal normally happens a month ahead, so this suggests it is failing. |
| Your server doesn't support SNI | Warning | Without SNI, a shared server may show the wrong certificate to some visitors. |
| Pages' forms put personal details in the address | Warning | A form asking for an email, phone or message uses GET, so the details end up in browser history and server logs. |
| Your server lists the files in its folders | Warning | Anyone can browse folders on the server and see files never meant to be public. |
| Your site doesn't insist on HTTPS | Notice | An HSTS header tells browsers to always use https://, skipping the insecure first request. |
| Pages have no Content Security Policy | Notice | A Content Security Policy limits which scripts can run, making injected code much harder to exploit. |
| Pages let browsers guess file types | Notice | Without X-Content-Type-Options: nosniff, a browser may run a disguised file as a script. |
| Pages can be framed by other sites | Notice | Another site could show your page inside its own and trick visitors into clicks. |
| Pages' forms don't say how they send details | Notice | A form asking for an email, phone or message has no method, so if its script doesn't load, the browser puts the details in the address. |
| Pages rely on third-party cookies (PageSpeed) | Notice | Browsers are blocking cookies set by other sites, so embeds that need them may stop working. |
| Pages use browser features being removed (PageSpeed) | Notice | Code that relies on them will break as browsers update. |
| Pages stop visitors pasting into fields (PageSpeed) | Notice | Blocking paste frustrates people using password managers or copying their details. |
| Chrome reports problems on pages (PageSpeed) | Notice | Chrome's developer tools logged issues such as blocked cookies or mixed content. |
| Pages ask for the visitor's location straight away (PageSpeed) | Notice | Unexpected permission prompts make people leave or say no. |
| Pages ask to send notifications straight away (PageSpeed) | Notice | Notification prompts on arrival feel pushy. |
Structured data
| Check | Severity | What it means |
|---|---|---|
| Pages have structured data Google can't use | Error | Structured data tells Google your address, hours and reviews. Here it has syntax errors or lacks required details, so Google ignores it. |
| Your site doesn't describe your practice as a dentist (AI search) | Warning | No page carries Dentist or LocalBusiness structured data, so Google and AI tools can't reliably tie the site to your practice, address and hours. |
| Pages mark up reviews of your own practice | Warning | Google never shows review stars a business publishes about itself, and markup that breaks its review rules can lead to a manual penalty. |
| Google rejected the structured data on pages (Search Console) | Warning | Search Console found invalid items, so the page can't get rich results. |
| Pages' structured data is missing useful details | Notice | Google recommends more properties than are present, such as a phone number, logo or image. |
| Pages have no structured data | Notice | Structured data helps Google and AI tools understand pages, such as articles, people or services. |
| Pages' practice details are incomplete | Notice | Your Dentist or LocalBusiness data lacks details Google recommends, such as phone, opening hours or map position. |
| Pages describe the practice only as a general business | Notice | Google recommends the most specific type. Dentist says more than LocalBusiness or MedicalBusiness. |
AI search
| Check | Severity | What it means |
|---|---|---|
| Pages are blocked to AI search tools (AI search) | Warning | robots.txt stops ChatGPT, Claude, Perplexity or Google's AI from reading these pages, so they can't recommend or quote you. |
| Your site has no llms.txt (AI search) | Notice | llms.txt is a proposed plain-text summary of your site for AI tools. It is optional: Google says its AI features don't need it. |
| Your llms.txt isn't laid out as expected (AI search) | Notice | The file should start with a # heading and list links as "- [name](address)". |
| Your llms.txt links to broken pages (AI search) | Notice | AI tools following the file land on missing pages. |
| Pages stop Google quoting them (AI search) | Notice | nosnippet or max-snippet:0 keeps the page out of search snippets and Google's AI Overviews. |
| Pages have a very large amount of text (AI search) | Notice | Over 50 KB of text on one page buries the answers; people and AI tools find what they need faster on focused pages. |
| Pages haven't been updated in 6 months (AI search) | Notice | Its last-updated date is over 6 months old. Prices, team and hours go stale, and AI tools favour fresh pages. |
| Pages have little structure for machines to read (AI search) | Notice | The page is built from plain boxes without header, nav, main, article, section, aside or footer tags, so tools can't tell content from menus. |
| Pages are hard to scan (AI search) | Notice | Long paragraphs, missing subheadings or skipped heading levels make it hard for patients and AI tools to pick out answers. |
Accessibility
| Check | Severity | What it means |
|---|---|---|
| Pages use ARIA attributes on the wrong elements (PageSpeed) | Notice | Screen readers get confusing information about these elements. |
| Pages hide everything from screen readers (PageSpeed) | Notice | aria-hidden on the body makes the whole page silent to screen readers. |
| Pages have ARIA roles missing required details (PageSpeed) | Notice | Some elements declare a role but not the attributes it needs. |
| Pages have ARIA lists or menus without their items (PageSpeed) | Notice | A menu or list role is missing the child roles screen readers expect. |
| Pages have ARIA items outside their list or menu (PageSpeed) | Notice | Item roles need the right parent to make sense. |
| Pages use ARIA roles that don't exist (PageSpeed) | Notice | Screen readers ignore misspelled or invented roles. |
| Pages have ARIA attributes with invalid values (PageSpeed) | Notice | Invalid values give screen readers wrong information. |
| Pages use misspelled ARIA attributes (PageSpeed) | Notice | Attributes that don't exist are ignored. |
| Pages have buttons with no name (PageSpeed) | Notice | Icon buttons without text are announced as just "button", so blind visitors can't tell what they do. |
| Pages reuse IDs that labels depend on (PageSpeed) | Notice | Labels pointing at a repeated ID describe the wrong element. |
| Pages have form buttons with no text (PageSpeed) | Notice | Submit buttons without a value are announced without a purpose. |
| Pages have image buttons without alt text (PageSpeed) | Notice | Image buttons need alt text to say what they do. |
| Pages have form fields without labels (PageSpeed) | Notice | Contact and booking fields with only placeholder text can't be identified by screen readers, and the hint disappears once typing starts. |
| Pages have dropdowns without labels (PageSpeed) | Notice | A dropdown without a label is announced without saying what it chooses. |
| Pages have videos without captions (PageSpeed) | Notice | Deaf visitors, and anyone watching with the sound off, miss what is said. |
| Pages repeat keyboard shortcuts (PageSpeed) | Notice | The same access key on two elements makes one unreachable. |
| Pages have ARIA buttons or links without names (PageSpeed) | Notice | Custom buttons and links need a name for screen readers. |
| Pages use ARIA attributes where they don't apply (PageSpeed) | Notice | Some ARIA attributes only work in certain situations. |
| Pages have pop-ups without a name (PageSpeed) | Notice | Screen readers can't say what a pop-up is about. |
| Pages let keyboard users reach hidden elements (PageSpeed) | Notice | Keyboard focus lands on things screen readers are told to skip. |
| Pages have custom fields without names (PageSpeed) | Notice | Custom input widgets need a name for screen readers. |
| Pages have meters without names (PageSpeed) | Notice | Screen readers can't say what the meter measures. |
| Pages have progress bars without names (PageSpeed) | Notice | Screen readers can't say what is progressing. |
| Pages use ARIA attributes that aren't allowed (PageSpeed) | Notice | Some roles forbid certain attributes, such as a label on plain text. |
| Pages have text roles containing buttons or links (PageSpeed) | Notice | role="text" hides the button or link inside it. |
| Pages have switches without names (PageSpeed) | Notice | Custom checkboxes and switches need a name. |
| Pages have tooltips without names (PageSpeed) | Notice | Screen readers can't announce an empty tooltip. |
| Pages have tree menu items without names (PageSpeed) | Notice | Items in an expanding menu need names. |
| Pages make keyboard users tab through the whole menu (PageSpeed) | Notice | There's no skip link, heading or landmark to jump to the content. |
| Pages have text that's hard to see (PageSpeed) | Notice | Pale text on light backgrounds (or similar) is hard to read, especially for older patients and in sunlight. |
| Pages have badly built definition lists (PageSpeed) | Notice | Screen readers can't pair terms and definitions. |
| Pages have definition items outside a list (PageSpeed) | Notice | dt and dd only make sense inside dl. |
| Pages have links that look like plain text (PageSpeed) | Notice | Links shown only by colour are invisible to colour-blind visitors. |
| Pages have badly built lists (PageSpeed) | Notice | Lists contain things other than list items. |
| Pages have list items outside a list (PageSpeed) | Notice | Screen readers can't announce them as a list. |
| Pages have embedded objects without a description (PageSpeed) | Notice | Embedded objects need text describing them. |
| Pages change the keyboard order (PageSpeed) | Notice | A tabindex above 0 makes the Tab key jump around unpredictably. |
| Pages have table cells pointing at missing headers (PageSpeed) | Notice | Screen readers can't tell which header a price or time belongs to. |
| Pages have table headers that label nothing (PageSpeed) | Notice | Header cells should describe data cells. |
| Pages mark parts with an invalid language (PageSpeed) | Notice | Screen readers pick the wrong voice for that text. |
| Pages have form fields with more than one label (PageSpeed) | Notice | Screen readers may read only one of them. |
| Pages declare two different languages (PageSpeed) | Notice | lang and xml:lang disagree on the html tag. |
| Pages have skip links that go nowhere (PageSpeed) | Notice | The "skip to content" link can't receive focus or has no target. |
| Pages have no main section (PageSpeed) | Notice | Screen reader users jump to the main landmark to skip menus. |
| Pages use retired ARIA roles (PageSpeed) | Notice | Retired roles may stop working in screen readers. |
| Pages' forms don't help browsers fill them in (PageSpeed) | Notice | Valid autocomplete values let phones fill in name, email and phone in one tap, so more booking forms get finished. |
| Pages hide elements that still act like controls (PageSpeed) | Notice | Elements marked decorative are still focusable or labelled. |
| Pages have SVG images without a description (PageSpeed) | Notice | SVGs marked as images need a title or label. |
| Pages repeat tables' captions in their summary (PageSpeed) | Notice | Screen readers read the same words twice. |
| Pages give elements roles they can't have (PageSpeed) | Notice | Some HTML elements can't take certain ARIA roles. |
| Pages have identical link text going to different places (PageSpeed) | Notice | Screen reader users hear a list of links that all sound the same. |
| Pages have embeds without a title | Notice | Maps, videos and booking widgets in an iframe need a title so screen readers can say what they are. |
Local & compliance
| Check | Severity | What it means |
|---|---|---|
| Your website and Google profile show different details (Google profile) | Warning | Your name, address or phone on the website differs from your Google Business Profile. Google trusts details that match everywhere. |
| Your Google profile doesn't link to this website (Google profile) | Warning | The website button on your Google Business Profile is missing, broken or goes to another site. |
| Your Google profile's phone number isn't on the website (Google profile) | Warning | No page links or lists the number on your Google profile, so Google can't confirm they're the same practice. |
| Your site doesn't link to the GDC (UK only) | Warning | GDC guidance expects practice websites to give the General Dental Council's address or a link to gdc-uk.org. |
| Your site doesn't show GDC registration numbers (UK only) | Warning | GDC guidance expects each dental professional named on the site to show their registration number and qualifications. |
| Your site doesn't explain how to complain (UK only) | Warning | GDC guidance expects your complaints procedure on the website, and who patients can contact if unhappy with the outcome. |
| Your site doesn't show your CQC rating (UK only) | Warning | In England, once the CQC has rated a practice, its website must show the rating and link to the report. Not doing so can lead to a fine. |
| Your website and Google profile show different opening hours (Google profile) | Notice | Patients who see two sets of hours may turn up when you're closed. |
| Pages have no tap-to-call link | Notice | Most people looking for a dentist are on a phone. A tel: link lets them call in one tap. |
| Pages have call links without the country code | Notice | tel: links in international format (+44...) work for every caller, including visitors from abroad. |
| Pages have no way to book | Notice | A visible booking button turns interest into appointments, especially on treatment pages. |
| Your site has no map | Notice | A map on the contact page helps patients find you and confirms your location. |
| Pages load tracking before visitors agree (not in the US) | Notice | Analytics or advertising tags ran during our visit although we never accepted cookies. Privacy law requires consent first. Google's own tags are left out, since consent mode loads them before consent by design. |
International
| Check | Severity | What it means |
|---|---|---|
| Pages have invalid language codes | Error | Google ignores hreflang codes it doesn't recognise, such as en-UK (it should be en-GB). |
| Pages list two pages for the same language | Error | Google can't tell which address is meant for that language. |
| Pages point to language versions that don't load | Error | An alternate language address is missing, failing or redirected. |
| Pages' language versions don't point back | Error | Google ignores a language pair unless both pages name each other. |
| Pages leave themselves out of their language list | Warning | Each version must list itself as well as the others. |
| Pages point to language versions that point elsewhere | Warning | An alternate version names a different canonical, so the pair conflicts. |
| Pages point to language versions Google can't index | Warning | An alternate version is noindex or blocked by robots.txt. |
| Pages don't say what language they are in | Warning | Without a lang attribute or hreflang, screen readers may use the wrong voice and search engines must guess. |
| Pages declare an invalid language | Warning | The lang attribute isn't a real language code. |
| Pages give two languages the same address | Warning | One page can't be both the English and the Italian version. |
| Pages use relative hreflang addresses | Warning | Google needs full addresses, https:// included, in hreflang. |
| Pages have hreflang outside the head | Warning | Google only reads hreflang links in the head. |
| Pages list only one language version | Warning | A language set needs at least two versions to mean anything. |
| Pages have no default language version | Notice | x-default tells Google which version to show everyone else. |
| Pages' hreflang and page language disagree | Notice | The page lists itself under one language but its html tag declares another. |
JavaScript
| Check | Severity | What it means |
|---|---|---|
| Pages say noindex until JavaScript runs | Error | Google reads the noindex in the page as sent and may never run the script that removes it, so the page stays out of search. |
| Pages say nofollow until JavaScript runs | Warning | Google may obey the nofollow before the script removes it. |
| Pages' canonicals are changed by JavaScript | Warning | The canonical in the HTML as sent differs from, or is removed in, the finished page. Google may use either. |
| Pages show most of their text only with JavaScript (AI search) | Warning | Without scripts, less than half the text is there. Most AI tools don't run scripts, so they see a nearly empty page. |
| Pages get their canonical only from JavaScript | Notice | Google may index the page before it sees the canonical. |
| Pages' titles are set by JavaScript | Notice | The title in the HTML as sent differs from the finished page. AI tools that don't run scripts see the first one. |
| Pages' descriptions are set by JavaScript | Notice | The description changes after scripts run. |
| Pages' main headings are set by JavaScript | Notice | The H1 changes or appears only after scripts run. |
| Pages show most of their links only with JavaScript (AI search) | Notice | Without scripts, less than half of the page's links to your site exist, so crawlers that don't run scripts can't move around. |
| Pages have JavaScript errors (PageSpeed) | Notice | Errors in the browser console can break menus, forms or booking widgets. |
| Pages use Google's retired #! crawling scheme | Notice | Google stopped supporting #! addresses years ago. |
| Pages load the same tracking code twice | Notice | The same Google Analytics or Tag Manager ID loads more than once, which double-counts visits and conversions. |
Sitemaps & robots.txt
| Check | Severity | What it means |
|---|---|---|
| Your robots.txt has mistakes | Error | Lines crawlers can't read are ignored, so the rules may not do what you meant. |
| Your robots.txt can't be read | Error | When robots.txt fails with a server error or endless redirects, Google stops crawling the whole site until it can read it. |
| Your robots.txt blocks Google from the whole site | Error | "Disallow: /" keeps every page out of Google. It is usually left over from when the site was being built. |
| Sitemaps can't be read | Error | The sitemap is missing, isn't valid XML, or isn't in the sitemap format, so Google can't use it. |
| Sitemaps are over the size limit | Error | A sitemap may hold at most 50,000 addresses or 50 MB; past that it is ignored. |
| Addresses in your sitemap shouldn't be there | Error | The sitemap lists pages that are missing, redirect, are noindex, blocked or point to another canonical. Google trusts sitemaps that list only live, indexable pages. |
| Your robots.txt is over Google's 500 KB limit | Warning | Google ignores rules past the first 500 KB. |
| Your site has no sitemap | Warning | A sitemap lists your pages so Google finds new and updated ones quickly. |
| Your robots.txt doesn't mention your sitemap | Warning | Crawlers other than Google look for the sitemap in robots.txt. |
| Addresses in your sitemap use http:// | Warning | Your secure site's sitemap lists insecure addresses. |
| Your site has no robots.txt | Notice | Not required, but robots.txt is where you point crawlers at your sitemap and keep them out of admin areas. |
| Addresses are listed in more than one sitemap | Notice | Harmless, but it suggests two tools are making sitemaps. |
| Pages aren't in your sitemap | Notice | Google may find these pages later than the ones your sitemap lists. |
Check your website
Check every page of your website, read its Health, AI search and Speed scores, work through what to fix and send each fix to your web developer.
Monitor AI visibility
Check whether AI assistants name or link to your practice, compare each one against the competitor it names most, find the questions you're missing from and read what the answers said.