SEO landing page
Apply to public routes only (not app shell behind login). This skill is the entry point for marketing-page SEO.
Deep dives:
Per-page metadata
- Unique
<title> (50–60 chars), meta description (150–160 chars).
og:title, og:description, og:image (1200×630), twitter:card.
- Canonical URL when duplicates exist.
- One clear
h1; logical h2/h3 hierarchy (no skipped levels for styling).
Content
- Primary keyword in
h1 and first paragraph naturally — no stuffing.
- Internal links to product, pricing, docs where relevant.
- Alt text on meaningful images.
Technical
- Semantic HTML:
header, main, footer, article.
- Fast LCP: optimize hero image (WebP, dimensions, lazy below fold).
/sitemap.xml and /robots.txt for indexable sites.
json-ld Organization or WebSite on homepage when appropriate.
SPA metadata
Vite + React SPAs render an empty shell by default. For each public route, either:
- Set
<title> and meta tags via React 19's built-in tags (or react-helmet-async on older versions), OR
- Use a pre-render/SSG step so crawlers see populated HTML.
Verify with curl -A "Googlebot" https://example.com/ | grep -i '<title' — title must be present in the raw HTML.
Avoid
- Duplicate titles across routes.
h1 hidden for SEO only.
- Blocking render with huge unoptimized assets.
Deliverable
When auditing, return a table: URL | issue | fix priority (high/medium/low).
Source: charanjit-singh/lovable-skills — distributed by TomeVault.
1---2name: charanjit-singh-lovable-skills-seo-landing-page3description: SEO landing page4---56# SEO landing page78Apply to **public** routes only (not app shell behind login). This skill is the **entry point** for marketing-page SEO.910Deep dives:1112- [`seo-meta-tags-spa`](../seo-meta-tags-spa/) — per-route titles, OG, canonicals in a SPA13- [`seo-structured-data`](../seo-structured-data/) — Schema.org JSON-LD14- [`seo-ssr-and-prerendering`](../seo-ssr-and-prerendering/) — populated HTML for crawlers15- [`seo-sitemap-generation`](../seo-sitemap-generation/) — `sitemap.xml` + `robots.txt`16- [`seo-core-web-vitals`](../seo-core-web-vitals/) — LCP, INP, CLS17- [`programmatic-seo-pages`](../programmatic-seo-pages/) — templates at scale1819## Per-page metadata2021- Unique `<title>` (50–60 chars), meta description (150–160 chars).22- `og:title`, `og:description`, `og:image` (1200×630), `twitter:card`.23- Canonical URL when duplicates exist.24- One clear `h1`; logical `h2`/`h3` hierarchy (no skipped levels for styling).2526## Content2728- Primary keyword in `h1` and first paragraph naturally — no stuffing.29- Internal links to product, pricing, docs where relevant.30- Alt text on meaningful images.3132## Technical3334- Semantic HTML: `header`, `main`, `footer`, `article`.35- Fast LCP: optimize hero image (WebP, dimensions, lazy below fold).36- `/sitemap.xml` and `/robots.txt` for indexable sites.37- `json-ld` `Organization` or `WebSite` on homepage when appropriate.3839## SPA metadata4041Vite + React SPAs render an empty shell by default. For each public route, either:4243- Set `<title>` and meta tags via React 19's built-in tags (or `react-helmet-async` on older versions), OR44- Use a pre-render/SSG step so crawlers see populated HTML.4546Verify with `curl -A "Googlebot" https://example.com/ | grep -i '<title'` — title must be present in the raw HTML.4748## Avoid4950- Duplicate titles across routes.51- `h1` hidden for SEO only.52- Blocking render with huge unoptimized assets.5354## Deliverable5556When auditing, return a table: URL | issue | fix priority (high/medium/low).5758---59> Source: [charanjit-singh/lovable-skills](https://github.com/charanjit-singh/lovable-skills) — distributed by [TomeVault](https://tomevault.io).60<!-- tomevault:4.0:skill_md:2026-06-15 -->