| Text in the server response | Fail |
0 of 23,828 words (0%), across all 23 pages | the pages, loaded twice: with and without JavaScript |
| Pages empty without JavaScript | Fail |
23 of 23 | the pages, loaded twice: with and without JavaScript |
| Passages an assistant could quote | Fail |
none: there is no delivered text to split into passages | the pages, loaded twice: with and without JavaScript |
| Structured data in the server response | Fail |
absent on 23 of 23 pages, present on all of them once rendered | the structured data in the server response |
| Malformed structured data | Pass |
none: what is there is written correctly. It is judged on the rendered page, because the server response carries no markup to judge | the structured data the browser builds on the page |
| Retired markup types | Pass |
no HowTo, and no FAQPage of the kind Google stopped showing | the structured data the browser builds on the page |
| Homepage description | Pass |
97 characters, and it names no country. Read in both views of the page: the server response and again after the scripts run | the page the server returned, before anything ran in the browser |
| Sharing description added in the browser | Check |
og:description says "with trusted UK installers" for a business serving NSW. It is written by JavaScript, so it is absent from the server response, which is what most link-preview scrapers read. Worth correcting, but it reaches few people | the page after the scripts have run, in a real browser |
| Sharing image | Fail |
og:image is a preview screenshot on the site builder's domain, not a picture of your work | the page the server returned, before anything ran in the browser |
| Page title | Check |
the server sends "Sample Solar Co. - Solar PV & Battery Installation" and the browser rewrites it to "... | Cut Energy Bills". A crawler that does not run scripts sees only the first | the page the server returned, before anything ran in the browser |
| Homepage technical score | Pass |
90.02 out of 100, homepage only | the homepage as a crawler reads it |
| Pages found | Pass |
24, of which 23 are distinct pages | the sitemap, routes observed on publicly accessible pages, and a rendered crawl |
| Declared in the sitemap but unreachable | Pass |
0 pages | the sitemap, routes observed on publicly accessible pages, and a rendered crawl |
| Published but never declared | Pass |
0 pages | the sitemap, routes observed on publicly accessible pages, and a rendered crawl |
| Homepage open to search engines | Pass |
nothing on the homepage blocks it from being indexed | the page the server returned, before anything ran in the browser |
| HTTPS certificate | Pass |
the site loads over HTTPS with a valid certificate | the page the server returned, before anything ran in the browser |
| Main heading on the homepage | Fail |
the homepage has no H1 heading | the page the server returned, before anything ran in the browser |
| Mobile viewport tag | Pass |
the page declares a mobile viewport | the page the server returned, before anything ran in the browser |
| Server response time | Check |
the server answered in 1361 ms, measured from Sydney (one page, measured once) | the page the server returned, before anything ran in the browser |
| Text compression | Pass |
the page is sent compressed (gzip) | the page the server returned, before anything ran in the browser |
| XML sitemap | Pass |
sitemap found via robots.txt | the page the server returned, before anything ran in the browser |
| Largest Contentful Paint (loading) | None found |
no field data (not enough real-user traffic) | Google PageSpeed Insights |
| Interaction to Next Paint (responsiveness) | None found |
no field data (not enough real-user traffic) | Google PageSpeed Insights |
| Cumulative Layout Shift (visual stability) | None found |
no field data (not enough real-user traffic) | Google PageSpeed Insights |
| PageSpeed performance score (lab) | Check |
67/100 in a synthetic mobile test (diagnostic, not field data) | Google PageSpeed Insights |
| First paint (lab) | Fail |
4.0 s in a synthetic mobile test. This is when the visitor stops looking at a blank screen. | Google PageSpeed Insights |
| Largest paint (lab) | Fail |
4.8 s in a synthetic mobile test. When the main thing on the page finally appears. Google calls anything over 4 seconds poor. | Google PageSpeed Insights |
| How quickly the page fills in (lab) | Fail |
8.3 s in a synthetic mobile test. Not a single moment but how long the page keeps changing. | Google PageSpeed Insights |
| Time the page ignores taps (lab) | Pass |
0 ms in a synthetic mobile test. How long scripts hold the page busy while someone is trying to use it. | Google PageSpeed Insights |
| JavaScript downloaded and never used | Fail |
162 KiB in a synthetic mobile test. Bytes the visitor pays for on their connection and nothing runs. | Google PageSpeed Insights |
| Image formats on the homepage | Not delivered |
no images arrived with the homepage, so there was nothing to weigh or convert | the homepage images, weighed as files |
| Oversized images on the homepage | Not delivered |
no images arrived with the homepage, so there was nothing to weigh or convert | the homepage images, weighed as files |
| Total image weight on the homepage | Not delivered |
no images arrived with the homepage, so there was nothing to weigh or convert | the homepage images, weighed as files |
| AI assistant access to your site | Pass |
all 7 crawlers that serve live answers are allowed to read the site. Permission is not what is stopping them: what the server hands them is an empty page | the robots.txt file on the site |
| AI training crawlers | Pass |
all 8 model-training crawlers are allowed to read the site | the robots.txt file on the site |
| Sitemap declared in robots.txt | Pass |
robots.txt points to https://samplesolar.example/sitemap.xml | the robots.txt file on the site |
| The llms.txt file | Pass |
not published. No major assistant has publicly confirmed reading it and Google Search ignores it, so this is a note rather than a problem: worth adding only when there is nothing better to do | the page the server returned, before anything ran in the browser |
| Protective response headers | Context |
3 of 6 are missing on every page: content-security-policy, x-frame-options, permissions-policy. They protect the person on your site, not your position in search | the response headers on every page |
| Server announces its own software | Context |
the server header names what is running behind the site. No hole by itself; it shortens the work for someone hunting a known one | the response headers on every page |
| Position for "solar installer [city]" | Fail |
nowhere in the 9 results Google returned. The top places go to g.example, f.example, j.example | Google results for that search |
| Position for "how much do solar panels cost in [city]" | Fail |
nowhere in the 9 results Google returned. The top places go to g.example, m.example, h.example | Google results for that search |
| Position for "is a solar battery worth it in [city]" | Fail |
nowhere in the 8 results Google returned. The top places go to k.example, g.example, www.reddit.com | Google results for that search |
| Position for "nsw solar battery rebate 2026" | Fail |
nowhere in the 9 results Google returned. The top places go to www.energy.nsw.gov.au, l.example, www.dcceew.gov.au | Google results for that search |
| What people want from "solar installer [city]" | Context |
navigational, at 46% probability | what people searching that phrase are trying to do |
| What people want from "how much do solar panels cost in [city]" | Context |
commercial, at 71% probability | what people searching that phrase are trying to do |
| What people want from "is a solar battery worth it in [city]" | Context |
commercial, at 67% probability | what people searching that phrase are trying to do |
| What people want from "nsw solar battery rebate 2026" | Context |
commercial, at 83% probability | what people searching that phrase are trying to do |
| Searches this site already appears for | None found |
none: the site does not currently rank for anything measurable | the searches this site already appears for |
| Sites competing for the same searches | None found |
none returned, which follows from the line above | sites competing for the same searches |
| Sample Solar Co. named by ChatGPT | Fail |
0 of 15 answers to real questions | ChatGPT, asked with web search on |
| Named instead of you | Context |
Competitor B (3), Competitor C (3), Competitor F (2), Competitor E (2), Competitor A (2), Australian solar installer (1), Competitor N (1), Competitor H (1), Competitor G (1), out of 15 answers | ChatGPT, asked with web search on |
| Your Google Business Profile | Fail |
no profile exists for this business. Looked it up by name in the area you serve | a direct look-up of the business in Google |
| Map results for "solar installer [city]" | Fail |
Google shows 3 businesses on the map above the links: Competitor A, Competitor B, Competitor C. You are not among them, and without a profile you cannot be | the map results Google shows above the links |
| Google writes its own answer above the results | Fail |
on 3 of the 4 questions checked. It quotes g.example, h.example, m.example, i.example, www.reddit.com, and not you | the answer Google writes above the results |
| Times assistants mention this site | None found |
none recorded | how often assistants mention the site |
| Claude and Perplexity | Not included |
not asked for this audit | not run for this audit |
| samplesolar.example (you) | Fail |
20 sites link to it, 20 links in total. Spam signal 60 of 100, where lower is cleaner | links pointing at each site |
| d.example | Context |
173 sites link to it, 462 links in total. Spam signal 22 of 100, where lower is cleaner | links pointing at each site |
| c.example | Context |
66 sites link to it, 151 links in total. Spam signal 20 of 100, where lower is cleaner | links pointing at each site |
| b.example | Context |
35 sites link to it, 368 links in total. Spam signal 3 of 100, where lower is cleaner | links pointing at each site |
| Passages a machine could lift and quote | Fail |
none on any of the 23 pages, because no text arrives to split into passages. This is not a judgement on the writing: there was nothing to judge | the pages, loaded twice: with and without JavaScript |
| What the site runs on | Pass |
Cloudflare, Cloudflare Bot Management, Google Analytics, Google Tag Manager | the software stack answering for the domain |
| Bot filtering in front of the site | Check |
Cloudflare Bot Management sits between visitors and the pages. It is there to stop abuse, and it also decides which automated readers get through. Worth checking that the assistants you want are on its allow list | the software stack answering for the domain |
| c.example ranks for | Context |
1,795 searches. Best of them: "electric vehicle charging" at 81, "ev cars charging stations" at 60, "ev charging stations" at 52 | the searches this site already appears for |
| b.example ranks for | Context |
44 searches. Best of them: "stcs" at 31, "solar batteries [city]" at 10, "solar battery [city]" at 10 | the searches this site already appears for |
| d.example ranks for | Context |
930 searches. Best of them: "Competitor K" at 1, "photoelectric panels" at 85, "Competitor K canberra" at 1 | the searches this site already appears for |
| Competitor I | Context |
claimed profile, 5 stars from 2 reviews | the map results Google shows above the links |
| Competitor A | Context |
claimed profile, 5 stars from 75 reviews | the map results Google shows above the links |
| Competitor C | Context |
claimed profile, 5 stars from 253 reviews | the map results Google shows above the links |
| Green Solar Solutions | Context |
claimed profile, 4.1 stars from 29 reviews | the map results Google shows above the links |
| Competitor E | Context |
claimed profile, 4.8 stars from 56 reviews | the map results Google shows above the links |
| Isolux Solar [city] | Context |
claimed profile, no reviews yet | the map results Google shows above the links |
| Best Solar [region] | Context |
claimed profile, 5 stars from 2 reviews | the map results Google shows above the links |
| The address Google gives for you | Fail |
Level 1, [street address], [suburb] NSW [postcode]. It is not on your site: not in the server response, not after the scripts run, not in your markup. Google takes it from the listing below, and a customer looking for you in [city] and the [region] is told you are somewhere else | the listing about you on the comparison site Google quotes |
| Installations that listing claims for you | Fail |
3, and no reviews at all. This is the page Google reads when it describes you | the listing about you on the comparison site Google quotes |
| Trading name in the business register | Fail |
the register holds SOLAR STAR PTY LTD at this ABN and no business name matching "Sample Solar Co.". A machine checking whether you are a real company finds no link between the name on the site and the entity behind it | the national business register |
| Accreditation shown on that listing | Pass |
SAA Approved Installer, verified by the comparison site | the listing about you on the comparison site Google quotes |
| Phone, site against listing | Pass |
the same number on both, so the listing is genuinely yours | the listing about you on the comparison site Google quotes |