Skip to content

Improve search titles, descriptions and structured data - #504

Merged
jzongker-churchapps merged 1 commit into
mainfrom
seo-audit-fixes
Nov 6, 2026
Merged

jzongker-churchapps merged 1 commit into
mainfrom
seo-audit-fixes

Conversation

@jzongker-churchapps

Copy link
Copy Markdown
Contributor

Search Console (last 90 days) showed non-branded searches getting ~17k impressions and ~1% clicks. The worst case: "what are the penitential psalms" had 4,125 impressions and 1 click. The lesson page title led with "NextLevel Online:" and had no meta description.

Changes

  • Lesson and study titles lead with their own name (The Penitential Psalms (Psalm 51) | Free NextLevel Online Lesson).
  • Program, study and lesson pages get plain-text descriptions (≤160 chars), with a generated fallback when the database has none (SeoHelper, unit tested).
  • Course/LearningResource JSON-LD with breadcrumbs; site-wide Organization and WebSite.
  • Capitalised slugs 308 to the lowercase URL; API errors throw instead of being cached as a 200 error page.
  • Sitemap and robots.txt cleanup; sitemap-content.xml deduplicated (now submitted in Search Console).
  • Homepage images converted to WebP with dimensions, hero preloaded, HubSpot deferred.
  • llms.txt and comparison-page pricing notes.

Checks

  • yarn test:unit 16/16, tsc --noEmit, eslint (0 errors), yarn build all pass.
  • Checked the rendered <title> and description on lesson, study and program pages on a local production server.
  • PolinRider scanner run locally on the working tree: clean. Manual sweep for eval/obfuscation/encoded payloads: none.

🤖 Generated with Claude Code

Search Console showed lesson pages getting thousands of impressions and almost no clicks: the titles led with the program name ("NextLevel Online: ...") and most lessons had no meta description.

- Lesson and study titles now lead with their own name.
- Program, study and lesson pages get plain-text descriptions of up to 160 characters, built from the lesson's description, bottom line and verse when the database has none.
- Course/LearningResource JSON-LD with breadcrumbs, plus Organization and WebSite on every page.
- Capitalised slugs redirect to the lowercase URL; API failures throw instead of caching an error page.
- Sitemap: drop build-time lastmod, changefreq and priority; remove duplicate lesson URLs; robots.txt names current AI crawlers.
- Homepage images converted to WebP with dimensions; hero preloaded; HubSpot loads after first interaction.
- llms.txt lists programs and key pages; comparison pages note that competitor prices are approximate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
lessons-app Ready Ready Preview Nov 6, 2026 10:43pm UTC

Request Review

@jzongker-churchapps
jzongker-churchapps merged commit c569184 into main Nov 6, 2026
4 checks passed
@jzongker-churchapps
jzongker-churchapps deleted the seo-audit-fixes branch November 6, 2026 22:43

This branch was successfully deployed

1 active deployment
Preview — 186c38d9 Deployed Nov 6, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant