Overview
SEO Health Score: 36/100
Weighting: Technical 25%, Content 25%, Schema 15%, On-Page 15%, GEO 10%, Performance 10%. Schema and GEO together account for 25% - a site with almost no structured data will always score low here regardless of how good the copy is.
| Category | Weight | Raw Score | Progress | Weighted | Why this score |
|---|---|---|---|---|---|
Technical SEO |
25% |
30/100 | 7.5 | HTTPS and HSTS present. Viewport meta correct. No canonical tags (all 4 pages), no sitemap.xml, no robots.txt, no analytics, no OG tags, no security headers beyond HSTS. | |
Content Quality / E-E-A-T |
25% |
52/100 | 13.0 | Named tradesman, 20 years in business, Checkatrade verified 9.91/10, solid word counts (3000 homepage, 2259 services). No blog, no FAQ, no case studies, no specific project outcomes, 4-page site only. | |
Schema / Structured Data |
15% |
8/100 | 1.2 | Single bare LocalBusiness on homepage only. Missing: address, geo, openingHours, priceRange, image, url, @id, sameAs. No schema on services, about, or contact pages. No Person, Service, BreadcrumbList, or FAQPage. | |
On-Page SEO |
15% |
42/100 | 6.3 | Titles and meta descriptions present on all 4 pages. H1s present. All image alt texts populated. No canonical tags anywhere, no OG/Twitter tags anywhere. Services page H1 is generic ("Reliable, Honest, Punctual & Clean") with no keyword signal. | |
GEO / AI Search Readiness |
10% |
10/100 | 1.0 | No llms.txt, no robots.txt (so no AI bot permissions defined), no Speakable, no FAQPage schema, no direct answer markup. Named person and Checkatrade link are the only positive signals. | |
Performance |
10% |
65/100 | 6.5 | All CSS inline (no render-blocking stylesheet), no external JS, 40KB page. Google Fonts loaded without preload. All images JPG/PNG with no WebP versions. No lazy loading on below-fold images. | |
| Overall SEO Health Score | 35.5 / 100 | ||||
Baseline summary: The site is well-built and the copy is strong for a trade business - named owner, 20 years of experience, Checkatrade verification, clear service descriptions and coverage areas. But the search infrastructure is almost entirely absent. No sitemap, no robots.txt, no canonical tags, no OG tags, no analytics, and almost no structured data. These are not difficult fixes - they are missing infrastructure that should have been there from day one. The schema situation is the biggest lever: one afternoon of structured data work could add 15-20 points. The technical foundations (HTTPS, inline CSS, clean HTML) make this straightforward to fix.
Section 1
Critical Issues
● Critical
Schema Is Bare and Homepage-Only
The single LocalBusiness block on the homepage is missing the fields that AI systems and Google depend on to understand and cite the business: no address, no geo coordinates, no openingHours, no image, no url, no @id, no sameAs. The services, about, and contact pages have zero schema. For a local trade business, this is the single biggest barrier to appearing in AI search responses.
Expand homepage LocalBusiness with address, geo, openingHours, image, url, @id, sameAs (Checkatrade URL). Add WebPage + BreadcrumbList to all 4 pages. Add Person schema for Nick Clements on about.html. Add Service schema for each of the 6 services.
● Critical
No Canonical Tags on Any Page
All 4 pages (homepage, services, about, contact) have no canonical tag. Without canonical, Google cannot definitively resolve which URL is the authoritative version if the page is accessed via multiple paths (e.g. with/without trailing slash, HTTP vs HTTPS, www vs non-www). It also signals a lack of basic on-page care to technical crawlers.
Add <link rel="canonical" href="https://ncjoinery.co.uk/[page]"> to the <head> of all 4 pages. Use the exact URL without trailing slash for consistency.
● Critical
No Analytics Installed
There is no GTM, GA4, or any other analytics on any page of the site. Nick has no visibility of where visitors come from, which pages they land on, what they do before contacting, or whether the contact form converts. Without baseline data, it is impossible to measure the impact of any SEO or schema improvements.
Install GTM (create a free container) and configure a GA4 tag through it. Add the GTM head snippet to all pages. Set up a contact form submission event. This takes under an hour and unlocks measurement from day one.
● Critical
No sitemap.xml or robots.txt
Both /sitemap.xml and /robots.txt return 404. Without a sitemap, Google has to discover pages by crawling alone - slower and less reliable for a new or recently refreshed site. Without robots.txt, there is no AI bot permissions file and no sitemap reference for crawlers that check it first.
Create sitemap.xml with all 4 pages (homepage, services, about, contact) including lastmod dates and priority values. Create robots.txt with sitemap reference and explicit allow rules for GPTBot, ClaudeBot, PerplexityBot, Googlebot.
● Critical
No OG or Twitter Card Tags on Any Page
None of the 4 pages have og:title, og:description, og:image, og:url, twitter:card, or any social meta tags. When the site is shared on WhatsApp, Facebook, LinkedIn, or any other platform, it renders as a bare URL with no preview. For a trade business where word of mouth and referrals are primary acquisition channels, this is a meaningful missed opportunity every time someone shares a link.
Add og:title, og:description, og:url, og:type, og:image, twitter:card, twitter:title, twitter:description to all 4 pages. Use a 1200x630 hero image as og:image.
● High
No GEO / AI Search Infrastructure
No llms.txt, no Speakable schema, no FAQPage, and no direct-answer content structure. AI systems querying "joinery Manchester" or "property maintenance Greater Manchester" have no structured information to pull from. The Checkatrade citation (9.91/10 rating) is the site's only credible AI-facing trust signal - and it is not referenced in schema.
Create llms.txt with service description, coverage areas, and AI bot permissions. Add FAQPage schema on the homepage and contact page. Add Speakable on the homepage pointing to the direct-answer paragraph. Reference Checkatrade URL in sameAs on the LocalBusiness entity.
Section 2
What the Baseline Gets Right
HTTPS + HSTS
HTTPS on all pages. HSTS header confirmed (max-age=15768000). HTTP/2 served.
Mobile / viewport
Viewport meta present on all pages. Responsive layout confirmed. No horizontal scroll.
Title tags
All 4 pages have unique, descriptive titles. Homepage 46 chars, services 60, about 71, contact 63. All within limits.
Meta descriptions
All 4 pages have meta descriptions (150-165 chars). Service-specific language, location included, no duplicate text.
H1 on every page
Every page has exactly one H1. Heading hierarchy is logical throughout.
Image alt text
All 28 images across 4 pages have descriptive alt text. No missing or empty alt attributes found.
Named tradesman
Nick Clements named throughout - about page, footer, services. Strong E-E-A-T foundation for a Person entity.
Checkatrade 9.91/10
Verified third-party review platform rating prominently featured. Direct link to profile present in footer area.
Est. 2006 (20 years)
Founding year in schema and prominently in footer. 20 years in business is a strong AI citation signal.
Performance baseline
All CSS inline (no render-blocking external stylesheet). No external JS files. Clean 40KB HTML. Minimal dependencies.
Coverage area listed
8 specific locations in footer (Manchester, Stockport, Altrincham, Sale, Trafford, Salford, Bury, Bolton). Good foundation for areaServed schema.
Contact info complete
Phone number (07496 312644) and email (nick@ncjoinery.co.uk) present. Phone appears twice on homepage (header + footer).
Section 3
Per-Page Technical Snapshot
| Page | Title | Meta Desc | Canonical | OG Tags | Schema | GTM | ~Word Count |
|---|---|---|---|---|---|---|---|
| / | ✓ 46 chars | ✓ 159 chars | ✗ Missing | ✗ None | ▲ Bare LocalBusiness | ✗ None | ~3,010 |
| /services.html | ✓ 60 chars | ✓ 157 chars | ✗ Missing | ✗ None | ✗ None | ✗ None | ~2,259 |
| /about.html | ✓ 71 chars | ▲ 165 chars (truncates) | ✗ Missing | ✗ None | ✗ None | ✗ None | ~1,530 |
| /contact.html | ✓ 63 chars | ✓ 150 chars | ✗ Missing | ✗ None | ✗ None | ✗ None | ~1,312 |
Note on about.html meta description: At 165 characters it will truncate in Google SERPs (limit ~160 chars). Minor issue but worth trimming 5-6 characters when fixing the page.
Section 4
Schema Audit - Current State vs Required
Current schema (homepage only): LocalBusiness with 6 fields: name, description, telephone, email, areaServed, foundingDate. No @id, no @graph, no address, no image, no openingHours, no url, no sameAs. 3 pages completely untagged.
| Field | Current State | Required | Priority |
|---|---|---|---|
| @id | Missing | https://ncjoinery.co.uk/#business | Critical |
| @type | LocalBusiness (generic) | ["LocalBusiness", "HomeAndConstructionBusiness"] or more specific | High |
| url | Missing | https://ncjoinery.co.uk/ | Critical |
| address | Missing | PostalAddress with addressLocality, addressRegion, addressCountry | Critical |
| geo | Missing | GeoCoordinates (latitude/longitude for Greater Manchester) | High |
| openingHours | Missing | Mon-Fri 09:00-17:00, Sat by appointment (from contact page) | High |
| image | Missing | ImageObject with logo or primary photo URL | Critical |
| sameAs | Missing | Checkatrade profile URL at minimum | High |
| areaServed | String: "Greater Manchester" | Array of specific towns (Manchester, Stockport, Altrincham, etc.) | Medium |
| priceRange | Missing | ££ (mid-range trade) | Medium |
| Person (Nick) | Not present anywhere | Person entity on about.html with name, jobTitle, worksFor, sameAs | High |
| Service entities | Not present | 6x Service schemas (one per service) on services.html | High |
| FAQPage | Not present | FAQPage on homepage and/or contact page with common trade questions | High |
| WebPage | Not present on any page | WebPage + BreadcrumbList on all 4 pages | High |
Section 5
Medium Priority Issues
● On-Page
Services Page H1 Has No Keyword
The services.html H1 is "Reliable, Honest, Punctual & Clean" - a positioning statement with no keyword value. Search engines and AI systems weight the H1 heavily as a page topic signal. Someone searching "joinery Manchester" or "property maintenance Stockport" gets no keyword match from the most prominent heading.
Change H1 to something like "Joinery & Property Maintenance Services, Greater Manchester" and move the brand values to an H2 or subheading beneath it.
● Performance
Google Fonts Loaded Without Preconnect to gstatic
The site has preconnect to fonts.googleapis.com but not fonts.gstatic.com (where the actual font files live). This means the browser has to make an extra DNS lookup for the font files, adding ~50-100ms on mobile connections.
Add <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> immediately after the existing Google Fonts preconnect.
● Performance
No WebP Images
All 28 images are JPEG or PNG. WebP typically reduces file size by 25-35% vs JPEG at equivalent quality. The hero images (general-renovations-01.jpg, bathrooms-shower.jpg etc.) are the highest-impact targets given they are above the fold.
Convert hero and above-fold images to WebP. Serve using <picture> with WebP source and JPEG/PNG fallback, or convert and replace if legacy browser support is not a concern.
● Content
No FAQ Content on Site
AI search responses for trade queries (cost, timelines, coverage, guarantees, insurance) are heavily driven by FAQ-format content. The site has strong service descriptions but no questions-and-answers format anywhere. This is one of the quickest wins for AI citation readiness.
Add 4-6 FAQs to the homepage (covering cost, coverage, how to get a quote, turnaround time) and mark up with FAQPage schema. The contact page's "Honest Pricing" section is a good starting point for one FAQ answer.
● Content
No Blog or Long-Form Content
4 pages is thin for a site trying to rank across a wide geographic area and multiple service types. Competitors with project write-ups, material guides, or location-specific pages will outperform on long-tail queries. Blog content also creates opportunities for schema (HowTo, Article) and internal linking.
Consider 2-3 project case studies or service guides ("How to plan a wet room in a Victorian terrace", "What to look for in an HMO refurbishment quote"). These can be short (400-600 words) and each doubles as schema and AI citation fodder.
● Technical
Security Headers Incomplete
Only HSTS is present. X-Frame-Options, X-Content-Type-Options, Referrer-Policy, and Content-Security-Policy are all absent. These are not direct ranking factors but are increasingly checked by security scanners and affect trust signals for AI citation systems that assess site credibility.
Add security headers via .htaccess using <IfModule mod_headers.c>. HSTS is present, so the module appears to be available. Add X-Frame-Options SAMEORIGIN, X-Content-Type-Options nosniff, and Referrer-Policy strict-origin-when-cross-origin at minimum.
Section 6
Prioritised Fix Roadmap
Estimated score after full implementation: 68-72/100. The schema and technical fixes alone should move the site from 36 to approximately 58-62. Content improvements (FAQ, one case study) push it to 65-68. A second content piece or location page adds the final increment.
| # | Fix | Category | Score Impact | Effort |
|---|---|---|---|---|
| 1 | Expand LocalBusiness schema with address, geo, openingHours, image, url, @id, sameAs, priceRange | Schema | +8-10 pts | 1-2 hrs |
| 2 | Add WebPage + BreadcrumbList schema to all 4 pages | Schema | +3-4 pts | 1 hr |
| 3 | Add canonical tags to all 4 pages | Technical | +3-4 pts | 30 mins |
| 4 | Add OG + Twitter Card tags to all 4 pages | On-Page | +3-4 pts | 1 hr |
| 5 | Create sitemap.xml and robots.txt | Technical | +2-3 pts | 30 mins |
| 6 | Install GTM (create container, add to all pages, configure GA4 tag) | Technical | +1-2 pts (score); high business value | 1-2 hrs |
| 7 | Add Person schema for Nick Clements on about.html | Schema | +2 pts | 30 mins |
| 8 | Add 6x Service schemas on services.html | Schema | +2 pts | 1 hr |
| 9 | Create llms.txt + add FAQPage schema on homepage (4-6 trade FAQs) | GEO / Schema | +4-5 pts | 2 hrs |
| 10 | Update services.html H1 to include keyword ("Joinery & Property Maintenance Services") | On-Page | +1-2 pts | 5 mins |
| 11 | Add preconnect for fonts.gstatic.com and convert hero images to WebP | Performance | +2-3 pts | 2-3 hrs |
| 12 | Add security headers to .htaccess (X-Frame-Options, X-Content-Type-Options, Referrer-Policy) | Technical | +1-2 pts | 30 mins |
| 13 | Write one project case study or service guide (400-600 words) | Content | +3-4 pts | Half day |