Search & AI visibility audit report

samplesolar.example

28issues found

across 48 checks · 20 passed

Start with what is wrong with the site

Solar and battery installation, [city] and the [region].

Prepared for Sample Solar Co.Website samplesolar.exampleService Standard Audit

Every line names what it was checked with.

Summary

Two things are missing, and between them they explain the rest

The site carries 23,828 words across 23 pages, and its homepage scores 90.02 out of 100 on the usual technical measure. It is built well for a person and is not delivered to a machine at all: a client that does not run JavaScript receives 0 words from all 23 of them. Separately, and not on the site at all: there is no Google Business Profile for the business. On "solar installer [city]" Google shows a map of 3 businesses above the links, and a business without a profile cannot appear there however good its website becomes.

0
words a machine receives, of 23,828
0 of 0
passages a machine could quote
0 of 15
ChatGPT answers naming you
0 of 4
searches reaching the top 10

Top issues

The 5 most serious of 28

Priority reflects our assessment, not a measurement of lost sales.

You have no Google Business Profile

critical
Evidence
A direct look-up by name in [city] and the [region] returns no profile. On "solar installer [city]" Google shows a map of 3 businesses above the links: Competitor A, Competitor B, Competitor C.
Why it may matter
This is the panel a customer sees first on a phone, and the only way into it is a profile. It is also where reviews, hours and directions live. Nothing on the website can substitute for it. It is also the one finding in this report that does not wait for anything else here: the profile is a form, not an engineering job.
What to do
Claim the profile at business.google.com, with the trading name, the service area, the phone number and the hours. It is free and takes about a day to verify.

Google tells customers you are in [suburb], a different part of the state

critical
Evidence
Ask Google about the business by name and its own answer gives the address Level 1, [street address], [suburb] NSW [postcode], taken from a comparison site. That address appears nowhere on your own site, which says only that you serve [city] and the [region].
Why it may matter
A machine that gets nothing from your site describes you from whatever else it can find, and what it found is a directory entry. Every answer Google wrote about your trade during this audit quoted that same comparison site.
What to do
Two moves. Correct the listing so it shows the area you actually serve, and give the machines a better source than a directory: the address, area and credentials in the server response, where they can be read.

Every page we checked is empty until JavaScript runs

critical
Evidence
All 23 pages we checked return 0 words to a client that does not run scripts. Rendered, the same pages carry 23,828 words.
Why it may matter
In our test, every one of the 23 sampled pages returned no readable content before JavaScript ran. This can limit access for crawlers that do not render JavaScript. It does not establish that Google or every AI service cannot index or cite those pages. Most of what follows in this report traces back to it.
What to do
Serve the page content in the server response. The writing, the markup and the structure are already there and already correct; what changes is where they are assembled.

Your structured data is written and never delivered

high
Evidence
The business block is present on all 23 pages once rendered, and absent from the server response on every one of them.
Why it may matter
This is what tells a machine your name, address, hours and services without guessing. It has been written correctly and it is invisible to the machines it was written for.
What to do
Nothing to add. It has to arrive in the HTML the server sends, which the fix above delivers.

The main content takes 4.8 s to appear

medium
Evidence
4.8 s in a synthetic mobile test. There is not enough real-user traffic on this site for Google to report what actual visitors see, so this is a diagnostic measurement rather than a record of anyone's visit.
Why it may matter
Google treats anything over four seconds as poor. On a phone connection that is long enough for someone to go back to the results and pick the next business.
What to do
Start with the largest image on the homepage: size it for the screen it appears on and let it load first. The unused JavaScript in the same table is the other half.

The business

What you told us, in your words

Everything below is measured against this. If any of it is wrong, the priorities change.

What the business doesDirect solar PV, battery storage, and EV charger installer (SAA certified). Serves the [city] / [region] region, NSW, Australia. No lead-gen middleman model.
Tradesolar and battery installation
Area served[city] and the [region]
Competitors you namedd.example, c.example, b.example, e.example, a.example
Searches you care aboutsolar installer [city], how much do solar panels cost in [city], is a solar battery worth it in [city], nsw solar battery rebate 2026
Notes you addedFree recon found NO address/phone anywhere on the site; region was only discoverable via /blog page text mentioning [city]/[region]. This is itself a local-SEO finding, not just a data-collection detail.

Part 1 / The cause

What a machine actually receives

This is the whole report in one section. Everything in Part 2 follows from it.

Words on the site, and words a machine actually receives

Written on the pages23,828 Delivered without JavaScript0 (0%)
The missing words live on the 23 pages that return nothing at all without scripts.
CheckResult What was measuredChecked with
Text in the server responseFail 0 of 23,828 words (0%), across all 23 pagesthe pages, loaded twice: with and without JavaScript
Pages empty without JavaScriptFail 23 of 23the pages, loaded twice: with and without JavaScript
Passages an assistant could quoteFail none: there is no delivered text to split into passagesthe pages, loaded twice: with and without JavaScript
Bot filtering in front of the siteCheck 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 listthe software stack answering for the domain

Structured data

Written correctly, and delivered to nobody.

CheckResult What was measuredChecked with
Structured data in the server responseFail absent on 23 of 23 pages, present on all of them once renderedthe structured data in the server response
Malformed structured dataPass none: what is there is written correctly. It is judged on the rendered page, because the server response carries no markup to judgethe structured data the browser builds on the page
Retired markup typesPass no HowTo, and no FAQPage of the kind Google stopped showingthe structured data the browser builds on the page

Permission to read the site

CheckResult What was measuredChecked with
AI assistant access to your sitePass 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 pagethe robots.txt file on the site
AI training crawlersPass all 8 model-training crawlers are allowed to read the sitethe robots.txt file on the site
Sitemap declared in robots.txtPass robots.txt points to https://samplesolar.example/sitemap.xmlthe robots.txt file on the site

Part 1 / The cause

Website health

CheckResult What was measuredChecked with
Sharing description added in the browserCheck 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 peoplethe page after the scripts have run, in a real browser
Sharing imageFail og:image is a preview screenshot on the site builder's domain, not a picture of your workthe page the server returned, before anything ran in the browser
Page titleCheck 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 firstthe page the server returned, before anything ran in the browser
Main heading on the homepageFail the homepage has no H1 headingthe page the server returned, before anything ran in the browser
Server response timeCheck the server answered in 1361 ms, measured from Sydney (one page, measured once)the page the server returned, before anything ran in the browser
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
JavaScript downloaded and never usedFail 162 KiB in a synthetic mobile test. Bytes the visitor pays for on their connection and nothing runs.Google PageSpeed Insights
10 checks passed
CheckResult What was measuredChecked with
Homepage descriptionPass 97 characters, and it names no country. Read in both views of the page: the server response and again after the scripts runthe page the server returned, before anything ran in the browser
Homepage technical scorePass 90.02 out of 100, homepage onlythe homepage as a crawler reads it
Homepage open to search enginesPass nothing on the homepage blocks it from being indexedthe page the server returned, before anything ran in the browser
HTTPS certificatePass the site loads over HTTPS with a valid certificatethe page the server returned, before anything ran in the browser
Mobile viewport tagPass the page declares a mobile viewportthe page the server returned, before anything ran in the browser
Text compressionPass the page is sent compressed (gzip)the page the server returned, before anything ran in the browser
XML sitemapPass sitemap found via robots.txtthe page the server returned, before anything ran in the browser
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
The llms.txt filePass 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 dothe page the server returned, before anything ran in the browser
What the site runs onPass Cloudflare, Cloudflare Bot Management, Google Analytics, Google Tag Managerthe software stack answering for the domain

Part 1 / The cause

What the sitemap leaves out

The sitemap is how a search engine learns which pages exist. This compares it against the pages actually reachable on the site.

CheckResult What was measuredChecked with
Pages foundPass 24, of which 23 are distinct pagesthe sitemap, routes observed on publicly accessible pages, and a rendered crawl
Declared in the sitemap but unreachablePass 0 pagesthe sitemap, routes observed on publicly accessible pages, and a rendered crawl
Published but never declaredPass 0 pagesthe sitemap, routes observed on publicly accessible pages, and a rendered crawl

Part 1 / The cause

What the pages say, block by block

A machine answering a customer does not read a page top to bottom. It lifts the one passage that answers the question. This scores every passage on the site for whether it could be lifted: does it answer directly, does it stand alone, does it read cleanly, does it carry facts, does it say something of its own.

CheckResult What was measuredChecked with
Passages a machine could lift and quoteFail 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 judgethe pages, loaded twice: with and without JavaScript

Every one of the 23 pages carries real writing, and a crawler receives none of it. There is nothing to score. The moment the server sends the words, this section becomes the most useful one in the report.

Outside the audit

Passive observations on public response headers

Outside the scope of this audit, and here because we saw it. None of this affects your position in search or whether an assistant cites you, so none of it is counted in the figures above. It protects the person on your site, and it is a setting on your server or CDN rather than a change to the site. No penetration testing or other intrusive security assessment was performed: these observations do not certify that the website is secure or free from vulnerabilities.

CheckResult What was measuredChecked with
Protective response headersContext 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 searchthe response headers on every page
Server announces its own softwareContext the server header names what is running behind the site. No hole by itself; it shortens the work for someone hunting a known onethe response headers on every page

Part 1 / The cause

Your Google Business Profile

There is no profile. Checked twice: a direct look-up by name, and a search of Google Maps for the area. Below is what the businesses that do have one look like, which is the measure of what is missing.

Reviews on the Google profiles of businesses like yours nearby

Competitor C253 reviews, 5★ Competitor A & Battery Solutions Wollong75 reviews, 5★ Competitor E56 reviews, 4.8★ Green Solar Solutions29 reviews, 4.1★ Competitor I2 reviews, 5★ Best Solar [region]2 reviews, 5★ Sample Solar Co. (no profile)no profile
Review count is most of what decides the order of that map panel. The number is not reachable at all without a profile, which is why claiming one comes before everything else in the plan.
BusinessResult What was measuredChecked with
Your Google Business ProfileFail no profile exists for this business. Looked it up by name in the area you servea 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 bethe map results Google shows above the links
Competitor IContext claimed profile, 5 stars from 2 reviewsthe map results Google shows above the links
Competitor AContext claimed profile, 5 stars from 75 reviewsthe map results Google shows above the links
Competitor CContext claimed profile, 5 stars from 253 reviewsthe map results Google shows above the links
Green Solar SolutionsContext claimed profile, 4.1 stars from 29 reviewsthe map results Google shows above the links
Competitor EContext claimed profile, 4.8 stars from 56 reviewsthe map results Google shows above the links
Isolux Solar [city]Context claimed profile, no reviews yetthe map results Google shows above the links
Best Solar [region]Context claimed profile, 5 stars from 2 reviewsthe map results Google shows above the links

Part 2 / The consequence

What other sites say about you

When a machine gets nothing from your own pages it does not give up, it looks elsewhere. This is what it finds, and it is currently the closest thing you have to an official profile online.

CheckResult What was measuredChecked with
The address Google gives for youFail 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 elsethe listing about you on the comparison site Google quotes
Installations that listing claims for youFail 3, and no reviews at all. This is the page Google reads when it describes youthe listing about you on the comparison site Google quotes
Trading name in the business registerFail 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 itthe national business register
Accreditation shown on that listingPass SAA Approved Installer, verified by the comparison sitethe listing about you on the comparison site Google quotes
Phone, site against listingPass the same number on both, so the listing is genuinely yoursthe listing about you on the comparison site Google quotes

Checked by hand, not by a tool. The listing was opened and read, the ABN was looked up in the national register, and the address was searched for in three views of your site: the server response, the page after the scripts run, and the structured data. It is on none of them.

Part 2 / The consequence

What ChatGPT answers when a customer asks

15 questions and searches, put to ChatGPT with web search on. Sample Solar Co. appears in none of them. These are answers a person reads, not an index of mentions. One thing worth separating out: asked about the business by name, ChatGPT does find the site and quotes it. Being unfindable and being unknown are different problems, and this is the second one.

0 of 15
real ChatGPT answers named the business or its site
ChatGPT, real answer
0 / 15
Google writes its own answer
3 / 4
Cited inside that answer
0 / 3

Here are some solar installers in [city], NSW you could compare: f.example Highly rated local options Competitor B — local solar and electrical installer with strong review scores. Competitor C — solar and electrical services; listed with a high review count. Competitor L Solutions | [city] Solar, Air Conditioning & Electric…

From the answer to "solar installer [city]", one of 15.

Who gets named instead

Counted across every answer. Each name carries the question it came from: an answer about home pest control names pest controllers, and they are listed as what the assistant said, not as your competitors.

Competitor B
3 of 15 answers
Competitor C
3 of 15 answers
Competitor F
2 of 15 answers
Competitor E
2 of 15 answers
Competitor A
2 of 15 answers
Australian solar installer
1 of 15 answers
Sample Solar Co.
0 of 15 answers
CheckResult What was measuredChecked with
Sample Solar Co. named by ChatGPTFail 0 of 15 answers to real questionsChatGPT, asked with web search on
Named instead of youContext 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 answersChatGPT, asked with web search on
Google writes its own answer above the resultsFail on 3 of the 4 questions checked. It quotes g.example, h.example, m.example, i.example, www.reddit.com, and not youthe answer Google writes above the results

Part 2 / The consequence

What people actually ask

39 real phrasings, taken from the questions and follow-up searches Google itself shows on these results. Not our guesses about how customers talk. The site publishes 23 pages carrying 23,828 words between them; which of these questions they answer is worth checking page by page.

Questions Google shows for these searches · 15

Each one is a ready-made page heading. Answer it under that heading in a hundred words that stand alone, and there is something to quote.

What they type
What is the 33% rule for solar panels?
How much does it cost to install solar in NSW?
What are people saying about Competitor F in reviews?
Is 10kW solar enough to run a house?
Is it worth getting solar panels in NSW?
How much should I pay for a 6.6 kW solar system?
What is the 20% rule for solar panels?
Is a solar battery worth it in NSW?
What are the downsides of solar batteries?
How much should I pay for a solar battery?
Is a solar battery worth the money?
How much does the battery rebate drop in 2026?
How much should a 10kWh battery cost?
Is the NSW battery rebate being suspended?
Is there a federal government rebate scheme for home batteries in NSW?
24 follow-up searches people run next
What they type
Solar installer [city] prices
Best solar installers [city]
Free solar installer [city]
Competitor F
Solar Power Pro [city]
Competitor E
[city] solar battery
Solar panel installation [region]
Is a solar battery worth it in [city] nsw
Is a solar battery worth it in [city] reddit
Is a solar battery worth it in [city] australia
Is a solar battery worth it in [city] victoria
Is solar battery worth it in Australia
Is solar battery worth it calculator
10kW solar battery price
Solar battery installers [city]
Nsw solar battery rebate 2026 dates
Nsw solar battery rebate 2026 eligibility
NSW solar battery rebate end date
NSW battery rebate 2026
Nsw solar battery rebate 2026 deadline
Solar battery rebate changes 2026
Nsw solar battery rebate 2026 application
Nsw solar battery rebate 2026 amount

Part 2 / The consequence

Where you appear in search

The site was not observed in the returned organic results for the 4 searches named in your brief.

Who holds the top of your searches

Counted across the top 3 results of each of the 4 searches you named.

g.example
3 of 4 top-3s
f.example
1 of 4 top-3s
j.example
1 of 4 top-3s
m.example
1 of 4 top-3s
h.example
1 of 4 top-3s
k.example
1 of 4 top-3s
samplesolar.example (you)
0 of 4 top-3s
CheckResult What was measuredChecked with
Position for "solar installer [city]"Fail nowhere in the 9 results Google returned. The top places go to g.example, f.example, j.exampleGoogle 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.exampleGoogle 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.comGoogle 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.auGoogle results for that search
What people searching these phrases are trying to do · 4
CheckResult What was measuredChecked with
What people want from "solar installer [city]"Context navigational, at 46% probabilitywhat people searching that phrase are trying to do
What people want from "how much do solar panels cost in [city]"Context commercial, at 71% probabilitywhat people searching that phrase are trying to do
What people want from "is a solar battery worth it in [city]"Context commercial, at 67% probabilitywhat people searching that phrase are trying to do
What people want from "nsw solar battery rebate 2026"Context commercial, at 83% probabilitywhat people searching that phrase are trying to do

Part 2 / The consequence

The businesses in your place

The automatic competitor discovery returned no suitable candidates for this run. This does not mean the site has no search rankings. The comparisons below use separately selected websites and the stated keyword dataset.

What they rank for, and you do not

SiteResult What was measuredChecked with
c.example ranks forContext 1,795 searches. Best of them: "electric vehicle charging" at 81, "ev cars charging stations" at 60, "ev charging stations" at 52the searches this site already appears for
b.example ranks forContext 44 searches. Best of them: "stcs" at 31, "solar batteries [city]" at 10, "solar battery [city]" at 10the searches this site already appears for
d.example ranks forContext 930 searches. Best of them: "Competitor K" at 1, "photoelectric panels" at 85, "Competitor K canberra" at 1the searches this site already appears for

Searches each site already ranks for in Australia

c.example1,795 d.example930 b.example44 samplesolar.example (you)0
A search you rank for is a search that can send you a customer without you paying for it. The competitors named in your brief have between them thousands. You have none, which follows directly from Part 1: there is nothing for Google to index.

Who links to you, and to them

SiteResult What was measuredChecked with
samplesolar.example (you)Fail 20 sites link to it, 20 links in total. Spam signal 60 of 100, where lower is cleanerlinks pointing at each site
d.exampleContext 173 sites link to it, 462 links in total. Spam signal 22 of 100, where lower is cleanerlinks pointing at each site
c.exampleContext 66 sites link to it, 151 links in total. Spam signal 20 of 100, where lower is cleanerlinks pointing at each site
b.exampleContext 35 sites link to it, 368 links in total. Spam signal 3 of 100, where lower is cleanerlinks pointing at each site

Part 3 / Honest about the gaps

What this audit did not answer

Three different kinds of gap, so they are not counted as one.

Not bought for this audit · 1

The live test that puts the same questions to Claude and Perplexity as well as ChatGPT belongs to the Advanced Audit, not to this tier. The Google profile WAS checked, twice, and the answer is in Part 1.

CheckResult What was measuredChecked with
Claude and PerplexityNot included not asked for this auditnot run for this audit
Asked, and there was nothing there · 6

These are measured zeros rather than gaps: the question was put and the answer was none. On this site they all point the same way.

CheckResult What was measuredChecked with
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
Searches this site already appears forNone found none: the site does not currently rank for anything measurablethe searches this site already appears for
Sites competing for the same searchesNone found none returned, which follows from the line abovesites competing for the same searches
Times assistants mention this siteNone found none recordedhow often assistants mention the site
The site did not return what the check needs · 3

Consequences of the first finding. They support it rather than dilute it.

CheckResult What was measuredChecked with
Image formats on the homepageNot delivered no images arrived with the homepage, so there was nothing to weigh or convertthe homepage images, weighed as files
Oversized images on the homepageNot delivered no images arrived with the homepage, so there was nothing to weigh or convertthe homepage images, weighed as files
Total image weight on the homepageNot delivered no images arrived with the homepage, so there was nothing to weigh or convertthe homepage images, weighed as files

Part 4 / The plan

What to do, in this order

This week, and neither one waits for a developer

  1. 1 Claim your Google Business Profile. It is free, it takes about a day to verify, and it is the only way into the map panel a customer sees first on a phone. Nothing else in this list opens that panel.
  2. 2 Replace the sharing image. Every time someone pastes your link into a message or a post, the picture that comes up is not yours. One file, served from the page you already control. While you are in there, the sharing text needs the same edit: og:description says "with trusted UK installers" for a business serving NSW

The engineering job, and it is one job

  1. 3 Deliver the page content in the server response. Everything else is already written; it is not arriving.

After that

  1. 4 Build the pages that answer the questions in "What people actually ask", with the prices and the region in the text. This one does wait for the engineering job: until the server sends the words, nobody reads them.
  2. 5 Grow the off-site footprint: only 20 sites link to this one today. Start with the directories and industry bodies for solar and battery installation, local listings and accreditation pages, then genuine participation in the places the topic is already discussed (Reddit, YouTube, trade press). Mentions in those channels correlate with AI citation; bought links do not.
  3. 6 Verify the site in Google Search Console and Bing Webmaster Tools, and submit the sitemap in both. Both are free, and Bing's index feeds Microsoft Copilot's answers, a separate AI channel from the ones tested in this report.
  4. 7 When someone is next in the server config, add the missing protective headers. Not a visibility job, and it costs nothing while they are there.

Why this order. The first 2 items cost nothing and need nobody: the profile is a form, and the sharing image is one file. The engineering job is what makes new writing worth doing at all.

Part 4 / The plan

How to do the quick ones without a developer

Enough detail to hand to whoever does it, or to do yourself in an afternoon.

Claiming the Google profile

  1. 1 Go to business.google.com and search for the business name. Nothing will come up, so choose to add it.
  2. 2 Use the trading name exactly as it appears on the site, and set a service area rather than a shopfront address if customers do not visit you.
  3. 3 Pick the primary category the way a customer would describe you, then add the others. The 3 businesses already on that map are the reference.
  4. 4 Add the phone number, the hours, and photographs of your own work rather than stock images.
  5. 5 Verify. It usually arrives by postcard or phone within a few days. Nothing shows on the map until this step is done.
  6. 6 Then ask past customers for reviews. The businesses ahead of you carry between 2 and 253 of them, and that number is most of what decides the order.

Replacing the sharing image

  1. 1 Make one image, 1200 by 630 pixels, of real work.
  2. 2 Host it on your own domain, not the builder's.
  3. 3 Point og:image at it, and while you are in that file, correct the sharing description in the same place.
  4. 4 Check the result by pasting your link into a private message to yourself before you announce anything.

Part 4 / The plan

For your developer

Ready to paste. Hand this section to whoever maintains the site.

Organization and WebSite structured data, ready to paste

One block in the <head> of every page, in the HTML the server sends. It names the business to a machine without guessing. Fields come from your brief; check them before shipping, and add address or phone only if you want them public.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://samplesolar.example/#organization",
      "name": "Sample Solar Co.",
      "url": "https://samplesolar.example/",
      "description": "Direct solar PV, battery storage, and EV charger installer (SAA certified). Serves the [city] / [region] region, NSW, Australia. No lead-gen middleman model.",
      "areaServed": "[city] and the [region]"
    },
    {
      "@type": "WebSite",
      "@id": "https://samplesolar.example/#website",
      "name": "Sample Solar Co.",
      "url": "https://samplesolar.example/",
      "publisher": {
        "@id": "https://samplesolar.example/#organization"
      }
    }
  ]
}
</script>
The missing protective headers, as config lines

One setting on the server or CDN, not a change to the site. Values below are the common safe defaults; tighten them if the site needs less.

content-security-policy: REPLACE with the value that fits this site
x-frame-options: REPLACE with the value that fits this site
Permissions-Policy: camera=(), microphone=(), geolocation=()
The server-response rule, in one paragraph

Every check in this report that failed on delivery comes down to one rule: anything that must be read by a machine has to be present in the HTML response the server sends, before any JavaScript runs. Test any page with curl -A "Mozilla/5.0" https://samplesolar.example/page | grep "some words from the page": if the words are not in the output, no assistant sees them either. The pages that already pass are the pattern to copy for the ones that do not.

Appendix

Every check in this audit

All 78 rows, including the 20 that are context rather than a verdict on your site and the 10 with no answer. The 48 in the masthead are the ones that measure your site and got an answer.

Open all 78 rows
CheckResult What was measuredChecked with
Text in the server responseFail 0 of 23,828 words (0%), across all 23 pagesthe pages, loaded twice: with and without JavaScript
Pages empty without JavaScriptFail 23 of 23the pages, loaded twice: with and without JavaScript
Passages an assistant could quoteFail none: there is no delivered text to split into passagesthe pages, loaded twice: with and without JavaScript
Structured data in the server responseFail absent on 23 of 23 pages, present on all of them once renderedthe structured data in the server response
Malformed structured dataPass none: what is there is written correctly. It is judged on the rendered page, because the server response carries no markup to judgethe structured data the browser builds on the page
Retired markup typesPass no HowTo, and no FAQPage of the kind Google stopped showingthe structured data the browser builds on the page
Homepage descriptionPass 97 characters, and it names no country. Read in both views of the page: the server response and again after the scripts runthe page the server returned, before anything ran in the browser
Sharing description added in the browserCheck 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 peoplethe page after the scripts have run, in a real browser
Sharing imageFail og:image is a preview screenshot on the site builder's domain, not a picture of your workthe page the server returned, before anything ran in the browser
Page titleCheck 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 firstthe page the server returned, before anything ran in the browser
Homepage technical scorePass 90.02 out of 100, homepage onlythe homepage as a crawler reads it
Pages foundPass 24, of which 23 are distinct pagesthe sitemap, routes observed on publicly accessible pages, and a rendered crawl
Declared in the sitemap but unreachablePass 0 pagesthe sitemap, routes observed on publicly accessible pages, and a rendered crawl
Published but never declaredPass 0 pagesthe sitemap, routes observed on publicly accessible pages, and a rendered crawl
Homepage open to search enginesPass nothing on the homepage blocks it from being indexedthe page the server returned, before anything ran in the browser
HTTPS certificatePass the site loads over HTTPS with a valid certificatethe page the server returned, before anything ran in the browser
Main heading on the homepageFail the homepage has no H1 headingthe page the server returned, before anything ran in the browser
Mobile viewport tagPass the page declares a mobile viewportthe page the server returned, before anything ran in the browser
Server response timeCheck 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 compressionPass the page is sent compressed (gzip)the page the server returned, before anything ran in the browser
XML sitemapPass sitemap found via robots.txtthe 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 usedFail 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 homepageNot delivered no images arrived with the homepage, so there was nothing to weigh or convertthe homepage images, weighed as files
Oversized images on the homepageNot delivered no images arrived with the homepage, so there was nothing to weigh or convertthe homepage images, weighed as files
Total image weight on the homepageNot delivered no images arrived with the homepage, so there was nothing to weigh or convertthe homepage images, weighed as files
AI assistant access to your sitePass 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 pagethe robots.txt file on the site
AI training crawlersPass all 8 model-training crawlers are allowed to read the sitethe robots.txt file on the site
Sitemap declared in robots.txtPass robots.txt points to https://samplesolar.example/sitemap.xmlthe robots.txt file on the site
The llms.txt filePass 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 dothe page the server returned, before anything ran in the browser
Protective response headersContext 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 searchthe response headers on every page
Server announces its own softwareContext the server header names what is running behind the site. No hole by itself; it shortens the work for someone hunting a known onethe 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.exampleGoogle 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.exampleGoogle 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.comGoogle 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.auGoogle results for that search
What people want from "solar installer [city]"Context navigational, at 46% probabilitywhat people searching that phrase are trying to do
What people want from "how much do solar panels cost in [city]"Context commercial, at 71% probabilitywhat people searching that phrase are trying to do
What people want from "is a solar battery worth it in [city]"Context commercial, at 67% probabilitywhat people searching that phrase are trying to do
What people want from "nsw solar battery rebate 2026"Context commercial, at 83% probabilitywhat people searching that phrase are trying to do
Searches this site already appears forNone found none: the site does not currently rank for anything measurablethe searches this site already appears for
Sites competing for the same searchesNone found none returned, which follows from the line abovesites competing for the same searches
Sample Solar Co. named by ChatGPTFail 0 of 15 answers to real questionsChatGPT, asked with web search on
Named instead of youContext 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 answersChatGPT, asked with web search on
Your Google Business ProfileFail no profile exists for this business. Looked it up by name in the area you servea 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 bethe map results Google shows above the links
Google writes its own answer above the resultsFail on 3 of the 4 questions checked. It quotes g.example, h.example, m.example, i.example, www.reddit.com, and not youthe answer Google writes above the results
Times assistants mention this siteNone found none recordedhow often assistants mention the site
Claude and PerplexityNot included not asked for this auditnot 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 cleanerlinks pointing at each site
d.exampleContext 173 sites link to it, 462 links in total. Spam signal 22 of 100, where lower is cleanerlinks pointing at each site
c.exampleContext 66 sites link to it, 151 links in total. Spam signal 20 of 100, where lower is cleanerlinks pointing at each site
b.exampleContext 35 sites link to it, 368 links in total. Spam signal 3 of 100, where lower is cleanerlinks pointing at each site
Passages a machine could lift and quoteFail 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 judgethe pages, loaded twice: with and without JavaScript
What the site runs onPass Cloudflare, Cloudflare Bot Management, Google Analytics, Google Tag Managerthe software stack answering for the domain
Bot filtering in front of the siteCheck 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 listthe software stack answering for the domain
c.example ranks forContext 1,795 searches. Best of them: "electric vehicle charging" at 81, "ev cars charging stations" at 60, "ev charging stations" at 52the searches this site already appears for
b.example ranks forContext 44 searches. Best of them: "stcs" at 31, "solar batteries [city]" at 10, "solar battery [city]" at 10the searches this site already appears for
d.example ranks forContext 930 searches. Best of them: "Competitor K" at 1, "photoelectric panels" at 85, "Competitor K canberra" at 1the searches this site already appears for
Competitor IContext claimed profile, 5 stars from 2 reviewsthe map results Google shows above the links
Competitor AContext claimed profile, 5 stars from 75 reviewsthe map results Google shows above the links
Competitor CContext claimed profile, 5 stars from 253 reviewsthe map results Google shows above the links
Green Solar SolutionsContext claimed profile, 4.1 stars from 29 reviewsthe map results Google shows above the links
Competitor EContext claimed profile, 4.8 stars from 56 reviewsthe map results Google shows above the links
Isolux Solar [city]Context claimed profile, no reviews yetthe map results Google shows above the links
Best Solar [region]Context claimed profile, 5 stars from 2 reviewsthe map results Google shows above the links
The address Google gives for youFail 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 elsethe listing about you on the comparison site Google quotes
Installations that listing claims for youFail 3, and no reviews at all. This is the page Google reads when it describes youthe listing about you on the comparison site Google quotes
Trading name in the business registerFail 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 itthe national business register
Accreditation shown on that listingPass SAA Approved Installer, verified by the comparison sitethe listing about you on the comparison site Google quotes
Phone, site against listingPass the same number on both, so the listing is genuinely yoursthe listing about you on the comparison site Google quotes

About this report

This report reflects the evidence collected on the dates shown and within the scope explained in the report summary. Search results and AI answers can vary by query, location, device and time. Third-party figures are estimates and may change.

Our findings and priorities are professional assessments, not guarantees of rankings, AI citations, traffic or sales. Competitor information is included for comparison only. No intrusive security testing was performed.

If you believe a finding is incorrect, please let us know, and we will review the evidence.

Your rights under the Australian Consumer Law are not affected. Full terms: seenmetric.com.au/terms