YMYL healthcare site with structural gaps. Two-location independent opticians with zero LocalBusiness schema, no dedicated location pages, 9s mobile LCP (Divi inline CSS), unnamed clinical author on YMYL content, and live placeholder content on an indexed page.
| Category | Weight | Score | Weighted | Key Issue |
| Technical SEO | 22% | 52 | 11.4 | No sitemap in robots.txt, dead UA tag, viewport zoom blocked |
| Content Quality | 23% | 45 | 10.4 | Thin service pages, unnamed author "Zeliha", no E-E-A-T |
| On-Page SEO | 20% | 48 | 9.6 | Short titles, no location keywords, missing meta descriptions |
| Schema | 10% | 30 | 3.0 | No LocalBusiness, no AggregateRating, dateModified bug |
| Performance | 10% | 50 | 5.0 | Mobile LCP 9.0s (320KB inline CSS), 371KB unused JS |
| AI Readiness | 10% | 34 | 3.4 | No llms.txt, marketing headings, no FAQ schema |
| Images | 5% | 45 | 2.3 | Empty alt text, no lazy loading, hero is CSS background-image |
Top 5 Critical Issues
| # | Issue | Severity |
| 1 | No dedicated location pages for Chigwell or Dunmow | Critical |
| 2 | 320KB inline CSS causing 9.0s mobile LCP | Critical |
| 3 | Zero LocalBusiness/Optician schema | Critical |
| 4 | Author "Zeliha" has no credentials (YMYL) | High |
| 5 | Live "[Insert Address]" on indexed blog post | Critical |
Top 5 Quick Wins
| # | Action | Effort |
| 1 | Add Sitemap directive to robots.txt | 5 min |
| 2 | Remove dead UA analytics tag | 10 min |
| 3 | Fix viewport: remove maximum-scale=1.0 | 5 min |
| 4 | Increase HSTS max-age to 1 year | 5 min |
| 5 | Noindex /category/uncategorized/ | 10 min |
HSTS
7 days
should be 1 year
robots.txt
Partial
no sitemap directive
| Header | Value | Status |
| Strict-Transport-Security | max-age=604800 | Weak |
| X-Content-Type-Options | nosniff | Pass |
| X-Frame-Options | sameorigin | Pass |
| Permissions-Policy | Present | Pass |
| Referrer-Policy | origin-when-cross-origin | Pass |
| Content-Security-Policy | Not set | Missing |
| Issue | Severity |
| Viewport zoom blocked | Critical |
| 320KB inline CSS (Divi) | Critical |
| Dead UA analytics tag | Critical |
| /category/uncategorized/ indexed | High |
| Author archives exposed | High |
| Date-based blog URLs | High |
| Dual H1 on homepage | Medium |
Blog Posts
12
latest: Mar 2026
Avg Service Page
~450w
target: 800+
Named Practitioners
0
YMYL gap
| Signal | Score | Notes |
| Experience | 5/10 | Zeiss Forum tech, MiYOSMART clinical references. No case studies. |
| Expertise | 3/10 | Author "Zeliha" has no surname, GOC number, or credentials. |
| Authoritativeness | 4/10 | GOC mentioned but not linked. College of Optometrists referenced. |
| Trust | 7/10 | Excellent reviews (5.0/105, 4.9/75). Full NAP. Privacy policy. |
| Page | Words | Assessment |
| Homepage | ~400 | Brand messaging only. Dual H1. |
| Eye Care | ~400 | Three services briefly described. |
| Myopia Management | ~450 | Good stats cited. Thin sections. |
| Seiko Lenses | ~1,000 | Best service page. Technical detail. |
| Professional Fees | ~1,200 | Clear pricing, NHS/private split. |
| FAQ | ~2,800 | 22 Q&As. No FAQPage schema. |
| Blog (avg) | ~1,200 | Newer posts cite sources. |
YMYL author gap: All 12 clinical blog posts attributed to "Zeliha" with no surname, GOC number, or bio. Only named practitioner: "Amandeep Matharu" in the FAQ complaints section.
| Type | Status |
| Organization | Basic (no logo/sameAs) |
| WebSite + SearchAction | Valid |
| BreadcrumbList | Homepage item URL missing |
| Person (author) | Thin: no credentials |
| Article (blog) | dateModified bug |
| Type | Priority |
| Optician / LocalBusiness (x2) | Critical |
| AggregateRating | Critical |
| OpeningHoursSpecification | Critical |
| FAQPage | High |
| Service / MedicalProcedure | High |
Schema bugs: Blog dateModified precedes datePublished. BreadcrumbList position 1 missing item URL. Article headline includes brand suffix.
Locations
2
Chigwell + Dunmow
| Chigwell | Dunmow |
| Address | 173 Manor Road, IG7 5QB | 35 High Street, CM6 1AB |
| Phone | 020 8928 1500 | 01371 876 044 |
| Hours | Tue-Fri 9-5, Sat 9-1 (Closed Mon) | Mon-Fri 9-5, Sat 9-1 |
| Reviews | 5.0 (105) | 4.9 (75) |
Review scores are exceptional. 5.0/105 and 4.9/75 are the strongest local SEO asset. However, these are static text with no AggregateRating schema.
| Issue | Impact | Severity |
| No dedicated location pages | Google surfaces contact page for Dunmow | Critical |
| No Maps embed | Missing local trust signal | High |
| No LocalBusiness schema | Zero structured local data | Critical |
| Live "[Insert Address]" | Indexed incomplete content | Critical |
| No NHS directory listing | Highest-authority UK optician citation | High |
| Platform | Score | Gaps |
| Google AI Overviews | 25 | No schema, no FAQPage, weak E-E-A-T |
| Bing Copilot | 30 | Needs structured data + named authors |
| ChatGPT | 35 | Crawlable but passages too short |
| Perplexity | 40 | Best: blog with sourced stats usable |
Strongest citable content: Myopia Management page and World Glaucoma Week post. Both cite professional bodies. These should be templates for all future content.
| Keyword | SERP Expects | Site Serves | Mismatch |
| opticians chigwell | Local Page | Hybrid/Branding | Critical |
| opticians dunmow | Local Page | Contact page | Critical |
| eye test essex | Local + Service | Not ranking | Critical |
| myopia management essex | Service+Content | Thin page | High |
| seiko lenses essex | Service Page | Service Page | Aligned |
Page-type mismatch is the #1 SXO issue. Google surfaces the contact page for Dunmow queries. Competitors all have dedicated branch pages.
Persona Scoring
Local Searcher
50/100
Cannot find hours or map on landing page.
Anxious Parent
53/100
Page leads with statistics not reassurance.
Premium Buyer
61/100
Best served. Seiko page has depth.
NHS Booker
44/100
Homepage says "LUXURY". NHS info buried.
Dunmow First-Timer
44/100
No Dunmow-specific content exists.
Actions are ranked by value (score impact) against complexity (effort required). Start at the top of each group and work down.
| # | Action | Complexity | Value |
| 1 | Fix live "[Insert Address]" placeholder on indexed blog post | Trivial | Removes embarrassing live error from Google index |
| 2 | Add Sitemap: directive to robots.txt | Trivial | Bing/Yandex/DuckDuckGo can discover the sitemap |
| 3 | Remove dead UA-219553460-1 analytics tag | Trivial | Saves 124 KB + network round trip per page load |
| 4 | Fix viewport zoom block (maximum-scale=1.0) | Trivial | Fixes WCAG violation and Google accessibility flag |
| 5 | Noindex /category/uncategorized/ and author archives | Trivial | Removes thin content and exposed usernames from index |
| 6 | HSTS max-age from 7 days to 1 year (Cloudflare toggle) | Trivial | Security improvement, HSTS preload eligibility |
| 7 | Enable IndexNow in SmartCrawl | Trivial | Instant Bing/Yandex notification on content changes |
| 8 | Add <link rel="preload"> for hero background image | Trivial | Measurable mobile LCP improvement |
| 9 | Add Google Maps embeds to contact page (both locations) | Simple | Basic local trust signal for a physical healthcare practice |
| 10 | Surface NHS availability on homepage and eye care page | Simple | Addresses weakest persona (NHS Booker, 44/100) |
| 11 | Create /llms.txt with curated page index | Simple | AI crawler prioritisation signal, growing in importance |
| 12 | Fix schema bugs (dateModified, breadcrumb, headline suffix) | Simple | Stops sending broken signals to Google's indexing pipeline |
| # | Action | Complexity | Value |
| 13 | Add Optician/LocalBusiness schema for both locations with AggregateRating | Moderate | Core local pack signal. Enables star ratings in SERPs. Reviews (5.0/105, 4.9/75) currently invisible to search. |
| 14 | Write meta descriptions for all pages with location keywords | Moderate | Controls SERP messaging on every page. Currently auto-generated. |
| 15 | Add FAQPage schema to /frequently-asked-questions/ | Moderate | 22 existing Q&As become AI-citable. Potential AI Overview inclusion. |
| 16 | Optimise all service page titles with location keywords | Simple | "Eye Care | The Opticians" (24 chars) wastes ranking opportunity. Add Chigwell/Dunmow/Essex. |
| 17 | Convert H2 marketing slogans to question-format headings | Moderate | "LET'S TACKLE MYOPIA!" becomes "What is myopia management?" Directly improves AI citation. |
| 18 | Contextualise booking CTAs per page | Simple | "Book Online" everywhere becomes "Book a Myopia Assessment", "Book a Lens Consultation". Conversion improvement. |
| # | Action | Complexity | Value |
| 19 | Create dedicated /chigwell/ and /dunmow/ location pages | Significant | #1 structural change for local SEO. Solves the page-type mismatch causing Google to surface the contact page for Dunmow. Each page needs unique content, schema, map, hours, reviews. |
| 20 | Add named optometrist profiles with GOC credentials | Significant | Single most important E-E-A-T signal. Currently zero named practitioners on a YMYL health site. Needs full names, GOC numbers, photos, bios. |
| 21 | Expand Eye Care page from ~400 to 800+ words | Moderate | Flagship service page is too thin. Needs "what to expect", process explanation, FAQ section. |
| 22 | Restructure Myopia Management page for parent intent + FAQ | Moderate | Currently not ranking for "myopia management essex". Competitors (Wild Apple, Leightons) have deeper parent-framed content with process steps. |
| # | Action | Complexity | Value |
| 23 | Categorise blog posts properly (9 of 12 are "Uncategorized") | Trivial | Better taxonomy, cleaner archive pages |
| 24 | Update copyright from 2023 to dynamic year | Trivial | Minor trust signal |
| 25 | Evaluate chatwith.tools chatbot (155KB wasted JS) | Simple | Potential significant performance improvement if removed |
Items marked Rebuild in the tables above are resolved as part of the Astro migration. See the Rebuild tab for the full picture.
| Milestone | Score | Actions |
| Now | 45 | Baseline |
| High Value / Low Complexity done | 55 | Quick wins: placeholder, robots, UA, viewport, schema fixes, Maps, HSTS |
| + Medium Complexity done | 63 | + LocalBusiness schema, meta descriptions, FAQPage, titles, headings |
| + Strategic projects done | 72 | + Location pages, practitioner profiles, content expansion |
| After Astro rebuild | 78 | + 320KB CSS gone, clean URLs, built-in schema |
WordPress/Divi → Astro static site. The rebuild isn't just a platform swap. It resolves 20 of the 28 action items identified in this audit, including the #1 performance bottleneck (320KB inline CSS), all schema gaps, all content structure issues, and both missing location pages. The 8 items that must be done separately are flagged below.
What the rebuild fixes
| Problem | How the rebuild fixes it |
| 320KB inline CSS on every page | Astro generates minimal scoped CSS. No Divi stylesheet. |
| Hero image is a CSS background | Proper <img> with Astro <Image /> component. Preloaded automatically. |
| 371KB unused JavaScript | No jQuery, no Divi scripts.min.js, no theme JS at all. |
| Dead UA analytics tag | Fresh build. Only GA4 + Lumara Analytics included. |
| Viewport zoom block | Clean viewport meta in the new layout template. |
| Date-based blog URLs | New /blog/slug/ structure with 301 redirect map. |
| Dual H1 on homepage | Single H1 in the new page template. |
| No lazy loading | Astro adds loading="lazy" to below-fold images. |
| Copyright shows 2023 | Dynamic new Date().getFullYear() in footer. |
| Orphan preconnect hint | No Google Fonts preconnect unless actually used. |
What gets built in
| Action item | How it's built in |
| LocalBusiness schema (x2) | JSON-LD component fed from location data file. |
| AggregateRating schema | Included in LocalBusiness component. |
| FAQPage schema | FAQ component auto-generates JSON-LD from content. |
| BlogPosting schema | Blog layout template with author Person entity. |
| Meta descriptions | Content collection frontmatter, per-page. |
| Title tags with locations | Layout template with location suffix logic. |
| Question-format headings | Content rewrite during migration. |
| Location pages (/chigwell/, /dunmow/) | Dedicated pages with per-location content + schema. |
| Contextualised CTAs | Per-page CTA props in components. |
| Blog post categories | Content collection tags, proper taxonomy. |
Full Action Item Coverage
| # | Action | Rebuild Status |
| 1 | Fix "[Insert Address]" placeholder | Do now on WP |
| 2 | Add Sitemap to robots.txt | Do now on WP |
| 3 | Remove dead UA analytics tag | Resolved |
| 4 | Fix viewport zoom block | Resolved |
| 5 | Noindex uncategorized + author archives | Resolved |
| 6 | HSTS max-age to 1 year | Do now (CF) |
| 7 | Enable IndexNow | Built in |
| 8 | Preload hero image | Resolved |
| 9 | Google Maps on contact page | Built in |
| 10 | Surface NHS on homepage | Built in |
| 11 | Create /llms.txt | Built in |
| 12 | Fix schema bugs | Resolved |
| 13 | LocalBusiness schema (x2) | Built in |
| 14 | Write meta descriptions | Built in |
| 15 | Add FAQPage schema | Built in |
| 16 | Optimise titles with locations | Built in |
| 17 | Question-format headings | Built in |
| 18 | Contextualise CTAs | Built in |
| 19 | Location pages (/chigwell/, /dunmow/) | Built in |
| 20 | Optometrist profiles with GOC | Needs client info |
| 21 | Expand Eye Care page | Built in |
| 22 | Restructure Myopia page | Built in |
| 23 | Categorise blog posts | Built in |
| 24 | Update copyright year | Resolved |
| 25 | Evaluate chatbot | Decision needed |
| 26 | Eliminate 320KB inline CSS | Resolved |
| 27 | Clean blog URLs with 301s | Built in |
| 28 | Schema in Astro templates | Built in |
Items NOT covered by the rebuild
These 5 items must be done independently, either before or alongside the rebuild. They depend on external systems or client decisions, not code.
| Action | Why it's separate | When |
| Fix "[Insert Address]" placeholder | Live error on current WP site. Fix today regardless of rebuild timeline. | Now |
| Add Sitemap to robots.txt | 5-second WP fix. No reason to wait for rebuild. | Now |
| HSTS max-age to 1 year | Cloudflare setting. Independent of the site platform. | Now |
| Optometrist profiles with GOC credentials | Needs names, GOC numbers, photos, bios from the client. Content, not code. | Pre-rebuild |
| Evaluate chatbot | Business decision: is the chatbot generating value? Remove or keep for the new site. | Pre-rebuild |