Files
kmtnflower/seo_plan.md
T
2026-07-04 21:24:05 +00:00

4.9 KiB

SEO Plan for KMountain Flower Radio

Objective

Improve crawlability, indexability, and ranking quality for a JavaScript-rendered Angular site where core content is loaded after app bootstrap.

Current Baseline

  • The app is client-rendered Angular (no SSR/prerender in current build pipeline).
  • Nginx serves SPA fallback routes to index.html.
  • Initial HTML is a minimal shell and most meaningful content is populated after JavaScript executes and API calls complete.
  • Route-specific SEO metadata is not currently implemented (title updates are global/dynamic only).
  • robots.txt and sitemap.xml are not currently present in public assets.

Target Outcomes

  • Reliable indexing of all public routes.
  • Better SERP snippets and relevance for branded and non-branded queries.
  • Less dependence on crawler JavaScript/render budget.

Priority 1 (High Impact, Low Risk)

1) Add robots.txt

  • Allow crawling of public pages.
  • Block sensitive/admin/auth endpoints if needed.
  • Add a sitemap reference.

2) Add sitemap.xml

  • Include canonical URLs for:
    • /
    • /about
    • /schedule
    • /events
    • /contact
  • Keep lastmod values updated during deploys.
  • Submit sitemap in Google Search Console and Bing Webmaster Tools.

3) Implement route-level metadata

  • Set unique title and meta description per public route.
  • Add canonical tags per route.
  • Add Open Graph and Twitter card defaults plus per-route overrides.
  • Mark login/admin routes as noindex.

4) Strengthen crawl path discovery

  • Keep static crawlable links to all public pages in global navigation/footer.
  • Ensure key public routes are linked from multiple relevant pages.

5) Add structured data

  • Add Organization schema site-wide.
  • Add Event schema for upcoming events content.
  • Include station identity fields consistently (name, URL, logo, contact where appropriate).

Priority 2 (Bigger Lift, Larger Upside)

6) Introduce prerender or SSR for public routes

  • Preferred first step: prerender static public routes.
  • Alternative: full SSR if dynamic metadata/content requires runtime generation.
  • Goal: deliver meaningful HTML to crawlers before JS execution.

7) Ensure metadata appears in initial HTML

  • Validate title/description/canonical in rendered source for each route.
  • Ensure each route has a clear H1 and meaningful introductory text in server-delivered HTML.

8) Keep baseline content available without API dependence

  • Include useful fallback content for core sections (home/about/schedule/events intros).
  • Treat API-loaded content as enhancement rather than sole source of indexable copy.

Priority 3 (Quality + Ranking Support)

9) Improve Core Web Vitals

  • Optimize home LCP image and dimensions.
  • Defer non-critical work below the fold.
  • Reduce layout shifts around async content blocks.

10) Expand internal linking depth

  • Add contextual links between About, Schedule, Events, and Contact pages.
  • Use descriptive anchor text aligned with user intent.

11) Media SEO pass

  • Keep decorative images with empty alt attributes.
  • Add descriptive alt text for content-bearing images.

Implementation Notes for This Repo

  • Place robots.txt and sitemap.xml in public assets so they are copied to build output.
  • Keep SPA fallback behavior in Nginx; SEO assets still resolve directly.
  • Use a centralized route-to-metadata mapping to avoid duplicate/incorrect canonical logic.

Measurement Plan

Week 1 Baseline

  • Capture Search Console index coverage and excluded reasons.
  • Record impressions/clicks for branded and local intent queries.
  • Run Lighthouse on all public routes.

Weeks 2-3 (after Priority 1)

  • Validate robots.txt and sitemap accessibility.
  • Validate route metadata and canonical correctness.
  • Track indexed-page growth and snippet quality.

Weeks 4-8 (after Priority 2)

  • Compare crawl stats and indexing completeness before/after prerender or SSR.
  • Track ranking movement for schedule/events/community-intent terms.
  • Validate rich result eligibility for structured data.

Acceptance Criteria

  • robots.txt and sitemap.xml are live and valid.
  • All public routes have unique title, description, and canonical.
  • Public routes are indexable and admin/login are noindex.
  • Search Console shows healthy discovery/indexing across primary routes.
  • Public pages render useful content for crawlers without relying solely on JS.

Risks and Mitigations

  • Risk: JS render delays cause partial indexing.
    • Mitigation: prerender/SSR and stronger baseline HTML.
  • Risk: API issues reduce crawler-visible content.
    • Mitigation: robust fallback copy and error handling.
  • Risk: canonical misconfiguration causes duplicate indexing.
    • Mitigation: centralized canonical helper + validation checks.
  1. robots.txt + sitemap.xml
  2. route-level metadata and canonicals
  3. structured data (Organization + Event)
  4. prerender for public routes
  5. performance and internal-linking refinement