Stu Mason
Stu Mason

Activity

StuMason/progress
stumason.dev
TypeScript
Pull Request Opened

PR #76 opened: 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

  • noindex the /activity/* feed (X-Robots-Tag header middleware)
  • noindex auto-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 "…"); fixes ImportArticleDrafts which used Str::limit — the source of all the truncated meta
  • Wire meta_title/meta_description into 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.

+2767
additions
-17
deletions
20
files changed