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

123 lines
4.9 KiB
Markdown

# 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.
## Recommended Execution Order
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