Executive Summary
Headline: Christchurch Miami's blog and per-sermon resource architecture are now best-in-class for the South Florida PCA peer set. Schema craft, two-audience content strategy, and the new four-surface app on its own subdomain put CCM ahead of every direct comparator. The remaining 25% gap is concentrated in three places: (1) legacy Snappages "About-tier" pages that haven't been touched in this round of SEO work, (2) the new app.christchurchmiami.org subdomain shipping without robots.txt or sitemap.xml, and (3) raw content volume — peers with WordPress archives have years of indexed long-tail that CCM is still building.
Most urgent fix: Add robots.txt and sitemap.xml to app.christchurchmiami.org and register it as a separate Google Search Console property. Without this, the new subdomain is invisible to Google despite hosting CCM's strongest schema-rich content.
Domain health at a glance
What we verified live (2026-05-09) Items confirmed against live HTTP — not just workspace artifacts
- Hub page
/sermons-and-blogsis NOT in primary navigation — verified by fetching homepage and three other pages. The strategic hub Jeff invested in is currently orphaned from the main menu (only reachable by direct link or footer/internal cross-links). - 5/3 blog post OG image is REAL, not the placeholder — Agent #1 flagged a possible
[PLACEHOLDER:...]bug from workspace artifacts. Live verification:og:imageresolves to a real Snappages CDN URL. Cleared - Blog index meta description is generic —
/blogmeta description reads "We exist to glorify God by helping people know, love, and serve Jesus." That's the church mission line, not a blog-specific description. Confirmed live - Blog tag taxonomy is bloated — 80+ tags rendered in the sidebar; many one-off ("Iran," "Israel," "Moonstruck," "Solstice"). Tag cannibalization risk for individual posts. Confirmed live
- app.christchurchmiami.org/devotionals/ is live and well-structured — clean title, OG image (1920×1080), shares main-site nav, GTM installed. The duplicate-content concern Agent #2 flagged from build files is mitigated on the live site (page summarizes & deep-links rather than reproducing dated content).
- app subdomain has trailing-slash inconsistency —
/devotionals/redirects to/devotionals(no slash) but<link rel=canonical>points back to/devotionals/(with slash). Self-conflicting signal. Confirmed live - 5/3 blog post:
og:imageprimary URL is HTTP, secure_url is HTTPS — minor mixed-protocol issue Snappages should be told to fix at the platform level.
Issue distribution
christchurchmiami.org Snappages-hosted main site · 11 critical/high findings · 6 medium
Critical issues 3
Per April 2026 audit, /en-espanol returned 404. Ad Grant policy requires landing pages to be live and substantive — broken Spanish landing destroys the 5% campaign CTR floor that revokes accounts. With CCM's Cuban-Miami audience this is also the highest-leverage local SEO opportunity ("iglesia en Kendall" is low-difficulty per April audit).
/en-espanol landing page mirroring /new in Spanish, OR 301 to /spanish-sermons. Verify in GSC that no live ads or sitemap entries point at the 404. Needs live re-verification — may already be fixed.April audit found /about-us, /mission-vision-values, /what-we-believe, /leadership, /new, /kids, /youth, /groups, /resources, /complete-services had no title tags, no meta descriptions, no canonicals, no schema, and no image alt text. No memory entries between April 13 and May 9 indicate these pages were touched.
/new (~250-300 words per April audit) with auto-generated SERP snippets is exactly what trips manual review./leadership, layer Person schema for James Drake, Kent Keller, Heidi Drake, and any elders.Verified live: nav links /giving → https://christchurchmiami.churchcenter.com/giving. Ad Grants prohibit ads that lead off the verified domain via a single hop into a checkout/donation flow without intervening content.
/giving, GSC and Ad Grants policy will see this as a thin redirect, not a landing page./giving from a redirect into a real landing page on christchurchmiami.org with body copy ("Why we give," tax-deductibility note, frequency options, contact for legacy/stock gifts), then put the ChurchCenter button as a CTA on that page rather than a domain-level redirect. Critical before the Ad Grant application proceeds.High-priority 5
Verified live 2026-05-09: Homepage and blog index nav both show Sermons → English Sermons / Sermon Resources / Spanish Sermons. There is no link to /sermons-and-blogs in the main nav.
Sermons top-level nav link's destination from /sermons to /sermons-and-blogs, OR (b) add the hub as a sibling submenu item ("Sermons & Blogs"). Option (a) consolidates link equity into the hub but risks Snappages' nav fragility. Option (b) is safer.Verified live 2026-05-09: /blog ships meta-description: "We exist to glorify God by helping people know, love, and serve Jesus." The page title is "Blog | Christchurch Miami — Evidence for Faith & Devotionals" (good), but the description is the homepage mission statement, not blog content positioning.
Sitemap was submitted to GSC on 2026-04-27 (workspace memory). Three blog posts have published since (4/29 Christian Nationalism, 5/3 Don't All Religions, 5/6 Can I Trust the Bible) plus the hub rebuild. Snappages typically auto-regenerates /sitemap.xml, but the April audit recorded only 71 URLs.
/sitemap.xml. Confirm: (a) the three new posts appear, (b) /sermons-and-blogs appears with <lastmod> of 5/3 or later, (c) <lastmod> auto-updates. Re-submit to GSC if stale. Run weekly going forward.Verified live 2026-05-09: 80+ tags rendered in blog sidebar including one-off semantic noise: "Iran," "Israel," "Moonstruck," "Summer Solstice," "Winter Solstice," "Sun," "Moon," "Sheep," "Shroud."
/blog/tag/{slug} URL. With 80+ tags and ~50 posts, you have more tag pages than content pages — classic thin-content / index bloat. Single-occurrence tags should be removed.noindex on tag pages with <3 posts via theme-side rule if Snappages supports it. Re-submit sitemap after.Posts authored as "Jeff Reed" pre-April 12, 2026 don't have the locked @graph and won't be cited by Perplexity/ChatGPT the way the recent ones can be. Workspace memory documents the schema lock as starting around the resurrection-evidence post (4/12).
Medium-priority 6
April audit recorded "no alt text detected on any image across audited pages." Snappages exposes alt in the image widget but it requires a per-image pass.
Christchurch Miami logo; for hero images use scene-descriptive alts ending with "Christchurch Miami in Kendall, FL" on at least homepage hero, /new hero, /leadership portraits.Five overlapping URL surfaces compete for "Christchurch Miami sermons" intent. Hub-rebuild doc explicitly fixed a prior schema-URL mismatch where the page declared @id of /sermons while sitting at /sermons-and-blogs — that exact bug pattern can recur on the others.
@id on each. Each should self-reference; none should claim to be another URL. Pick one as the strongest hub (already decided: /sermons-and-blogs) and ensure the other four cross-link to it rather than competing.Verified live 2026-05-09 on 5/3 blog post: og:image primary URL begins http://; og:image:secure_url is https://. Most parsers prefer secure_url, but Twitter and some Slack/Discord scrapers default to og:image.
April audit found /about missing H1. Recurring Snappages pitfall: page builder uses page name as banner instead of true <h1>. Needs live verification
<h1. Add via Code widget if missing.5/3 post: 6 FAQ entries. 5/6 post: 11 FAQ entries. 4/29 post: 6. Google's FAQ rich-result eligibility doesn't care about exact count, but for AI Overviews and Perplexity, more well-formed Q&A pairs = more answer surfaces.
reference_subsplash_blog_schema_and_seo to lock the count.Per workspace memory, resources.christchurchmiami.org is SermonShots (now deprecated). But christchurchmiami.org/resources is a Snappages-hosted menu page in the main nav.
/resources: (a) has clear title/description distinct from the subdomain, (b) noindexs if it's truly just a redirect menu, OR has unique value if it stays indexed. Two indexable pages with the word "resources" on the same root domain is keyword cannibalization waiting to happen.app.christchurchmiami.org Cloudflare Pages app, ~2 days live · 3 critical · 4 high · 5 medium
Critical issues 3
Build output contains zero files matching sitemap*. No reference in templates.
christchurchmiami.org (URL-prefix property) does NOT cover the app. subdomain — needs a separate property AND a separate sitemap. Without one, Googlebot crawls only what it stumbles on via outbound links._build/sitemap.xml at build time. Include: /, /devotionals/, /bible-reading-plan/, plus per-sermon /{slug}/devotionals/, /{slug}/resources/, /{slug}/group/. Set <lastmod> to service date (or build date for evergreen). Add sitemap pointer in robots.txt. Register app.christchurchmiami.org as a separate URL-prefix property in GSC and submit sitemap.Cloudflare Pages will return 404 for /robots.txt. Google tolerates this, but you lose the ability to (a) declare sitemap location, (b) block crawl traps, (c) signal intent to AI crawlers (GPTBot, ClaudeBot, PerplexityBot). For Ad Grant eligibility, Google specifically wants to verify the site is open to indexing.
_build/robots.txt:User-agent: *
Allow: /
Sitemap: https://app.christchurchmiami.org/sitemap.xmlVerified live 2026-05-09: Request to https://app.christchurchmiami.org/devotionals/ returns a 30x redirect to https://app.christchurchmiami.org/devotionals. The HTML at the redirect target ships <link rel="canonical" href="https://app.christchurchmiami.org/devotionals/"> — pointing back to the URL it just redirected away from.
index.html is trailing slash; pick that (it's the standard for static sites). Update _redirects to NOT redirect /devotionals/. If keeping the no-slash version, update HTML canonical to match served URL.High-priority 4
Only the 5 devotional files (4 dated + rotating root) ship structured data. Resources pages, group pages, bible-reading-plan, and homepage have no schema at all.
/resources/ is the highest-intent SEO surface (search query: "Christchurch Miami sermon resources" / "[sermon title] study guide") and has zero schema.• Homepage: Organization (or Church) + WebSite with SearchAction. Avoid PCA references per workspace memory.
• Resources pages: Article (sermon-recap) + VideoObject referencing Subsplash media URL + BreadcrumbList. Use
og_image_url from sermon.json.• Group pages: Article with
articleSection: "Small Group Discussion" + BreadcrumbList. Optionally HowTo for the discussion steps.• Bible Reading Plan: CreativeWork or Course with
hasPart listing the 354 readings.All 15 pages have <meta name="twitter:card" content="summary_large_image"> but no twitter:title, twitter:description, or twitter:image. Twitter falls back to og:* if available — works for dated devotional, resources, group pages. But homepage and bible-reading-plan have no og:image.
og:image, og:image:width/height/alt to homepage and bible-reading-plan templates. Homepage uses generic Christchurch-branded image (gold-on-black brand mark per reference_ccm_brand_palette); bible-reading-plan uses plan-specific cover. Then either add explicit twitter:image/title/description matching og:* OR rely on og:* fallback.Homepage hero displays the May 3 sermon and H1 reads "Don't All Religions Lead to God?" — same H1 as the May 3 dated resources/devotional/group pages. Four pages on the same domain with the same H1.
fonts.googleapis.com + use.typekit.net both rel="stylesheet" in <head>. Both render-blocking from third-party origins. preconnect helps; the stylesheet itself blocks first paint.
/theme/fonts/, swap to @font-face with font-display: swap) or async-load Typekit with media="print" onload="this.media='all'" trick.Medium-priority 5
Every page: alt="Christchurch Miami" on header logo image (which links to christchurchmiami.org).
alt="Christchurch Miami — home". Communicates link destination to assistive tech and search.sermon.json includes hero_image_url (1920×692) but resources/group templates don't render it. Only devotional cards inside body show images.
<img> with 1920×692 in resources/group hero block, descriptive alt including sermon title + scripture ref. Use loading="eager" and fetchpriority="high" since it's the LCP candidate.Page has 354+ outbound links to bible.com/bible/59/.../ESV. Each carries target="_blank" rel="noopener". Page content (chapter labels) is thin between links.
5/3 devotional body text: *The name of the LORD is a strong tower...* renders as literal asterisks because body is HTML-escaped. Template's render_paragraphs filter doesn't convert markdown emphasis.
render_paragraphs to convert single-asterisk pairs to <em> and double to <strong>. Or strip them._redirects uses 302 for sermon-bare-slug → /devotionals/ canonicalization. 302 is "temporary" — Google may not pass PageRank.
/today as 302 (it IS temporary by design).resources.christchurchmiami.org SermonShots subdomain · deprecated 2026-05-07 · sunset path, not optimization
Status: Per workspace memory and live verification of the main site nav, this subdomain is no longer linked from christchurchmiami.org. The "Sermon Resources" nav item now points at app.christchurchmiami.org/{slug}/resources/. The subdomain DNS is still pointed at SermonShots — content is likely still live and indexed.
Recommended path: Soft-sunset with platform-side 301. Do not just unpoint DNS — link equity from main-site legal pages plus any external backlinks would be lost. A 301 transfers it; a 404 burns it.
Live checks Jeff should run (~5 min via Chrome MCP)
| URL | What to look for |
|---|---|
https://resources.christchurchmiami.org/ | 200/301/404? View-source for <meta name="robots"> and canonical |
/robots.txt | Disallow rules, Sitemap line |
/sitemap.xml | URL count — proxy for indexed-content surface |
/devotional and /sermon | Are SermonShots Shareable Page paths still serving content? |
site:resources.christchurchmiami.org in Google | True indexed-page count |
| GSC (admin@christchurchmiami.org) | Add subdomain as property if not already; pull Pages report for authoritative indexed-list |
URL mapping for 301
| Old (resources.cm) | New (app.cm) | Notes |
|---|---|---|
/ | https://app.christchurchmiami.org/ | Root → root |
/{sermon-slug} | https://app.christchurchmiami.org/{sermon-slug}/devotionals | Devotionals = closest semantic match to a SermonShots Shareable Page |
/devotional | /today | The /today route already auto-redirects to current week's devotional |
/sermon | https://christchurchmiami.org/sermons | Subsplash sermons hub |
| Anything else (404 today) | https://app.christchurchmiami.org/ | Catch-all |
If SermonShots support won't add per-path 301s, fall back to a single root 301 from resources.christchurchmiami.org/* → app.christchurchmiami.org/. That preserves ~80% of the link equity and is a one-ticket ask. Reference account: av@christchurchmiami.org.
Cleanup checklist
- Open SermonShots support ticket for site-wide 301 with the URL mapping above.
- Update legal pages —
legal-pages/privacy-policy.html:140andterms-of-use.html:111,134. Replaceresources.christchurchmiami.orgwithapp.christchurchmiami.organd reword the SermonShots vendor disclosure (SermonShots still processes data even if public surface moves). - Update workspace memory —
CLAUDE.mdSermonSend row,reference_ccm_subdomain_platform_mapping,sermonsend-weekly-refreshskill smoke-test. - Add subdomain as separate GSC property for 30 days to monitor 301 transfer.
- +90 days: DNS cutover decision. Recommend leaving SermonShots A/CNAME pointed (free, harmless) unless subdomain is needed for something else. Cost zero, breakage risk if you unpoint is non-zero.
Comparative SEO scorecard CCM vs. Christ Journey · Christ Fellowship Miami · Granada Church · Old Cutler Presbyterian
Comparative matrix (1 = poor, 5 = excellent)
| Dimension | CCM | CJ | CFM | GC | OCPC |
|---|---|---|---|---|---|
| Technical foundation | 4 | 4 | 4 | 3 | 3 |
| On-page SEO (titles/meta) | 5 | 4 | 5 | 2 | 3 |
| Local SEO signals | 4 | 4 | 5 | 3 | 4 |
| Content depth (sermons + blog) | 4 | 5 | 4 | 2 | 2 |
| AI / GEO readiness | 5 | 3 | 3 | 2 | 3 |
| Internal linking / hubs | 4 | 4 | 5 | 3 | 2 |
| Conversion paths | 4 | 5 | 4 | 3 | 3 |
| Mobile / SSL | 5 | 5 | 5 | 4 | 4 |
| Aggregate | 35 | 34 | 35 | 22 | 24 |
CCM is currently tied at the top with the two largest peer sites — but for very different reasons: CFM/CJ win on volume + multi-campus mass; CCM wins on schema craft + per-page SEO discipline. CCM gets there with a much smaller surface area.
Per-site quick profiles
Christchurch Miami (CCM)
Wins: Best-in-class on-page craft — keyword-loaded titles ("Church in Kendall FL 33156"), structured data ahead of every peer, two-audience blog strategy, recently-deployed sermon-resource app on its own subdomain.
Weakness: Smallest content library by raw volume. Single location vs. multi-campus competitors who get free local SEO from each campus page.
Christ Journey (CJ)
Wins: Largest indexed content library — blog, messages archive, message-series archive, two-campus permalinks, Rock RMS-powered Connect Card. Separate Plan-Your-Visit pages for in-person and online.
Weakness: Schema/GEO craft trails CCM. Default WordPress schema rather than purpose-built JSON-LD. Voice feels older-megachurch in some pages.
Christ Fellowship Miami (CFM)
Wins: Most aggressive local SEO — every neighborhood (Doral, Palmetto Bay, West Kendall, Redland, Downtown, Coral Gables) has its own indexed campus page. "Sermons by Book of the Bible" topical hub. 100+ year history positioning.
Weakness: Title-keyword stuffing reads as spammy to humans. Blog content depth lighter than the campus-page mass would suggest.
Granada Church (GC)
Wins: Distinctive "I'm New" page voice — most human-feeling first-visit page in the set. Trilingual (English + Spanish + Portuguese) is unique.
Weakness: Lowest content depth. No real blog. Weak structured data. Site feels like a 2018 WordPress build that hasn't been re-platformed.
Old Cutler Presbyterian (OCPC)
Wins: Cleanest theological prose in the set — "Beliefs" page is the best-written PCA-distinctives page, would feed an LLM cleanly. Reformed identity is unambiguous.
Weakness: Split-domain architecture (ocpc.org + ocpc.life) fragments link equity. No blog. Sermon archive hard to find. CCM's direct denominational peer but the weakest SEO competitor.
Wins for CCM to copy
| Tactic | From | Why it works | CCM action |
|---|---|---|---|
| Sermons-by-Book-of-the-Bible hub | CFM | Captures long-tail Bible-reference search; creates 66 evergreen topical hubs | Build /sermons/book/{book} indexes at app.cm as content fills in |
| Separate Plan-Your-Visit pages: in-person vs. online | CJ | Two intents = two pages = two ranking surfaces | Add /watch-online distinct from /new |
| First-person "Everyone Belongs Here" voice on /new | GC | Most human-feeling first-visit page; dress-code clarity + "personal guide" offer reduces visit friction | Add explicit dress-code paragraph, parking-by-name, "request a personal guide" form to /new |
Standalone /beliefs page as coherent doctrinal essay | OCPC | Best LLM-ingestible "what does this church believe?" prose in the set | Consolidate beliefs into one /beliefs page with full doctrinal treatment, not bullets |
| Connect Card on owned subdomain | CJ (rock.christjourney.org) | Custom subdomain = brand control + analytics ownership vs. churchcenter.com redirect | Move Connect Card to a CCM-owned URL even if Subsplash is the form behind it |
| Baptism as named monthly CTA | CJ | Recurring conversion event that's genuinely informative, not promotional | Add baptism page with next 3 dates, schema as Event |
| Multi-language permalink lanes | GC, CFM | Each language is a separate ranking surface | Productize Spanish as /es/ lanes — full landing pages, not just translated YouTube descriptions |
Gaps CCM should close
- Raw content volume. CJ has years of WordPress posts indexed. CCM's blog cadence is weekly but the archive is shallow. Backfill 8-12 evergreen pillar posts ("What is reformed theology?", "What to expect at a Presbyterian church in Miami") that don't depend on the weekly sermon pipeline.
- Multi-location signal. CFM and CJ get free local SEO from multiple campus pages. CCM has one location but can mimic via neighborhood landing pages —
/kendall,/pinecrest,/coral-gables-area— that contextualize CCM for nearby ZIPs without claiming campuses. - Sermon archive UX. CFM's "by series" + "by book of the Bible" dual-axis browsing beats CCM's flat
/servicesarchive. Once app.christchurchmiami.org content fills in, prioritize topical browsing over chronological. - Online-campus identity. CJ treats "Church Online" as a first-class campus with its own Plan-Your-Visit page. CCM's livestream is strong but doesn't have a dedicated landing surface optimized for "watch [city] church online" queries.
- Spanish web presence (not just video). All Spanish content lives in YouTube descriptions and HeyGen translations. None is indexed as Spanish HTML. GC and CFM both have Spanish web lanes.
- No public-facing FAQ page. FAQ schema embedded in blog posts but no dedicated
/faqto capture "is christchurch miami catholic?" / "what time is christchurch miami service?" type queries.
CCM's distinctive moats verified, not flattering
11-entity JSON-LD @graph per blog post
None of the four peers' blog posts (where they exist) show this depth. CJ blog posts return as default WP content; OCPC has no blog; GC has minimal schema; CFM blog posts don't surface FAQ/HowTo signals.
Two-audience parallel blog strategy
SermonSend seeker page + Subsplash new-Christian blog. None of the peers run two separate blog lanes for two audience archetypes from one sermon.
Per-sermon four-surface app subdomain
app.christchurchmiami.org Phase 1 — dedicated four-surface sermon resource app on its own subdomain is more sophisticated than anything peers have. None ship per-sermon resource hubs with daily devotionals + Bible study + group materials.
Daily-devotional drumbeat
5 Mon-Fri PNGs per sermon, IG Story + page-embedded. None of the peers ship per-sermon daily devotional cards as a recurring asset class.
Unified analytics pipeline
GA4 + GSC + Subsplash + PCO + Mailchimp + YouTube + GMB unified into a live dashboard. Consultancy-grade analytics tooling that none of the four peer churches appear to have. Moat for decision speed even though invisible to Google.
Speed of iteration
CCM ships weekly. CFM/CJ feel like quarterly-update sites. GC and OCPC feel annual. Cadence compounds.
Google Ad Grant readiness
Per workspace memory, CCM is in Phase 0 of the Ad Grant application. Below is a fast scorecard of the requirements Google's nonprofit reviewer pulls when validating the site.
AI visibility / GEO scorecard How well does CCM appear in ChatGPT / Claude / Perplexity / Gemini / Google AI Overviews?
What's working
- 11-entity @graph on recent blog posts — verified in 5/3 and 5/6 source. Includes BlogPosting, Article, FAQPage, HowTo, Person (author), Church, ItemList (series), VideoObject, BreadcrumbList, WebPage with SpeakableSpecification, plus mentions of named historical figures (Bruce Metzger, F.F. Bruce) with sameAs Wikipedia links.
- SpeakableSpecification with
cssSelector: [".tldr", "h2", "details summary"]well-tuned for assistant readouts. - Q&A entries written conversationally, in the form models actually quote. 6-11 FAQ entries per post.
- Field Devotions
CreativeWorkSeries+articleSectioncorrectly groups Drake's deployed-pastor posts as a distinct content cluster. - Pastor-authored leaner @graph follows the locked workspace pattern (drop Jeff/theChurch.digital/Care, lean 6 entities).
What's missing
- Homepage WebSite node with potentialAction SearchAction — entry point Google and Bing use to render the sitelinks search box.
- Homepage Church / LocalBusiness schema — confirmed live: homepage doesn't ship structured data. NAP is in footer text but not in JSON-LD where LLMs preferentially read.
- Organization / Church
knowsAboutarray — adding 8-12 topical strings ("Christian apologetics in Miami," "Reformed theology in Kendall," "biblical counseling for Miami families," watching the no-public-PCA rule) materially helps entity coverage. /leadershipPerson entities — should ship Person for James Drake (Lead Pastor), Heidi Drake (Kids Director), Kent Keller, named elders, with sameAs to LinkedIn/social. Currently Person entities exist only on blog posts mentioning specific people.- app.christchurchmiami.org pages with NO schema — Resources, Group, Bible-Reading-Plan, Homepage. Highest-intent SEO surfaces with zero structured data.
- No dedicated /faq — answer-engine queries like "is christchurch miami catholic?" or "what time is christchurch miami service?" go unanswered with no rich snippet eligibility.
How an LLM would currently answer "What does Christchurch Miami believe?"
30 / 60 / 90-day remediation plan
Sequenced for compounding effect — fixes that unlock other fixes go first.
Stop the bleeding
- Add
robots.txt+sitemap.xmltoapp.christchurchmiami.orgbuild - Register
app.christchurchmiami.orgas separate GSC property; submit sitemap - Fix or 301
/en-espanol404 on main site - Open SermonShots support ticket for
resources.cmsite-wide 301 - Decide trailing-slash policy on app subdomain; align
_redirects+ canonicals - Update legal pages to remove resources.cm references
Land the schema gaps
- Add JSON-LD to
app.christchurchmiami.orgresources, group, bible-reading-plan, homepage - Stable homepage H1 on app subdomain (not sermon-of-week)
- Add og:image + twitter:image to app homepage and bible-reading-plan
- Add
/sermons-and-blogshub to main-site primary nav - Replace generic blog index meta description with blog-specific copy
- Convert
/givingredirect into a real landing page with body content - Fix og:image protocol mismatch on Snappages blog posts (open ticket)
Fill the static-page gap
- Run April-audit Table 3 against
/about-us,/new,/leadership,/kids,/youth,/groups— title, meta, canonical, OG, alt text - Add Person schema to
/leadershipfor staff in CLAUDE.md - Add WebSite + Church @graph to homepage with
knowsAbout+potentialAction - Audit blog tag taxonomy; cap to ~25 high-value tags
- Self-host fonts on app subdomain (or async-load Typekit)
- Update
_redirects302 → 301 on permanent sermon redirects - Build
/beliefsas a coherent doctrinal essay (OCPC pattern)
Compete on volume + bilingual
- Backfill 11-entity @graph on top 10 highest-traffic legacy blog posts (pull from GSC)
- Build neighborhood landing pages (
/kendall,/pinecrest) for local SEO - Productize Spanish as
/es/indexed HTML lanes — homepage, /new, /about, weekly sermon - Build dedicated
/faqpage with FAQPage schema - Add
/watch-onlineas distinct landing surface from/new - Add Subsplash schema once API credentials land (sermon MediaItems → BroadcastEvent)
- Submit Ad Grant application (presuming 0-7 + 7-30 items closed)
The bold strategic recommendation If only one thing happens in 90 days, do this
Ship the "Miami Reformed Hub" content cluster on app.christchurchmiami.org
Target the denominational + geographic search space the peer set is collectively ignoring. Specifically: 30 evergreen pillar pages at /learn/ covering "What is reformed theology?", "Reformed vs. Baptist," "Infant baptism explained," "What is the Westminster Confession?", "Presbyterian churches near Miami," "What to expect at a Presbyterian service" — each 1500+ words, full JSON-LD Article + FAQPage + BreadcrumbList schema, internal-linked into a topical cluster, EN + ES versions.
Each page links into the weekly sermon pages (which already have superior schema), creating a topical-authority flywheel between evergreen learn-content and weekly sermon-content.
Why this beats the peer set in 90 days: OCPC is the only direct denominational peer and has no blog — they will not contest this space. CJ, CFM, GC are all non-PCA or PCA-adjacent — they have no incentive to build PCA-specific content. Google's answer-engine surfaces (AI Overviews, Gemini) are starved for well-schemaed Reformed-explainer content from a real Miami PCA church. This pairs CCM's existing schema craft (its #1 moat) with the only thing it lacks vs. peers (content volume), aimed at search territory where no peer can credibly out-rank it.