Demo report · AI & agent readiness

Pebblewick Plumbing, measured

A made-up local plumber, built to show what the report looks like when a site has real problems. The checks, the layout and the grading are exactly what a £150 audit gives you.

This is a demo

Pebblewick Plumbing & Heating doesn't exist. Its website, phone numbers and every figure below are invented for illustration. It shows the findings part of a report only. A real report also scores the site out of 100, compares it with the local competitors that outrank it, and covers speed, design and an action plan: see the full audit I ran on my own site.

Summary

Pages measured
14
every live URL in the sitemap, at 375px and 1440px; 4 more listed URLs return 404
Words without JavaScript
6%
412 of the 6,980 words a visitor sees are in the raw HTML
Crawlers blocked
5 of 10
by robots.txt, including two that power AI search
Findings
9
2 critical, 4 serious, 3 medium

In a browser the site looks fine, and it ranks on Google because Googlebot runs JavaScript. To most AI crawlers it's close to empty, and robots.txt turns away the ones Claude and Perplexity search with. Fix D1 and D2 first: between them they decide whether an assistant can read the site at all.

Findings, most severe first

Three questions per finding: does it stop someone doing what they came for (impact), does it affect many visitors or queries (many), and will it keep happening until fixed (persistent)? Three yeses = Critical, two = Serious, one = Medium, none = Low.

CriticalD1 · Part 1, content without JavaScript

Your service pages are empty until JavaScript runs

Stops a task: yesMany affected: yesPersistent: yes

What I found

  • The homepage carries 38 words in the raw HTML and 612 once JavaScript has run.
  • 11 of 14 pages carry under 50 words without JavaScript. The six service pages carry 0 to 31; a browser shows 380 to 720.
  • The reviews page carries 4 words. All 820 words of reviews are loaded by a widget. Every page is in the table below.

Why it matters

Most AI crawlers read the HTML the server sends and don't run JavaScript. To them, the pages that say what you do, where and for how much are blank, so an assistant has nothing to quote when someone asks for a plumber nearby.

Fix

Switch the page builder to output its content as HTML (most have a setting or a static export), or rebuild the service pages as plain HTML. Put three or four real reviews in the page as text, with the widget below them.

Effort: Half a day with a setting; a rebuild if the platform can't do it

CriticalD2 · Part 2, AI crawler access

robots.txt turns away the crawlers behind AI search

Stops a task: yesMany affected: yesPersistent: yes

What I found

  • robots.txt disallows GPTBot, ClaudeBot, Claude-SearchBot, PerplexityBot and CCBot from the whole site. The block sits under a comment left by the security plugin's AI-bot setting.
  • The server also returns 403 to the PerplexityBot user-agent on all 14 pages.
  • OAI-SearchBot and Googlebot are allowed and got the same page as a browser on 14 of 14. All ten crawlers are in the table below.

Why it matters

Blocking the crawlers that collect training data (GPTBot, ClaudeBot, CCBot) is a fair choice. Blocking Claude-SearchBot and PerplexityBot is different: they fetch pages to answer questions, so Claude and Perplexity can't read or cite you.

Fix

Turn off the plugin's blanket AI-bot block. Keep the training crawlers blocked if you'd rather, and allow the search ones. Remove the 403 rule for PerplexityBot.

Effort: Fifteen minutes

SeriousD3 · Part 5, business identity

Your name and number don't match your Google listing

Stops a task: noMany affected: yesPersistent: yes

What I found

  • The Google listing trades as "Pebblewick Plumbing & Heating Ltd" on 01632 960418.
  • The site's header says "Pebblewick P&H" and its footer "© Pebblewick Plumbing". The full listing name appears on 0 of 14 pages.
  • Every page shows 07700 900274. The listing's number appears on none.

Why it matters

Assistants and Google match a business across sources by its name, number and address. When they disagree, nothing confirms the listing, and an assistant is less likely to name you.

Fix

Pick one name and one main number and use them the same way on the site, the Google listing and every directory you're on.

Effort: An hour, plus updating each directory

SeriousD4 · Part 4, titles and descriptions

Nine pages share one title, and twelve have no description

Stops a task: noMany affected: yesPersistent: yes

What I found

  • 9 of 14 pages are titled "Pebblewick | Plumber in Kent", including all six service pages.
  • 12 of 14 pages have no meta description. With no description and no text in the raw HTML, the snippet for the service pages is taken from the cookie banner.

Why it matters

The title and description are what Google shows and assistants quote. Identical titles tell neither which page is about boilers and which is about bathrooms.

Fix

Give each page its own title (service, then place, under 60 characters) and a description under 155 characters that answers the obvious question first.

Effort: Two hours

SeriousD5 · Part 6, agent-friendly interface

The quote form can't be sent without a mouse

Stops a task: yesMany affected: noPersistent: yes

What I found

  • On the Get a Quote page, 5 of 6 fields have placeholder text but no label.
  • "Send request" is a styled div with a click handler, not a button. Tab never reaches it, and it has no role or accessible name.

Why it matters

Keyboard users, screen readers and AI agents all work from the accessibility tree. To them the form has unnamed boxes and no way to submit. Most visitors use a mouse or touch, so it isn't Critical.

Fix

Give each field a visible label and make "Send request" a real submit button.

Effort: An hour

SeriousD6 · Part 7, actions an agent can take

An assistant can't tell when you're open, or ring you

Stops a task: noMany affected: yesPersistent: yes

What I found

  • Opening hours appear only inside an image in the footer, with no alt text.
  • The phone number on all 14 pages is plain text, not a tap-to-call link.
  • There is no booking page and no opening hours in structured data.

Why it matters

"Is there a plumber open on Saturday?" is exactly what people ask assistants. With the hours in a picture, there's nothing to answer from. People can still read and dial the number, which is why this isn't Critical.

Fix

Put the hours on the contact page and in the footer as text, make every phone number a tel: link, and add the hours to the structured data (see D7).

Effort: An hour

MediumD7 · Part 5, structured data

Nothing tells a machine you're a plumber

Stops a task: noMany affected: noPersistent: yes

What I found

  • 13 of 14 pages have no JSON-LD. The homepage has one WebSite block from the SEO plugin, which parses but names no business.

Why it matters

Structured data is the clearest way to tell search engines and assistants what the business is, where it works and how to reach it, in a form they don't have to guess at.

Fix

Add a Plumber block (a LocalBusiness type) with the name, phone, address, areas served, opening hours and a sameAs link to the Google listing.

Effort: Two hours

MediumD8 · Part 3, sitemap and errors

Four pages in the sitemap don't exist

Stops a task: noMany affected: noPersistent: yes

What I found

  • The sitemap lists 18 URLs. Four return 404: /boiler-offers-2023, /blog, /blog/winter-checklist and /gas-safety-week.

Why it matters

A sitemap is a list of pages you want found. Dead entries waste a crawler's visit and make the list less trusted.

Fix

Remove the four from the sitemap, or redirect them to the closest live page if anything still links to them.

Effort: Fifteen minutes

MediumD9 · Part 6, tap targets

Footer icons are too small to tap

Stops a task: noMany affected: noPersistent: yes

What I found

  • The three social icons in the footer measure 18 × 18px on every page at 375px.
  • The "Read more" links on the reviews page are 16px tall.

Why it matters

Targets under 24px are hard to tap, and an agent working from a screenshot may not register them as controls.

Fix

Add padding so each icon and link is at least 24px in both directions.

Effort: Ten minutes

Words per page, with and without JavaScript

The evidence behind D1. "Raw HTML" is what a crawler that doesn't run JavaScript reads; "rendered" is what a visitor sees.

PageRaw HTMLRendered
/38612
/about12540
/services9455
/services/boiler-installation31720
/services/boiler-servicing0480
/services/central-heating14610
/services/bathrooms6395
/services/emergency-plumbing22380
/areas-we-cover0310
/reviews4820
/gallery6118
/faq140660
/contact72410
/get-a-quote58470
All 14 pages4126,980

What each crawler gets

The evidence behind D2. robots.txt is a request, not a lock: the server still answers, so the last column shows what each crawler would get if it ignored the rule. Five are fetched directly; the rest are robots.txt rules only.

CrawlerUsed forrobots.txtFetch of 14 pages
GPTBotOpenAI model trainingBlocked14 × 200, same page as a browser
OAI-SearchBotChatGPT searchAllowed14 × 200, same page as a browser
ChatGPT-UserChatGPT opening a page for a userAllowedNot fetched
ClaudeBotAnthropic model trainingBlocked14 × 200, same page as a browser
Claude-SearchBotClaude searchBlockedNot fetched
PerplexityBotPerplexity searchBlocked14 × 403, turned away
Google-ExtendedUse in Google's Gemini models (a rule, not a crawler)AllowedNot fetched
GooglebotGoogle SearchAllowed14 × 200, same page as a browser
BingbotBing, which also feeds CopilotAllowedNot fetched
CCBotCommon Crawl, an open dataset used for trainingBlockedNot fetched

What passed

CheckMeasured
HTTPS and redirectsValid certificate. The http and non-www addresses each reach https://www in one 301
Error pageA made-up address returns 404 with a working menu
Google and ChatGPT searchGooglebot and OAI-SearchBot: 28 of 28 fetches returned 200 and the page a browser gets
Canonicals and language14 of 14 canonicals correct; lang="en-GB" on every page
One h1 per page14 of 14
LandmarksOne main region on 14 of 14 pages
Visible keyboard focusThe theme's focus outline shows on 14 of 14 pages
llms.txtNone. It's optional, so it isn't counted against the site

Not covered, and how a real audit is measured

A report doesn't cover:

  • What ChatGPT, Perplexity, Claude and Google's AI answers actually say about the business. These have to be asked from real accounts and are run separately.
  • Google Business Profile reviews and rating, which need the owner's account.
  • Page speed and Core Web Vitals.
  • What a firewall does to the real crawlers: bot fetches use each bot's user-agent from my machine, not its own network.

This demo wasn't measured: the business and its numbers are made up. A real audit runs scripts/ai-readiness-audit.mjs against your site, with plain HTTP fetches for the raw HTML and crawler checks and Chrome at 375px and 1440px for the rendered checks, and you get the raw results alongside the report. See how my own audit was run and its raw measurements.

Want to know what yours would say?

The same checks and the same report, on your own site. £150, credited in full if you go on to a build. Email richardgleeson83@gmail.com or ring +44 7823 77 88 95.

Book an audit