Generate thousands of SEO pages from a CSV
Professional template built with Astro 5 + HTMX. Load your data, deploy to any static host. No WordPress, no database, no server.
- Pages generated
- 1k–100k+
- Build time
- <5 min
- Lighthouse SEO
- 100
- Hosting cost
- $0
Everything you need to ship a scalable SEO site
No shortcuts. Real schema.org markup, correct hreflang, auto sitemap, client search and HTMX filters.
Astro 5 + HTMX 2
100% static output. HTMX for interactivity without React or Vue. Deploys anywhere.
CSV or JSON
Edit a CSV in Excel or Google Sheets. Zod validation. No CMS, no DB.
Bilingual out of the box
/es/ and /en/ routes from commit one. Distinct slugs per language with automatic hreflang.
Search + facets
Client-side full-text search via MiniSearch. Category and tag filters pre-rendered as static HTMX fragments.
Production-ready SEO
Canonical, hreflang, OG, Twitter Card, JSON-LD per item, i18n sitemap. Lighthouse SEO 100.
Dark mode included
Toggle with localStorage persistence. Respects prefers-color-scheme. No flash on first load.
Tailwind CSS v4
Modern accessible design. OKLCH tokens. Rebrand by changing 10 CSS variables.
Type-safe end-to-end
Strict TypeScript, Zod schemas validate your CSV at build time. Clear errors before deploy.
Deploy anywhere
Vercel, Netlify, Cloudflare Pages, GitHub Pages, S3. No server runtime, no lock-in.
How it works
Three steps. No magic abstractions.
1. Edit your CSV
Open data/items.csv in Excel or Google Sheets. One row = one page. Per-language columns for title, description, category, tags.
2. Run npm run build
Astro generates static HTML for each item × language + paginated listings + facet pages + HTMX fragments + sitemap + search index.
3. Upload /dist
Drag-and-drop to Vercel or Netlify. Free hosting. Instant Google indexing.
vs WordPress programmatic SEO plugins
PageForge, MPG, Page Generator Pro charge $59–$199 per year. This is a one-time purchase.
| Programmatic SEO Starter | WordPress + pSEO plugin | |
|---|---|---|
| Price | One-time purchase | $59–$199 / year |
| Hosting | Static, $0 | WP hosting, $10–$50/mo |
| Speed | Lighthouse 100 | Lighthouse 50–80 typical |
| Language | Trilingual native | WPML add-on ($99/yr) |
| Data editor | CSV (Excel/Sheets) | WP admin |
| Customization | TS/Astro code | Shortcodes/PHP |
| Google's scaled-content policy | Aligned by design | Depends on plugin |
| Vendor lock-in | None | Plugin + WP |
Real use cases
Local directories
Pages for every service × city combo. "Plumbers in Madrid", "Dentists in Seville".
500 services × 50 cities = 25,000 pages
Product catalogs
One SEO page per product with price, schema.org Product, hreflang.
5,000 products × 2 languages = 10,000 pages
Comparisons
"X vs Y" pages for every pair of products or tools.
100 tools → 4,950 comparison pairs
Frequently asked questions
Will this trigger Google's scaled-content-abuse penalty?
Not by itself. Google's 2024+ policy penalizes thin, duplicative, low-value pages — not programmatic generation per se. This starter is built to stay on the right side: Zod validation rejects empty rows, every page has unique data per row (title, description, category, tags, image, price), schema.org JSON-LD per dataset type (Product/Recipe/LocalBusiness/Apartment/Article), BreadcrumbList JSON-LD, internal links from facet pages, real per-language translations, hreflang chain, Lighthouse 100. Your job: write ≥150 unique words per row, add editorial commentary to top pages, noindex thin facets (< 3 items). Full checklist in CONTENT.md.
How is this different from a free GitHub template?
Free templates give you structure. You pay here for: commercial license (unlimited client sites), 5 ready-to-use schema.org JSON-LD types, 6 data-source adapters (Sheets/Notion/Airtable/Sanity/Storyblok/local), 4 worked example datasets, real ES/EN/FR translations, Lighthouse 100/100/100/100 verified on production, CSV validation CLI, Vitest test suite, deploy configs for 5 hosts, AI-ready docs (CLAUDE.md, AGENTS.md, llms.txt), 12 months email support. Time saved: ~40-60 hours vs starting from a bare template.
Do I need to know how to code?
You need to edit files. For customizing design or logic, basic Astro/JavaScript knowledge helps. README includes step-by-step recipes.
Can I connect Google Sheets or Notion?
Yes. The data loader is modular. README documents how to switch the CSV source for a Sheets/Notion/Airtable/Sanity/Storyblok fetch via environment variables. No code change required.
How many pages can it generate?
Up to ~50k pages with reasonable build times (<10 min). Beyond that, migrate facets/pagination to a server endpoint with an adapter (Vercel, Cloudflare).
License?
Commercial license. Use on client sites, your own products, or to resell services. Cannot redistribute the codebase as a competing product.
Support?
Email + private repo access with changelog. Updates for at least 12 months.
What if Google deindexes my pages?
It's always about content thinness, never the tech stack. Read CONTENT.md: it has a self-audit checklist, anti-patterns to avoid, and a recovery plan if it already happened. Short version: noindex thin pages, add unique editorial content to top pages, prioritize quality over quantity (200 indexed pages are worth more than 20,000 deindexed ones).
Works with visual frameworks (Tailwind UI, Flowbite)?
Yes. Base design uses Tailwind CSS v4. Drop-in any Tailwind component library.
Get updates
Subscribe to our monthly newsletter. No spam.
By subscribing you agree to receive emails. Unsubscribe any time.