123 lines
4.9 KiB
Markdown
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
|