AgencyProofSnapshot Audit report
File № AP-2026-2952
3 of 3 eligible pages inspected · 2026-06-28 09:14–09:15 UTC · engine AgencyProofBot/1.0 · 54 deterministic checks + AI review (Claude)
Pre-launch inspection report
Marlow Dental Website
https://marlowdental.example
- Prepared for
- Marlow Dental
- Prepared by
- AgencyProof
- Inspected
- Jun 28, 2026
- Verdict
- Hold — inspected pages only
- Inspected scope
- 3 of 3 eligible pages inspected · 100% URL coverage
- Inspection depth
- Static Snapshot Audit
- Projected score
- Resolving these findings projects the score to 99.
Legacy inspected-score record: 78/100
- homepageMarlow Dental | Gentle Modern Dentistryhttps://marlowdental.example/
- /servicesMarlow Dental | Gentle Modern Dentistryhttps://marlowdental.example/services
- /contactContact | Marlow Dentalhttps://marlowdental.example/contact
§ 01
Executive summary
Marlow Dental Website does not have an AgencyProof Assurance Score for this inspection. Any recorded number is retained only as a legacy inspected-score record. Six high-priority findings sit behind it — the appointment form declares no submission endpoint, the site never states where the practice is, gallery filenames pair a personal name with a procedure, the form collects symptom details with no privacy policy, and the hero guarantees a treatment outcome. Because this is a healthcare site, one finding is routed for human review: the outcome claims in the hero and whitening copy may need checking against local dental advertising rules. Not legal advice. Accessibility basics (88) and first-pass performance signals (90) show the build underneath is sound — this is a copy, wiring and metadata pass, not a rebuild. Five checks passed cleanly and are recorded as strengths to preserve.
§ 02
Scorecard
Legacy inspected category record with its scope disclosure.
Legacy inspected-score record
78/100
- Pages inspected
- 3 of 3 eligible pages inspected
- URL coverage
- 100% URL coverage
- Inspection depth
- Static Snapshot Audit
- Whole-site verdict
- Whole-site verdict unavailable
- Certificate
- Certificate unavailable
3 of 3 eligible pages inspected — complete page breadth at Snapshot depth. Pages were read as served, without a browser.
Legacy inspected-score record: 78/100
Hold — inspected pages only
- Trust & Credibility79
Brand · 18% of score
- SEO Readiness76
SEO · 14% of score
- AI Search Readiness75
AI Visibility · 10% of score
- Technical QA73
Technical · 14% of score
- Privacy & Metadata70
Privacy · 10% of score
- Accessibility Basics88
Accessibility · 8% of score
- Performance Basics90
Performance · 8% of score
- Content Quality78
Content · 8% of score
- Conversion Clarity77
Conversion · 6% of score
- Compliance-Sensitive Copy85
Compliance · 4% of score
Each legacy category starts at 100 and deducts per finding: critical −25 · high −15 · medium −8 · low −4 · enhancement −2. The legacy inspected-category record is their weighted average. The Assurance Score separately applies coverage and condition ceilings.
§ 02b
Trust breakdown
The Trust score, split into the six dimensions a buyer actually feels. Same deduction arithmetic as the category scores.
- Identity96
1 open finding
- Proof85
1 open finding
- Testimonials92
1 open finding
- Authority85
1 open finding
- Transparency85
1 open finding
- Security85
1 open finding
Largest trust opportunity: Proof (85/100) — are the claims backed by anything checkable? Fixing the finding in this dimension moves buyer trust the fastest.
§ 03
Inspection coverage
What this scan looked at, how, and how much weight the verdict can carry.
- Pages reviewed
- 3 of 3 discovered
- Method
- Static HTML fetch and parse — no browser rendering
- AI layer
- AI review (Claude)
- Confidence
- medium — a partial read of the site; the findings are reliable, sitewide claims are directional
Not inspected in this tier
- Rendered-browser checks: JavaScript execution, layout, and Core Web Vitals are not measured
- Form submission: contact and signup forms are located but never filled in or sent
- Payment flow: checkout journeys are not attempted
§ 06
What's working
Credits, not problems — inspections this site passed with something to show for it.
Every inspected page is served over HTTPS
All 3 crawled URLs resolved over HTTPS with no mixed-content references in the markup.
Navigation is identical and complete on every inspected page
The same four navigation entries appear in the same order on /, /services and /contact.
Each page declares exactly one H1
Each of the 3 crawled pages declares a single H1 element with non-empty text.
robots.txt is present and does not block the site
GET /robots.txt returns 200 with no Disallow rule covering the three inspected paths.
Every page declares a document language
All 3 crawled pages declare <html lang="en">.
§ 07
Action plan
Confirmed and probable issues to resolve before launch — work that affects inspected quality and Assurance.
The "Book an appointment" button goes nowhere
<a class="nav-cta" href="#">Book an appointment</a> — appears in the navigation on all 3 crawled pages (/, /services, /contact). The href is a bare fragment, so the control cannot reach a booking destination.
If this ships unfixed
- Patients who try to book get nothing — no form, no phone, no record they tried
- Every ad spend and referral drives traffic to a booking path that cannot complete
- The practice never learns how many appointments it lost
Estimated impact: Technical QA
Why it matters
Booking is the one action this site exists to produce, and its primary button is a dead end on every page. Patients who click it get nothing — no form, no phone number, no booking widget — and the practice never knows they tried.
Recommended fix
Point the button at the /contact appointment form (or the practice's booking system) and click-test it on every page before launch.
Done when
- The nav CTA resolves to a booking destination on /, /services and /contact
- No remaining href="#" on a call-to-action element
Verify: Re-scan the site; the dead-end-link check reports no CTA fragments.
Dev taskSet the nav CTA href to /contact in the shared header; verify on /, /services, and /contact.
Homepage headline guarantees a treatment outcome
<h1>Pain-free treatment — guaranteed.</h1> — captured from /. No page on the site describes what the guarantee covers, and no terms or supporting material appear alongside it.
If this ships unfixed
- A patient whose visit is uncomfortable can point at the site's own headline
- Visitors who doubt the guarantee discount every other claim on the site
Estimated impact: Trust & Credibility
Why it matters
The first sentence a visitor reads is a promise about a clinical outcome, with nothing on the site to explain what it covers. Wording of this kind is the category a professional board or advertising regulator examines, and it makes the rest of the page's claims easier to discount.
Recommended fix
Replace the guarantee with a statement about the practice's approach to patient comfort, and describe what patients can expect for common procedures.
Done when
- No "guarantee" wording remains on any inspected page
- The hero states an approach, not an outcome
Verify: Re-scan; the unsupported-claims check reports no outcome guarantee on /.
Dev taskReplace the hero H1 on / and remove all "guaranteed" language sitewide.
Gallery image filenames pair a personal name with a procedure
<img src="/images/before-after-j-mercer-crown.jpg"> and <img src="/images/before-after-r-okafor-veneers.jpg"> — smile gallery on /services (the first image also appears on /). Each filename combines what reads as a personal name with a dental procedure.
If this ships unfixed
- Search engines can index the filename pattern alongside the procedure
- Cached copies keep serving the old names after the files change
Estimated impact: Privacy & Metadata
Why it matters
A public URL that pairs a name with a procedure is indexed, cached and visible in every share. The check reads filenames only — it cannot confirm who these people are or what consent exists — but for a healthcare site this is exactly the pattern worth removing before launch.
Recommended fix
Re-export the images under neutral filenames (e.g. smile-gallery-01.jpg), update the references, and confirm the practice's photo consent covers web publication before restoring the gallery.
Done when
- No gallery filename contains a personal-name pattern
- The previous URLs no longer resolve from cache
Verify: Re-scan; the leaky-image-filenames check returns no matches.
Limitations
Filenames only. The scan does not read image binaries or embedded metadata. The scan cannot establish whether these are real people or what consent exists.
Dev taskRename both before/after images to neutral slugs, update references on / and /services, and purge the old URLs from any CDN cache.
Appointment form collects health details with no privacy policy
The /contact form fields include "Phone", "Reason for visit", and "Describe your symptoms". No page on the site links to a privacy policy — the footer links are Home, Services, and Contact.
If this ships unfixed
- Privacy-conscious patients abandon the form rather than describe symptoms
- Ad and form platforms can flag a site collecting data with no published policy
Estimated impact: Privacy & Metadata
Why it matters
The form asks patients to describe symptoms, and the site never says where that data goes, who can read it, or how long it is kept. For a healthcare practice that is both a trust problem and a likely gap to close before launch.
Recommended fix
Publish a privacy policy covering what the form collects, where submissions are stored, and how patients can request deletion. Link it from the footer on every page and next to the form's submit button.
Done when
- A privacy policy page exists and returns 200
- It is linked from the footer of every inspected page and beside the form
Verify: Re-scan; the privacy-policy-link check finds a policy link on every page.
Dev taskCreate /privacy with reviewed policy content and link it in the shared footer and beside the appointment form.
The site never says where the practice is
No city, neighborhood, or street address appears in the crawlable text of any of the 3 pages. The /contact page says only "Conveniently located to serve you better."
If this ships unfixed
- Assistants answering a local query have nothing to place the practice with
- Two physical locations produce no local signal at all
Estimated impact: AI Search Readiness
Why it matters
Dentistry is bought locally. Entity signals like a stated address reduce ambiguity for search engines and assistants trying to place a business; without any, a two-location practice is indistinguishable from a practice anywhere. This reduces ambiguity — it does not guarantee rankings or citations.
Recommended fix
Name both locations with full street addresses in the footer of every page and on /contact, and mention the cities in the homepage and services copy.
Done when
- Both location addresses appear in crawlable text on every inspected page
- The city names appear in the homepage and services copy
Verify: Re-scan; the entity-location check finds a postal address in page text.
Dev taskAdd both location addresses (with phone numbers and hours) to the shared footer and the /contact page.
The appointment form has no submission endpoint in the markup
<form action="#" method="post"> — captured from /contact. The markup declares no endpoint and contains no success or error region.
If this ships unfixed
- Appointment requests have no delivery path in the published markup
- The practice cannot tell how many requests were lost
Estimated impact: Conversion Clarity
Why it matters
As published, the form has nowhere to deliver a request. The patient believes they contacted the practice and the practice has no record of it. This is a markup inspection — the form was not submitted, so end-to-end delivery is unverified either way.
Recommended fix
Wire the form to an endpoint that delivers to the practice's front desk, add visible success and error states, and send a live test submission before launch.
Done when
- The form declares a real action endpoint
- Success and error states are present in the markup
Verify: Re-scan; the form-markup check finds a non-fragment action.
Limitations
Markup inspection only. AgencyProof does not submit forms or attempt checkout.
Dev taskPoint the appointment form at a working handler, add success/error states, and confirm delivery with a test submission.
Health-outcome claims that may need review before publication
Two homepage claims describe treatment outcomes: "Pain-free treatment — guaranteed." (hero) and "Instant results with our whitening treatments."
If this ships unfixed
- Outcome wording in healthcare advertising invites regulator attention
- The practice, not the agency, carries the exposure once it is live
Estimated impact: Compliance-Sensitive Copy
Why it matters
This project is marked compliance-sensitive: it advertises healthcare. Outcome wording is the specific category professional boards and advertising regulators examine, and the practice — not the agency — carries that exposure.
Recommended fix
Rework both claims to describe the practice's approach rather than promise results, and have the practice's advisor confirm the final wording. Needs human review — outcome claims in healthcare advertising are jurisdiction-specific. Not legal advice.
Done when
- Both claims describe an approach rather than a promised result
- The practice's advisor has signed off on the final wording
Verify: Manual: confirm the approved wording is published on /.
Limitations
AgencyProof identifies wording that may need evidence or specialist review. It does not provide legal advice or determine regulatory compliance.
Dev taskReplace both outcome claims with reviewed wording approved by the practice.
§ 08
Items to review
Context-dependent or unconfirmed observations to check against how this site actually works. Not counted as defects.
Missing meta description on /services
/services has no <meta name="description"> tag. Search engines will assemble a snippet from whatever page text they pick — currently the navigation links.
Why it matters
The services page is where treatment searches should land, and the snippet under that result is the ad copy for the click. Leaving it to chance hands the practice's best page a random sentence in results.
Recommended fix
Add a 140–160 character meta description naming the services and both locations, e.g. "Cleanings, crowns, and whitening at Marlow Dental's two locations. Gentle care for the whole family — book online or call."
Done when
- The change described in the recommended fix is live on /services
- A fresh scan no longer reports "Missing meta description on /services"
Verify: Re-scan after deploying; the finding clears when the page's metadata parses with the expected tag in place. View-source (not the browser inspector) shows what crawlers see.
Dev taskAdd a unique <meta name="description"> to /services and verify it renders in the page <head>.
No structured data — no Dentist or LocalBusiness schema anywhere
No application/ld+json script on any of the 3 crawled pages. There is no machine-readable statement of the practice name, addresses, phone numbers, or opening hours.
Why it matters
Structured data is an entity and crawler signal: it tells search engines and assistants who the business is and where it operates. Adding it reduces ambiguity — it does not guarantee rankings, citations or recommendations by an AI system.
Recommended fix
Add Dentist JSON-LD to the homepage with name, url, both location addresses, phone numbers, and openingHoursSpecification for each.
Done when
- The change described in the recommended fix is live on the homepage
- A fresh scan no longer reports "No structured data — no Dentist or LocalBusiness schema anywhere"
Verify: Re-scan after deploying; the finding clears when the structured data, robots rules, or guidance files are present in a plain fetch of the site.
Dev taskEmbed an application/ld+json script with the Dentist schema (both locations) in the homepage <head>.
The homepage welcome copy is the page builder's untouched output
The section under the hero reads: "Welcome to the future of dentistry, where cutting-edge technology meets a seamless experience designed around you." It says nothing specific about Marlow Dental — no practitioners, no locations, no services.
Why it matters
Patients researching a new dentist are deciding whether to trust strangers with their health. Copy that could describe any practice on the internet gives them nothing to decide with — and reads as generated, which quietly undermines the pages around it.
Recommended fix
Rewrite the welcome section around what is true and specific: the practitioners, the two locations, the services patients actually book, and how the practice handles anxious patients.
Done when
- The change described in the recommended fix is live on the homepage
- A fresh scan no longer reports "The homepage welcome copy is the page builder's untouched output"
Verify: Re-scan after deploying; the finding clears when the flagged copy has been replaced on the page.
Dev taskReplace the homepage welcome section copy once the practice approves the rewrite.
Service descriptions are template text with nothing about this practice
Every service blurb on /services is a one-line template ("Restore damaged teeth with durable, natural-looking crowns."). Nothing mentions Marlow's locations, hours, equipment, practitioners, or how to book each treatment.
Why it matters
A services page that describes dentistry in general instead of this practice in particular converts nobody: the patient still doesn't know who does the work, where, or when they could be seen.
Recommended fix
Expand each service with practice-specific facts: which practitioner provides it, at which location, typical visit length, and how soon a new patient can usually be seen.
Done when
- The change described in the recommended fix is live on /services
- A fresh scan no longer reports "Service descriptions are template text with nothing about this practice"
Verify: Re-scan after deploying; the finding clears when the flagged copy has been replaced on the page.
Dev taskRewrite the four service blurbs on /services with practice-approved specifics.
Every homepage call to action is "Learn More"
The label "Learn More" appears on 3 buttons on / — the hero, the services section, and the closing banner. None of them asks the visitor to book, call, or contact the practice.
Why it matters
"Learn More" defers the decision the page should be asking for. A dental homepage has one job — get an appointment requested — and no button on this one asks for it.
Recommended fix
Make the primary CTA "Request an appointment" (linked to the working form) in the hero and closing banner; keep one "See our services" link for the middle of the page.
Done when
- The change described in the recommended fix is live on the homepage
- A fresh scan no longer reports "Every homepage call to action is "Learn More""
Verify: Re-scan after deploying; the finding clears when the homepage presents the corrected path — then click it yourself on a phone.
Dev taskReplace the three Learn More buttons: two become Request an appointment → /contact, one becomes See our services → /services.
The site claims "5,000+ happy patients" but shows no reviews or credentials
The homepage says "Join 5,000+ happy patients who trust us with their smiles", yet no page shows a review, rating source, practitioner credential, or professional affiliation alongside it.
Why it matters
Patients choosing a dentist check for proof — reviews, credentials, familiar accreditation. A round number with nothing beside it reads as decoration, and its presence makes the absence of other proof more conspicuous.
Recommended fix
Either show the number's source (e.g. a link to the practice's public review profile) or replace it with proof the practice has: review snippets with permission, practitioner credentials, and years in practice.
Done when
- Testimonials and counts are attributed (name, company, or link) or removed
Verify: Re-scan after deploying; the finding clears when the flagged wording no longer appears on the page (or now sits next to its supporting evidence).
Dev taskAdd a reviews/credentials section to the homepage once the practice supplies verifiable material; remove the unsupported patient count if no source exists.
The homepage title tag is reused verbatim on /services
<title>Marlow Dental | Gentle Modern Dentistry</title> — identical on / and /services. The builder's site-wide default title was never overridden per page.
Why it matters
Duplicate titles make pages compete with each other in search results, and the services page — the one that should rank for treatment searches — never says what it is.
Recommended fix
Give each page a unique, descriptive title. Keep the current one for /, and retitle /services along the lines of "Dental Services — Cleanings, Crowns & Whitening | Marlow Dental".
Done when
- The change described in the recommended fix is live on the homepage
- A fresh scan no longer reports "The homepage title tag is reused verbatim on /services"
Verify: Re-scan after deploying; the finding clears when the page's metadata parses with the expected tag in place. View-source (not the browser inspector) shows what crawlers see.
Dev taskSet per-page <title> values for /services and /contact instead of the builder default.
No og:image on any page
No page defines og:image. Shares in messaging apps and social platforms will render a bare link or a scraped fragment instead of a preview card.
Why it matters
Dental practices get shared exactly this way — a parent forwarding the link to a family group chat. A blank preview card wastes the practice's most personal referral channel.
Recommended fix
Create a 1200×630 branded OG image and set og:image plus og:image:alt sitewide.
Done when
- The change described in the recommended fix is live on the homepage
- A fresh scan no longer reports "No og:image on any page"
Verify: Re-scan after deploying; the finding clears when the page's metadata parses with the expected tag in place. View-source (not the browser inspector) shows what crawlers see.
Dev taskAdd og:image, og:image:width, og:image:height, and og:image:alt meta tags to the shared head component.
Smile gallery and hero images have no alt text
Both /services gallery images carry no alt attribute; the homepage hero image (hero-smile-final-v3.png) is also missing one.
Why it matters
Screen reader users hear the raw filename read aloud — which, given the current filenames, would also read out the name pattern flagged above. Alt text is a baseline automated accessibility check and takes minutes to add.
Recommended fix
Write descriptive alt text for the gallery and hero images (without personal names), and use alt="" for purely decorative graphics.
Done when
- The change described in the recommended fix is live on /services
- A fresh scan no longer reports "Smile gallery and hero images have no alt text"
Verify: Re-scan after deploying; the finding clears when the attribute or tag is present in the served HTML. Spot-check with a screen reader or browser accessibility tree.
Limitations
Automated accessibility checks do not establish WCAG or legal conformance and do not replace manual testing with assistive technologies.
Dev taskAdd alt attributes to the two gallery images and the homepage hero image.
The hero image is a 4.8 MB uncompressed PNG
/images/hero-smile-final-v3.png transfers 4.8 MB uncompressed — the largest single asset on the site, loaded above the fold on every visit to /.
Why it matters
Patients often find a dentist from a phone on cellular data. A nearly 5 MB hero delays the first paint on a slow connection. This is a first-pass weight signal from the static fetch, not field data.
Recommended fix
Export the hero as a compressed WebP or AVIF at the actual display size (target under 200 KB) and serve responsive sizes via srcset.
Done when
- The change described in the recommended fix is live on the homepage
- A fresh scan no longer reports "The hero image is a 4.8 MB uncompressed PNG"
Verify: Re-scan after deploying; the finding clears when the measured value (bytes, encoding, TTFB, redirects) is back inside the threshold.
Limitations
Static performance signals are point-in-time diagnostics. They are not field data or a guarantee of user experience.
Dev taskRe-export hero-smile-final-v3.png as an optimized WebP with srcset variants; replace the reference on /.
§ 09
Observations
Informational notes and deliberate, context-appropriate choices — recorded for completeness, not counted against the score.
No practitioner is named anywhere on the site
Across all 3 crawled pages, no dentist or hygienist is named, and there is no team or about section.
Why it matters
Patients are choosing a person, not just a practice. Names, photos, and one line of background each are among the cheapest trust signals a healthcare site can add.
Recommended fix
Add a short team section with each practitioner's name, role, and credentials, linked from the homepage.
Done when
- The change described in the recommended fix is live on the homepage
- A fresh scan no longer reports "No practitioner is named anywhere on the site"
Verify: Re-scan after deploying; the finding clears when the flagged wording no longer appears on the page (or now sits next to its supporting evidence).
Dev taskAdd a practitioners section (names, roles, credentials) to the homepage or a new /team page.
No sitemap.xml
GET /sitemap.xml returns the 404 page, and robots.txt does not reference a sitemap.
Why it matters
Three pages will get crawled eventually without one, but a sitemap makes indexing predictable — and it's a fifteen-minute fix.
Recommended fix
Generate a sitemap.xml at build time and reference it from robots.txt.
Done when
- The change described in the recommended fix is live on /sitemap.xml
- A fresh scan no longer reports "No sitemap.xml"
Verify: Re-scan after deploying; the finding clears when a plain HTTP fetch of the page shows the corrected markup, headers, or robots rules.
Dev taskGenerate /sitemap.xml at build time and add a Sitemap: line to robots.txt.
Appointment form inputs have no programmatic labels
The /contact form fields use placeholder text only — e.g. <input type="text" placeholder="Describe your symptoms"> with no <label> element or aria-label.
Why it matters
Placeholders disappear on focus and are not reliably announced by screen readers, so assistive-technology users get an unlabeled form asking about their health.
Recommended fix
Add a visible <label> for each form field, associated via for/id.
Done when
- The change described in the recommended fix is live on /contact
- A fresh scan no longer reports "Appointment form inputs have no programmatic labels"
Verify: Re-scan after deploying; the finding clears when the attribute or tag is present in the served HTML. Spot-check with a screen reader or browser accessibility tree.
Limitations
Automated accessibility checks do not establish WCAG or legal conformance and do not replace manual testing with assistive technologies.
Dev taskAdd associated <label> elements to all six appointment form fields on /contact.
The same paragraph appears verbatim on / and /services
"At Marlow Dental, we combine state-of-the-art technology with a caring touch to deliver exceptional results for every smile." — identical on / and /services.
Why it matters
Verbatim repetition across pages is a tell of generated copy, and it wastes a slot where the services page could say something the homepage doesn't.
Recommended fix
Keep the paragraph in one place and replace the other instance with page-specific copy.
Done when
- The change described in the recommended fix is live on /services
- A fresh scan no longer reports "The same paragraph appears verbatim on / and /services"
Verify: Re-scan after deploying; the finding clears when the flagged copy has been replaced on the page.
Dev taskReplace the duplicated paragraph on /services with copy specific to the services offered.
No optional llms.txt guidance file
GET /llms.txt returns the 404 page.
Why it matters
An llms.txt file is an optional way to state, in one place, what the site is and which pages matter. It is a convention, not a ranking factor — its presence does not guarantee citations or recommendations by an AI system.
Recommended fix
Publish a short /llms.txt naming the practice, the two locations, the services offered, and the canonical booking page.
Done when
- https://marlowdental.example/llms.txt returns HTTP 200
- It names the business, what it offers, and links the key pages
Verify: Re-scan after deploying; the finding clears when the structured data, robots rules, or guidance files are present in a plain fetch of the site.
Dev taskAdd a static /llms.txt at build time.
No skip-to-content link before the navigation
No skip link precedes the <nav> element on any of the 3 crawled pages.
Why it matters
Keyboard users tab through every navigation item on every page before reaching the content. A single skip link removes that repetition.
Recommended fix
Add a visually-hidden "Skip to content" anchor as the first focusable element, targeting the main landmark.
Done when
- The change described in the recommended fix is live on the homepage
- A fresh scan no longer reports "No skip-to-content link before the navigation"
Verify: Re-scan after deploying; the finding clears when the attribute or tag is present in the served HTML. Spot-check with a screen reader or browser accessibility tree.
Limitations
Automated accessibility checks do not establish WCAG or legal conformance and do not replace manual testing with assistive technologies.
Dev taskAdd a skip link to the shared layout and give <main> an id to target.
Gallery images declare no width or height
The two /services gallery <img> elements carry no width/height attributes and no aspect-ratio style.
Why it matters
Without intrinsic dimensions the browser cannot reserve space, so content moves as images load. This is a static markup observation, not a measured layout-shift score.
Recommended fix
Add width and height attributes matching each image's intrinsic size.
Done when
- The change described in the recommended fix is live on /services
- A fresh scan no longer reports "Gallery images declare no width or height"
Verify: Re-scan after deploying; the finding clears when the measured value (bytes, encoding, TTFB, redirects) is back inside the threshold.
Dev taskAdd width/height attributes to the two gallery images on /services.
The footer copyright year is two years out of date
"© 2024 Marlow Dental. All rights reserved." — hard-coded in the shared footer on all 3 pages.
Why it matters
A stale year is the cheapest possible signal that nobody maintains the site. It costs one line to make it self-updating.
Recommended fix
Render the current year from the build or at request time instead of hard-coding it.
Done when
- The change described in the recommended fix is live on the homepage
- A fresh scan no longer reports "The footer copyright year is two years out of date"
Verify: Re-scan after deploying; the finding clears when the flagged copy has been replaced on the page.
Dev taskReplace the hard-coded year in the shared footer.
§ 10b
Launch timeline
Every open finding, sequenced the way a consultant would run the week. Blockers and quick wins land today; nothing in “Next month” blocks anything.
- The "Book an appointment" button goes nowherecritical blocker · S
- Homepage headline guarantees a treatment outcomehigh priority · S
- Gallery image filenames pair a personal name with a procedurehigh priority · M
- The site never says where the practice ishigh priority · M
- Health-outcome claims that may need review before publicationhigh priority · L
- The appointment form has no submission endpoint in the markuphigh priority · L
- Appointment form collects health details with no privacy policyhigh priority · L
- Every homepage call to action is "Learn More"medium priority · S
- The homepage title tag is reused verbatim on /servicesmedium priority · S
- Missing meta description on /servicesmedium priority · S
- Smile gallery and hero images have no alt textmedium priority · S
- The site claims "5,000+ happy patients" but shows no reviews or credentialsmedium priority · M
- No og:image on any pagemedium priority · M
- No structured data — no Dentist or LocalBusiness schema anywheremedium priority · M
- The hero image is a 4.8 MB uncompressed PNGmedium priority · M
- The homepage welcome copy is the page builder's untouched outputmedium priority · M
- Service descriptions are template text with nothing about this practicemedium priority · L
- No sitemap.xmllow priority · S
- Appointment form inputs have no programmatic labelslow priority · S
- The same paragraph appears verbatim on / and /serviceslow priority · S
- No practitioner is named anywhere on the sitelow priority · L
- No skip-to-content link before the navigationenhancement · S
- No optional llms.txt guidance fileenhancement · S
- Gallery images declare no width or heightenhancement · S
- The footer copyright year is two years out of dateenhancement · S
§ 11
Copy rewrites
Suggested replacements for the riskiest copy — ready to paste, ready to edit.
Homepage headline guarantees a treatment outcome
homepageAP-2026-2952-02Original
“<h1>Pain-free treatment — guaranteed.</h1> — captured from /. No page on the site describes what the guarantee covers, and no terms or supp…”
Suggested
“Modern techniques focused on comfort — ask us what to expect for your procedure.”
Health-outcome claims that may need review before publication
homepageAP-2026-2952-07Original
“Pain-free treatment — guaranteed.”
Suggested
“Whitening results you can see, with a plan tailored to your teeth — we'll walk you through realistic expectations at your consultation.”
The homepage welcome copy is the page builder's untouched output
homepageAP-2026-2952-10Original
“Welcome to the future of dentistry, where cutting-edge technology meets a seamless experience designed around you.”
Suggested
“Marlow Dental has cared for families at our two neighborhood locations for over a decade. Same-week appointments, clear treatment plans, and a team that explains every step before it happens.”
§ 12
Developer task list
Every fix as a hand-off-ready task, ordered by priority — impact vs. effort, severity as tiebreak. IDs match the findings above.
- AP-2026-2952-01Set the nav CTA href to /contact in the shared header; verify on /, /services, and /contact.P5029 · Squick win
- AP-2026-2952-02Replace the hero H1 on / and remove all "guaranteed" language sitewide.P4029 · Squick win
- AP-2026-2952-03Rename both before/after images to neutral slugs, update references on / and /services, and purge the old URLs from any CDN cache.P4017 · M
- AP-2026-2952-05Add both location addresses (with phone numbers and hours) to the shared footer and the /contact page.P4014 · M
- AP-2026-2952-07Replace both outcome claims with reviewed wording approved by the practice.P4009 · L
- AP-2026-2952-06Point the appointment form at a working handler, add success/error states, and confirm delivery with a test submission.P4007 · L
- AP-2026-2952-04Create /privacy with reviewed policy content and link it in the shared footer and beside the appointment form.P4002 · L
- AP-2026-2952-12Replace the three Learn More buttons: two become Request an appointment → /contact, one becomes See our services → /services.P3034 · Squick win
- AP-2026-2952-14Set per-page <title> values for /services and /contact instead of the builder default.P3029 · Squick win
- AP-2026-2952-08Add a unique <meta name="description"> to /services and verify it renders in the page <head>.P3027 · Squick win
- AP-2026-2952-16Add alt attributes to the two gallery images and the homepage hero image.P3022 · Squick win
- AP-2026-2952-13Add a reviews/credentials section to the homepage once the practice supplies verifiable material; remove the unsupported patient count if no source exists.P3019 · M
- AP-2026-2952-15Add og:image, og:image:width, og:image:height, and og:image:alt meta tags to the shared head component.P3019 · M
- AP-2026-2952-09Embed an application/ld+json script with the Dentist schema (both locations) in the homepage <head>.P3014 · M
- AP-2026-2952-17Re-export hero-smile-final-v3.png as an optimized WebP with srcset variants; replace the reference on /.P3009 · M
- AP-2026-2952-10Replace the homepage welcome section copy once the practice approves the rewrite.P3004 · M
- AP-2026-2952-11Rewrite the four service blurbs on /services with practice-approved specifics.P2987 · L
- AP-2026-2952-19Generate /sitemap.xml at build time and add a Sitemap: line to robots.txt.P2027 · Squick win
- AP-2026-2952-20Add associated <label> elements to all six appointment form fields on /contact.P2022 · Squick win
- AP-2026-2952-21Replace the duplicated paragraph on /services with copy specific to the services offered.P2012 · S
- AP-2026-2952-18Add a practitioners section (names, roles, credentials) to the homepage or a new /team page.P2004 · L
- AP-2026-2952-23Add a skip link to the shared layout and give <main> an id to target.P1024 · Squick win
- AP-2026-2952-22Add a static /llms.txt at build time.P1022 · Squick win
- AP-2026-2952-24Add width/height attributes to the two gallery images on /services.P1017 · S
- AP-2026-2952-25Replace the hard-coded year in the shared footer.P1014 · S
§ 13
Claude / Fable fix prompt
Paste this into Claude or Fable and let it work through the list.
You are improving the launch readiness of https://marlowdental.example — the website of Marlow Dental, a two-location dental practice. The site was rebuilt with an AI page builder and shipped with the generated copy untouched. An AgencyProof Snapshot Audit scored the site 78/100 and held the launch on one blocker. Work through the issues below in order, without changing the site's visual design, layout, or routes.
Ground rules:
- This is a healthcare site. Never write outcome guarantees ("pain-free", "instant results", "guaranteed"). Where the audit flags compliance-sensitive wording, rewrite conservatively and leave a TODO for human review — do not provide legal advice.
- Never invent statistics, patient names, testimonials, reviews, or credentials. If a claim needs evidence the practice hasn't supplied, soften the claim instead of manufacturing proof.
- Write plainly and specifically. Banned phrases: "cutting-edge", "seamless", "state-of-the-art", "the future of dentistry", "designed around you", "exceptional results".
ISSUES TO FIX (in priority order):
1. [BLOCKER / technical] The nav CTA is <a class="nav-cta" href="#">Book an appointment</a> on all 3 pages.
→ Point it at /contact and verify the link on every page.
2. [HIGH / trust] The hero H1 is "Pain-free treatment — guaranteed." with nothing behind it.
→ Replace with: "Modern techniques focused on comfort — ask us what to expect for your procedure."
→ Remove all remaining "guaranteed" language sitewide.
3. [HIGH / privacy] Gallery images are published as before-after-j-mercer-crown.jpg and before-after-r-okafor-veneers.jpg.
→ Rename both to neutral slugs (smile-gallery-01.jpg, smile-gallery-02.jpg), update references on / and /services, and leave a TODO to confirm the photo consent covers web publication.
4. [HIGH / privacy] The /contact form collects phone numbers and symptom descriptions with no privacy policy anywhere.
→ Create /privacy covering what the form collects, storage, and deletion requests; link it from the shared footer and beside the form.
5. [HIGH / ai_search] No city or address appears in crawlable text on any page.
→ Add both location addresses (with phones and hours) to the shared footer and /contact; mention the cities in the homepage and services copy. Leave a TODO for the practice to supply the exact addresses.
6. [HIGH / conversion] The appointment form posts to "#" with no endpoint declared.
→ Wire it to a real endpoint with success and error states; leave a TODO to send a live test submission in production.
7. [HIGH / compliance] "Pain-free treatment — guaranteed." and "Instant results with our whitening treatments." are health-outcome claims.
→ Rewrite both conservatively and mark them for human review. Whitening suggestion: "Whitening results you can see, with a plan tailored to your teeth — we'll walk you through realistic expectations at your consultation."
8. [MEDIUM / seo] /services has no meta description.
→ Add: <meta name="description" content="Cleanings, crowns, and whitening at Marlow Dental's two locations. Gentle care for the whole family — book online or call.">
9. [MEDIUM / ai_search] No structured data anywhere.
→ Add Dentist JSON-LD to the homepage <head> with name, url, both location addresses, phone numbers, and openingHoursSpecification.
10. [MEDIUM / content] The homepage welcome copy is generated filler ("Welcome to the future of dentistry, where cutting-edge technology meets a seamless experience designed around you.").
→ Replace with: "Marlow Dental has cared for families at our two neighborhood locations for over a decade. Same-week appointments, clear treatment plans, and a team that explains every step before it happens." Adjust facts the practice corrects.
11. [MEDIUM / content] /services blurbs are one-line templates with nothing about this practice.
→ Expand each service with practice-specific facts (practitioner, location, typical visit length); leave TODOs where facts are needed from the practice.
12. [MEDIUM / conversion] All three homepage CTAs say "Learn More".
→ Hero and closing banner become "Request an appointment" → /contact; the middle one becomes "See our services" → /services.
13. [MEDIUM / trust] "Join 5,000+ happy patients" appears with no reviews, ratings source, or credentials anywhere.
→ Remove the number unless the practice can source it; leave a TODO to add a reviews/credentials section with verifiable material.
14. [MEDIUM / seo] The homepage <title> is duplicated verbatim on /services.
→ Retitle /services: "Dental Services — Cleanings, Crowns & Whitening | Marlow Dental".
15. [MEDIUM / seo] No og:image on any page.
→ Add a 1200×630 branded OG image plus og:image:alt to the shared head.
16. [MEDIUM / accessibility] The gallery images and homepage hero have no alt text.
→ Add descriptive alt text (never personal names); alt="" for decorative graphics.
17. [MEDIUM / performance] hero-smile-final-v3.png is 4.8 MB uncompressed.
→ Re-export as WebP at display size (target under 200 KB) with srcset variants.
18. [LOW / trust] No practitioner is named anywhere on the site.
→ Add a team section scaffold with TODOs for names, roles, and credentials from the practice.
19. [LOW / technical] No sitemap.xml.
→ Generate sitemap.xml at build time and reference it from robots.txt.
20. [LOW / accessibility] The /contact form fields have placeholders but no labels.
→ Add a visible <label> for each field, associated via for/id.
21. [LOW / content] "At Marlow Dental, we combine state-of-the-art technology with a caring touch to deliver exceptional results for every smile." appears verbatim on / and /services.
→ Keep one instance rewritten per the banned-phrase list; replace the other with page-specific copy.
22. [ENHANCEMENT / ai_search] No /llms.txt.
→ Add a short static /llms.txt naming the practice, both locations, the services, and the booking page.
23. [ENHANCEMENT / accessibility] No skip-to-content link.
→ Add a visually-hidden skip link as the first focusable element, targeting the main landmark.
24. [ENHANCEMENT / performance] The gallery images declare no width/height.
→ Add width and height attributes matching each image's intrinsic size.
25. [ENHANCEMENT / content] The footer copyright year is hard-coded to 2024.
→ Render the current year instead.
DO NOT CHANGE (recorded as strengths in the audit): HTTPS enforcement, the shared navigation structure, the single-H1-per-page heading structure, robots.txt, and the html lang attribute.
When you are done, list every file you changed and the issue numbers each change resolves.agencyproof — fix prompt
You are improving the launch readiness of https://marlowdental.example — the website of Marlow Dental, a two-location dental practice. The site was rebuilt with an AI page builder and shipped with the generated copy untouched. An AgencyProof Snapshot Audit scored the site 78/100 and held the launch on one blocker. Work through the issues below in order, without changing the site's visual design, layout, or routes.
Ground rules:
- This is a healthcare site. Never write outcome guarantees ("pain-free", "instant results", "guaranteed"). Where the audit flags compliance-sensitive wording, rewrite conservatively and leave a TODO for human review — do not provide legal advice.
- Never invent statistics, patient names, testimonials, reviews, or credentials. If a claim needs evidence the practice hasn't supplied, soften the claim instead of manufacturing proof.
- Write plainly and specifically. Banned phrases: "cutting-edge", "seamless", "state-of-the-art", "the future of dentistry", "designed around you", "exceptional results".
ISSUES TO FIX (in priority order):
1. [BLOCKER / technical] The nav CTA is <a class="nav-cta" href="#">Book an appointment</a> on all 3 pages.
→ Point it at /contact and verify the link on every page.
2. [HIGH / trust] The hero H1 is "Pain-free treatment — guaranteed." with nothing behind it.
→ Replace with: "Modern techniques focused on comfort — ask us what to expect for your procedure."
→ Remove all remaining "guaranteed" language sitewide.
3. [HIGH / privacy] Gallery images are published as before-after-j-mercer-crown.jpg and before-after-r-okafor-veneers.jpg.
→ Rename both to neutral slugs (smile-gallery-01.jpg, smile-gallery-02.jpg), update references on / and /services, and leave a TODO to confirm the photo consent covers web publication.
4. [HIGH / privacy] The /contact form collects phone numbers and symptom descriptions with no privacy policy anywhere.
→ Create /privacy covering what the form collects, storage, and deletion requests; link it from the shared footer and beside the form.
5. [HIGH / ai_search] No city or address appears in crawlable text on any page.
→ Add both location addresses (with phones and hours) to the shared footer and /contact; mention the cities in the homepage and services copy. Leave a TODO for the practice to supply the exact addresses.
6. [HIGH / conversion] The appointment form posts to "#" with no endpoint declared.
→ Wire it to a real endpoint with success and error states; leave a TODO to send a live test submission in production.
7. [HIGH / compliance] "Pain-free treatment — guaranteed." and "Instant results with our whitening treatments." are health-outcome claims.
→ Rewrite both conservatively and mark them for human review. Whitening suggestion: "Whitening results you can see, with a plan tailored to your teeth — we'll walk you through realistic expectations at your consultation."
8. [MEDIUM / seo] /services has no meta description.
→ Add: <meta name="description" content="Cleanings, crowns, and whitening at Marlow Dental's two locations. Gentle care for the whole family — book online or call.">
9. [MEDIUM / ai_search] No structured data anywhere.
→ Add Dentist JSON-LD to the homepage <head> with name, url, both location addresses, phone numbers, and openingHoursSpecification.
10. [MEDIUM / content] The homepage welcome copy is generated filler ("Welcome to the future of dentistry, where cutting-edge technology meets a seamless experience designed around you.").
→ Replace with: "Marlow Dental has cared for families at our two neighborhood locations for over a decade. Same-week appointments, clear treatment plans, and a team that explains every step before it happens." Adjust facts the practice corrects.
11. [MEDIUM / content] /services blurbs are one-line templates with nothing about this practice.
→ Expand each service with practice-specific facts (practitioner, location, typical visit length); leave TODOs where facts are needed from the practice.
12. [MEDIUM / conversion] All three homepage CTAs say "Learn More".
→ Hero and closing banner become "Request an appointment" → /contact; the middle one becomes "See our services" → /services.
13. [MEDIUM / trust] "Join 5,000+ happy patients" appears with no reviews, ratings source, or credentials anywhere.
→ Remove the number unless the practice can source it; leave a TODO to add a reviews/credentials section with verifiable material.
14. [MEDIUM / seo] The homepage <title> is duplicated verbatim on /services.
→ Retitle /services: "Dental Services — Cleanings, Crowns & Whitening | Marlow Dental".
15. [MEDIUM / seo] No og:image on any page.
→ Add a 1200×630 branded OG image plus og:image:alt to the shared head.
16. [MEDIUM / accessibility] The gallery images and homepage hero have no alt text.
→ Add descriptive alt text (never personal names); alt="" for decorative graphics.
17. [MEDIUM / performance] hero-smile-final-v3.png is 4.8 MB uncompressed.
→ Re-export as WebP at display size (target under 200 KB) with srcset variants.
18. [LOW / trust] No practitioner is named anywhere on the site.
→ Add a team section scaffold with TODOs for names, roles, and credentials from the practice.
19. [LOW / technical] No sitemap.xml.
→ Generate sitemap.xml at build time and reference it from robots.txt.
20. [LOW / accessibility] The /contact form fields have placeholders but no labels.
→ Add a visible <label> for each field, associated via for/id.
21. [LOW / content] "At Marlow Dental, we combine state-of-the-art technology with a caring touch to deliver exceptional results for every smile." appears verbatim on / and /services.
→ Keep one instance rewritten per the banned-phrase list; replace the other with page-specific copy.
22. [ENHANCEMENT / ai_search] No /llms.txt.
→ Add a short static /llms.txt naming the practice, both locations, the services, and the booking page.
23. [ENHANCEMENT / accessibility] No skip-to-content link.
→ Add a visually-hidden skip link as the first focusable element, targeting the main landmark.
24. [ENHANCEMENT / performance] The gallery images declare no width/height.
→ Add width and height attributes matching each image's intrinsic size.
25. [ENHANCEMENT / content] The footer copyright year is hard-coded to 2024.
→ Render the current year instead.
DO NOT CHANGE (recorded as strengths in the audit): HTTPS enforcement, the shared navigation structure, the single-H1-per-page heading structure, robots.txt, and the html lang attribute.
When you are done, list every file you changed and the issue numbers each change resolves.§ 14
For your client
A calm version of the findings, written to be forwarded as-is.
We ran the new Marlow Dental website through a pre-launch inspection covering trust, findability, privacy, accessibility and technical quality across the three public pages. Overall the build is solid, and most of what we found is quick to fix — but one item holds the launch: the booking button in the navigation doesn't lead anywhere yet. Close behind it, the appointment form has no delivery address in its markup, so we'll wire both up and test them end to end. The before/after gallery filenames currently include what read as patient names, which we'll rename immediately and confirm the photo consent covers web use. The headline promises guaranteed pain-free treatment — we'll adjust the wording so every claim on the site is one the practice can stand behind, and route the final version past your advisor. We've also lined up improvements to how the practice appears in local search and in link previews. None of this changes the launch plan; we'll confirm each item as it's completed and re-run the inspection.
§ 15
Executive recommendation
Launch decision: hold.
1 launch blocker open. It fails in front of real customers on day one. Clear the blocker first; most are hours of work, not weeks. Projected score if the listed findings are resolved: 99/100, from 78/100 today.
The first 3 changes I would make
- 1The "Book an appointment" button goes nowhere
- 2Homepage headline guarantees a treatment outcome
- 3Gallery image filenames pair a personal name with a procedure
Generated from the scan verdict and priority data — no language model was used for this section.







