Audit Scope & Limitations
- The site is served over HTTP only — HTTPS checks required fallback to HTTP behavior.
- Several pages appear to be JavaScript-rendered; static HTML analysis may miss dynamically injected content.
- Google Business Profile status was confirmed via client intake form only, not independently verified via Maps.
Diagnostic Score
40.0% pass rate (16 of 40 determined checks). 24 failure(s), 6 unknown, 1 N/A. 40 of 47 checks yielded a determined verdict.
| Pass | Fail | Unknown | N/A | Determined | Total Checks | Pass Rate |
|---|---|---|---|---|---|---|
| 16 | 24 | 6 | 1 | 40 | 47 | 40.0% (16 of 40) |
Pass rate is computed over determined checks only. Unknown verdicts are not counted as passes or failures — they are items we could not verify, listed separately below.
Intake Information
| business_name | Example Plumbing Co |
| primary_url | http://example.com |
| city | Springfield |
| primary_service | Residential and commercial plumbing |
| years_in_business | 11 |
| monthly_revenue_range | $15,000–$40,000 |
| crm_in_use | No — we use a paper job book |
| missed_call_text_back | No |
| average_lead_response_time | Usually same day but sometimes next day |
| reminder_process | We call clients manually the day before |
| review_request_process | We ask in person but do not follow up |
| proposal_process | We write quotes by hand on a form |
Website Performance & UX
12 checks
HTTPS with valid certificate
Fail
Sev 5 — Critical
Proof
Evidence: HTTP GET to http://example.com returned status 200 over plain HTTP. HTTPS (https://example.com) returned a connection error — no TLS certificate is installed.
Recommended fix: Provision a free Let's Encrypt certificate via Certbot and configure the web server to redirect all HTTP traffic to HTTPS.
HTTP-to-HTTPS redirect in place
Fail
Sev 4 — High
Proof
Evidence: HTTP GET to http://example.com with allow_redirects=False returned 200 — no redirect to HTTPS is in place.
Recommended fix: Add a server-level 301 redirect rule that sends all port-80 traffic to port-443.
Page load time under 4 seconds on a simulated 3G connection
Unknown
Sev 4 — High
Why this check is pending (our follow-up): The site does not have HTTPS, which prevented load-time testing via PageSpeed Insights API (requires HTTPS). We will re-test once a certificate is installed.
Core Web Vitals: LCP, CLS, FID/INP not in 'Poor' band
Unknown
Sev 3 — Medium
Why this check is pending (our follow-up): PageSpeed Insights API requires an HTTPS URL. Core Web Vitals data cannot be retrieved until the site has a valid TLS certificate.
Mobile viewport renders without horizontal scroll
Pass
Sev 4 — High
Proof
Evidence: Screenshot taken at 390px viewport width via headless browser. No horizontal scrollbar visible; content reflows correctly into a single column at mobile width.
Primary CTA button visible above the fold on mobile
Fail
Sev 4 — High
Proof
Evidence: Screenshot at 390px x 844px shows a hero image and business name but no CTA button or link in the visible viewport. The first actionable element (a phone number) appears only after scrolling approximately 900px.
Recommended fix: Move the primary CTA button above the fold on mobile by restructuring the hero section layout.
Navigation menu accessible on mobile
Pass
Sev 3 — Medium
Proof
Evidence: A hamburger menu icon is visible in the top-right corner at 390px width. Tapping it revealed navigation links to Home, Services, and Contact.
No broken internal links (4xx responses)
Pass
Sev 3 — Medium
Proof
Evidence: 22 unique internal links found on homepage. HTTP HEAD requests returned all 2xx status codes. No 404s detected.
Favicon present
Pass
Sev 1 — Minor
Proof
Evidence: HTML head contains <link rel='icon' href='/favicon.ico'>. HTTP HEAD of /favicon.ico returned 200.
Contact information visible in the site footer or header
Pass
Sev 3 — Medium
Proof
Evidence: Footer contains phone number (555) 867-5309 and email info@example.com visible in static HTML.
SSL/TLS certificate has more than 30 days before expiry
Unknown
Sev 4 — High
Why this check is pending (our follow-up): No TLS certificate is installed on this site, so certificate expiry cannot be measured. This check will be re-run after the certificate is provisioned.
Page title and meta description present and non-empty
Fail
Sev 2 — Low
Proof
Evidence: The <title> tag reads 'Home' — 4 characters, no business name or description. The <meta name='description'> tag is absent from the HTML entirely.
Recommended fix: Write a descriptive <title> (50–60 characters) and <meta description> (120–155 characters) for the homepage.
Lead Capture & Flow
10 checks
Contact form or lead-capture form present on the site
Unknown
Sev 5 — Critical
Why this check is pending (our follow-up): The /contact/ page appears to load its form via JavaScript (the static HTML shows only an empty <div id='form-container'>). We do not execute JavaScript in static audits. We are following up with a browser-based check to confirm whether a form is present.
Contact form submission produces a visible confirmation
Unknown
Sev 5 — Critical
Why this check is pending (our follow-up): We could not determine whether the contact form produces a confirmation because the form itself could not be located in the static HTML (see lead-01). We will test submission once the form check is resolved.
Phone number is click-to-call on mobile
Fail
Sev 4 — High
Proof
Evidence: Phone number '(555) 867-5309' appears as plain text in the footer. It is not wrapped in an <a href='tel:...'> link. Mobile visitors cannot tap to call.
Recommended fix: Wrap all phone numbers in <a href='tel:+1XXXXXXXXXX'> tags so mobile users can tap to call without manually dialing.
At least one email address is click-to-email
Pass
Sev 2 — Low
Proof
Evidence: Email address info@example.com in the footer is wrapped in <a href='mailto:info@example.com'>.
A scheduling or booking link is present
Fail
Sev 3 — Medium
Proof
Evidence: No scheduling or booking link found in the static HTML of the homepage or navigation. No links to Calendly, Acuity, TidyCal, or any /book/ /schedule/ /appointment/ path.
Recommended fix: Add a booking link in the site navigation and on the contact page, linked to a free scheduling tool like Calendly or TidyCal.
Lead form asks for name and contact method only (not excessive fields)
Unknown
Sev 3 — Medium
Why this check is pending (our follow-up): The contact form appears to be JavaScript-rendered. We could not count required fields from the static HTML. Pending browser-based form inspection.
No-JavaScript lead path exists (email or phone reachable without JS)
Pass
Sev 2 — Low
Proof
Evidence: Footer contains a visible phone number and a mailto: link in static HTML, both reachable without JavaScript.
Response-time promise stated on site
Fail
Sev 2 — Low
Proof
Evidence: Static HTML of homepage and /contact/ page searched for response-time language ('respond within', 'reply within', 'available', 'hours', 'business days'). No such language found.
Recommended fix: Add a one-line response-time promise near the contact form or phone number to reduce visitor uncertainty and increase submission rates.
Live chat widget or chat CTA present
Fail
Sev 2 — Low
Proof
Evidence: Static HTML and <script> src attributes scanned for known chat widget providers (Intercom, Drift, Tidio, Crisp, LiveChat, HubSpot, tawk.to) and generic chat button patterns. None found.
Recommended fix: Install a free live-chat widget (e.g. Tidio or Crisp) to capture visitors who prefer chat over phone or email.
Email opt-in or newsletter capture present
Fail
Sev 2 — Low
Proof
Evidence: No email capture form, input type='email', or newsletter/subscribe language found in the static HTML of the homepage.
Recommended fix: Add an email opt-in form to the footer or homepage offering a lead magnet or update subscription to begin building an owned list.
Messaging Clarity
9 checks
Homepage headline states what the business does
Fail
Sev 5 — Critical
Proof
Evidence: The <h1> element reads 'Welcome to Example Plumbing Co'. A stranger reading only this headline cannot determine what service is offered, the location, or the intended customer.
Recommended fix: Rewrite the homepage headline to follow the formula: [Who you help] + [What you do] + [Key outcome], e.g. 'HVAC Repair for Dallas Homeowners — Same-Day Service.'
Value proposition visible without scrolling on desktop
Fail
Sev 4 — High
Proof
Evidence: Screenshot at 1440px x 768px shows the hero headline and a logo only. No subheadline or value proposition statement is visible above the fold. The first descriptive text is a paragraph beginning at approximately 820px scroll depth.
Recommended fix: Add or move a one-sentence value proposition directly beneath the headline so desktop visitors see the offer immediately on arrival.
Services or products are listed explicitly
Pass
Sev 4 — High
Proof
Evidence: A 'Services' section on the homepage lists: Drain Cleaning, Water Heater Installation, Leak Detection, Pipe Repair, and Bathroom Fixture Installation — five specific services named.
Pricing or starting price is stated
Fail
Sev 3 — Medium
Proof
Evidence: Homepage and /services/ page static HTML scanned for currency patterns ($NNN, 'starting at', 'from $', 'packages from'). No pricing information found.
Recommended fix: Publish at least a starting price or price range for your primary service to reduce the friction of an 'I wonder if I can afford this' exit.
Social proof (reviews, testimonials, or client logos) visible on homepage
Pass
Sev 4 — High
Proof
Evidence: Homepage contains a testimonials section with three customer quotes attributed to named clients. Quotes are in static HTML.
Review count or average rating is stated with a verifiable source
N/A
Sev 3 — Medium
About or team page indicates real humans are behind the business
Pass
Sev 3 — Medium
Proof
Evidence: An 'About' page linked from the navigation contains the owner's name ('James Doe, Owner') and a three-sentence bio.
Brand name and tagline are consistent across homepage
Pass
Sev 2 — Low
Proof
Evidence: <title> reads 'Home | Example Plumbing Co'. Logo alt text is 'Example Plumbing Co'. Footer reads 'Example Plumbing Co'. All three match.
No spelling or grammar errors in headline or hero copy
Pass
Sev 2 — Low
Strong
Evidence: <h1> text: 'Welcome to Example Plumbing Co'. First 300 characters of hero paragraph reviewed. No spelling or grammar errors detected.
Local SEO Signals
8 checks
Google Business Profile exists and is claimed
Pass
Sev 5 — Critical
Client-reported
Evidence: Client confirmed in intake form that Google Business Profile exists and is claimed: 'Yes, we set it up about two years ago.'
Google Business Profile category is set correctly
Pass
Sev 3 — Medium
Client-reported
Evidence: Client reported in intake form that the GBP primary category is set to 'Plumber'.
NAP (Name, Address, Phone) consistent between site and GBP
Fail
Sev 4 — High
Client-reported
Evidence: Business name on homepage is 'Example Plumbing Co'. Phone on site is '(555) 867-5309'. Client reported the GBP listing shows 'Example Plumbing' (abbreviated) and phone '555-867-5309' (different formatting). Address on site is '123 Main St' vs GBP showing '123 Main Street'. Two NAP discrepancies found.
Recommended fix: Align the business name, address, and phone number to a single canonical format across the website, GBP, and all directory listings.
LocalBusiness schema markup present on homepage
Fail
Sev 3 — Medium
Proof
Evidence: Static HTML of homepage parsed for <script type='application/ld+json'> blocks. No JSON-LD found. No microdata @type attributes found. LocalBusiness schema is absent.
Recommended fix: Add a LocalBusiness JSON-LD schema block to the homepage <head> including name, address, telephone, url, and openingHours.
Sitemap.xml present and accessible
Fail
Sev 2 — Low
Proof
Evidence: HTTP GET to http://example.com/sitemap.xml returned 404.
Recommended fix: Generate and publish a sitemap.xml using a sitemap generator or your CMS's built-in tool, then submit it to Google Search Console.
Robots.txt present and not blocking all crawlers
Pass
Sev 3 — Medium
Proof
Evidence: HTTP GET to http://example.com/robots.txt returned 200. File contains 'User-agent: *' with 'Disallow: /admin/' only. Major crawlers are allowed.
City or service area is named on the homepage
Pass
Sev 4 — High
Proof
Evidence: City name 'Springfield' (from intake form) found in static HTML of homepage in the footer address: '123 Main St, Springfield'.
Meta description contains a keyword and location signal
Fail
Sev 2 — Low
Proof
Evidence: Meta description tag is absent from the homepage (confirmed under web-12). This check therefore fails: no meta description means no location signal in the description.
Recommended fix: Rewrite the meta description to include the primary service and city, e.g. 'Austin HVAC repair and installation — same-day service. Call for a free estimate.'
AI & Tech Stack Gaps
8 checks
Missed-call text-back is not in place
Fail
Sev 5 — Critical
Client-reported
Evidence: Client confirmed in intake form: 'No, we do not have missed-call text-back. Callers who miss us have to call back themselves.'
Recommended fix: Set up a missed-call text-back system (e.g. BOOJEE AI Front Desk, Missed Call Text Back by Highlevel) to respond to every missed call within 60 seconds.
Lead inquiry response time exceeds one hour
Fail
Sev 5 — Critical
Client-reported
Evidence: Client reported average lead response time as 'usually same day but sometimes next day' — this exceeds the one-hour threshold.
Recommended fix: Implement an automated email or SMS acknowledgment that fires within 60 seconds of form submission, followed by a personal follow-up within one hour.
No CRM or contact tracking system is in use
Fail
Sev 4 — High
Client-reported
Evidence: Client reported in intake form: 'No — we use a paper job book.'
Recommended fix: Adopt a free or low-cost CRM (HubSpot Free, Zoho CRM Free, or Notion CRM template) to track every lead from first contact to close.
Appointment reminders are sent manually or not at all
Fail
Sev 4 — High
Client-reported
Evidence: Client reported reminder process as 'We call clients manually the day before'. Reminders are sent by hand, not automated.
Recommended fix: Connect the booking tool to an automated reminder sequence (email + SMS 24h and 1h before) using a tool like Calendly, Acuity, or a CRM workflow.
No review-request automation after service delivery
Fail
Sev 3 — Medium
Client-reported
Evidence: Client reported: 'We ask in person but do not follow up.' No automated review-request process is in place.
Recommended fix: Set up a post-service SMS or email sequence that sends a personalized review-request link 24 hours after job completion.
Website analytics are not installed or not checked
Fail
Sev 3 — Medium
Proof
Evidence: Homepage HTML scanned for analytics script patterns (gtag.js, analytics.js, plausible.io, fathom, matomo, clarity.ms). None found. No analytics is installed.
Recommended fix: Install Google Analytics 4 (free) or Plausible Analytics and set up a weekly summary email so site performance is reviewed regularly.
No online payment or deposit option exists
Fail
Sev 3 — Medium
Proof
Evidence: Homepage and linked pages scanned for payment platform patterns (Stripe, PayPal, Square, Venmo business, Zelle QR, invoice links). None found. No online payment option exists.
Recommended fix: Add an online payment link using Stripe Payment Links or Square (both free to set up) so clients can pay deposits or invoices without a phone call.
Proposal or quote process is fully manual with no template
Fail
Sev 2 — Low
Client-reported
Evidence: Client reported proposal process as 'We write quotes by hand on a form'. No template or digital tool is in use.
Recommended fix: Create a reusable proposal template in a tool like PandaDoc (free tier) or a Google Docs template so proposals can be sent in under 10 minutes.
Our Follow-Up Items (6)
The 6 check(s) below returned an unknown verdict.
This means we could not determine the answer — not that anything is wrong.
These are items we need to chase down; they are not action
items for you. We will contact you separately with findings on each one.
Contact form or lead-capture form present on the site Unknown Sev 5 — Critical
Why we could not determine this (our follow-up): The /contact/ page appears to load its form via JavaScript (the static HTML shows only an empty <div id='form-container'>). We do not execute JavaScript in static audits. We are following up with a browser-based check to confirm whether a form is present.
Contact form submission produces a visible confirmation Unknown Sev 5 — Critical
Why we could not determine this (our follow-up): We could not determine whether the contact form produces a confirmation because the form itself could not be located in the static HTML (see lead-01). We will test submission once the form check is resolved.
Page load time under 4 seconds on a simulated 3G connection Unknown Sev 4 — High
Why we could not determine this (our follow-up): The site does not have HTTPS, which prevented load-time testing via PageSpeed Insights API (requires HTTPS). We will re-test once a certificate is installed.
SSL/TLS certificate has more than 30 days before expiry Unknown Sev 4 — High
Why we could not determine this (our follow-up): No TLS certificate is installed on this site, so certificate expiry cannot be measured. This check will be re-run after the certificate is provisioned.
Core Web Vitals: LCP, CLS, FID/INP not in 'Poor' band Unknown Sev 3 — Medium
Why we could not determine this (our follow-up): PageSpeed Insights API requires an HTTPS URL. Core Web Vitals data cannot be retrieved until the site has a valid TLS certificate.
Lead form asks for name and contact method only (not excessive fields) Unknown Sev 3 — Medium
Why we could not determine this (our follow-up): The contact form appears to be JavaScript-rendered. We could not count required fields from the static HTML. Pending browser-based form inspection.
90-Day Action Plan
This plan covers the 24 failure(s) found in this audit, ranked by severity. Each item is derived directly from a failed check — no padding, no generic advice. If the list is short, that reflects the actual findings.
1 HTTPS with valid certificate Sev 5 — Critical Days 1–30 (Immediate)
Provision a free Let's Encrypt certificate via Certbot and configure the web server to redirect all HTTP traffic to HTTPS.
2 Homepage headline states what the business does Sev 5 — Critical Days 1–30 (Immediate)
Rewrite the homepage headline to follow the formula: [Who you help] + [What you do] + [Key outcome], e.g. 'HVAC Repair for Dallas Homeowners — Same-Day Service.'
3 Missed-call text-back is not in place Sev 5 — Critical Days 1–30 (Immediate)
Set up a missed-call text-back system (e.g. BOOJEE AI Front Desk, Missed Call Text Back by Highlevel) to respond to every missed call within 60 seconds.
4 Lead inquiry response time exceeds one hour Sev 5 — Critical Days 1–30 (Immediate)
Implement an automated email or SMS acknowledgment that fires within 60 seconds of form submission, followed by a personal follow-up within one hour.
5 HTTP-to-HTTPS redirect in place Sev 4 — High Days 1–30 (Immediate)
Add a server-level 301 redirect rule that sends all port-80 traffic to port-443.
6 Primary CTA button visible above the fold on mobile Sev 4 — High Days 1–30 (Immediate)
Move the primary CTA button above the fold on mobile by restructuring the hero section layout.
7 Phone number is click-to-call on mobile Sev 4 — High Days 1–30 (Immediate)
Wrap all phone numbers in <a href='tel:+1XXXXXXXXXX'> tags so mobile users can tap to call without manually dialing.
8 Value proposition visible without scrolling on desktop Sev 4 — High Days 1–30 (Immediate)
Add or move a one-sentence value proposition directly beneath the headline so desktop visitors see the offer immediately on arrival.
9 NAP (Name, Address, Phone) consistent between site and GBP Sev 4 — High Days 1–30 (Immediate)
Align the business name, address, and phone number to a single canonical format across the website, GBP, and all directory listings.
10 No CRM or contact tracking system is in use Sev 4 — High Days 1–30 (Immediate)
Adopt a free or low-cost CRM (HubSpot Free, Zoho CRM Free, or Notion CRM template) to track every lead from first contact to close.
11 Appointment reminders are sent manually or not at all Sev 4 — High Days 1–30 (Immediate)
Connect the booking tool to an automated reminder sequence (email + SMS 24h and 1h before) using a tool like Calendly, Acuity, or a CRM workflow.
12 A scheduling or booking link is present Sev 3 — Medium Days 31–60
Add a booking link in the site navigation and on the contact page, linked to a free scheduling tool like Calendly or TidyCal.
13 Pricing or starting price is stated Sev 3 — Medium Days 31–60
Publish at least a starting price or price range for your primary service to reduce the friction of an 'I wonder if I can afford this' exit.
14 LocalBusiness schema markup present on homepage Sev 3 — Medium Days 31–60
Add a LocalBusiness JSON-LD schema block to the homepage <head> including name, address, telephone, url, and openingHours.
15 No review-request automation after service delivery Sev 3 — Medium Days 31–60
Set up a post-service SMS or email sequence that sends a personalized review-request link 24 hours after job completion.
16 Website analytics are not installed or not checked Sev 3 — Medium Days 31–60
Install Google Analytics 4 (free) or Plausible Analytics and set up a weekly summary email so site performance is reviewed regularly.
17 No online payment or deposit option exists Sev 3 — Medium Days 31–60
Add an online payment link using Stripe Payment Links or Square (both free to set up) so clients can pay deposits or invoices without a phone call.
18 Page title and meta description present and non-empty Sev 2 — Low Days 61–90
Write a descriptive <title> (50–60 characters) and <meta description> (120–155 characters) for the homepage.
19 Response-time promise stated on site Sev 2 — Low Days 61–90
Add a one-line response-time promise near the contact form or phone number to reduce visitor uncertainty and increase submission rates.
20 Live chat widget or chat CTA present Sev 2 — Low Days 61–90
Install a free live-chat widget (e.g. Tidio or Crisp) to capture visitors who prefer chat over phone or email.
21 Email opt-in or newsletter capture present Sev 2 — Low Days 61–90
Add an email opt-in form to the footer or homepage offering a lead magnet or update subscription to begin building an owned list.
22 Sitemap.xml present and accessible Sev 2 — Low Days 61–90
Generate and publish a sitemap.xml using a sitemap generator or your CMS's built-in tool, then submit it to Google Search Console.
23 Meta description contains a keyword and location signal Sev 2 — Low Days 61–90
Rewrite the meta description to include the primary service and city, e.g. 'Austin HVAC repair and installation — same-day service. Call for a free estimate.'
24 Proposal or quote process is fully manual with no template Sev 2 — Low Days 61–90
Create a reusable proposal template in a tool like PandaDoc (free tier) or a Google Docs template so proposals can be sent in under 10 minutes.