PR #76 merged: SEO overhaul: 7 bespoke service pages, index-bloat fixes, meta cleanup
Why
Pulled real Google Search Console data for both sites. stumason.dev got 11 clicks in 90d; the /activity feed + auto-generated digests were racking up impressions with ~0 clicks (index bloat); the commercial service pages were buried on the generic template; and article meta descriptions were auto-truncated mid-sentence. This PR is the full SEO pass.
What's in here
7 bespoke service pages (custom interactive JS)
Hand-built standalone pages at their canonical /services/* slugs, sitting before the generic {slug} route so they shadow the templated versions (no duplicate URLs). Each has a distinct accent + interactive centrepiece:
- Stripe Connect (emerald) — animated split-payment flow + TidyLinker case study
- Fractional CTO (amber) — full-time-vs-fractional comparison
- Laravel Development (rose) — explorable stack diagram
- MVP Development (sky) — interactive 8-week build timeline
- AI Integration (indigo) — live LLM-call demo
- Prototype Rescue (orange) — symptom→diagnosis triage console
- SaaS Development (teal) — explorable building-blocks map
Stripe Connect is a new real service (seeded), grounded in TidyLinker. The ~108 location/template pages still work alongside.
Index-bloat + meta fixes
noindexthe/activity/*feed (X-Robots-Tag header middleware)noindexauto-generated week-in-review digests + exclude them from the sitemap- 301-redirect the duplicate Coolify article to the canonical ranking one
Article::cleanMetaDescription()cuts at sentence/word boundaries (no mid-word, no "…"); fixesImportArticleDraftswhich usedStr::limit— the source of all the truncated meta- Wire
meta_title/meta_descriptioninto the article page<title>/description for SERP control
Internal linking
Stripe Connect added to the site-wide footer (all 7 services now resolve to bespoke pages).
Out-of-band (done directly on prod, not in this PR)
- Fixed empty/broken SEO meta on the high-traffic posts on both sites — incl. stuartmason.co.uk's #1 post (1,975 views) which had no meta at all
- Regenerated 47 truncated meta descriptions on stumason.dev; unpublished the duplicate Coolify article
Tests
Bespoke routes render; templated location pages still work; activity + week-in-review noindex; 301 redirect; cleanMetaDescription unit coverage; article meta plumbing. 40 affected tests pass; Pint + ESLint + production build green.