Late 2025, we decided to rebuild our agency website from scratch. Not a theme swap. A full structural rebuild designed for SEO at scale.
The result: 1,250 pages, 7 semantic silos, 676 programmatic pages, and a performance-first stack. Here's the technical breakdown.
Why we left WordPress
Our WordPress site worked, but it couldn't scale. Load times exceeded 3 seconds. Lighthouse scores were poor. Adding hundreds of long-tail pages required plugins on top of plugins. And the SEO architecture was nonexistent — no silos, random internal linking, unoptimized URLs.
We needed a stack that could generate 1,000+ static pages at build time with zero runtime overhead.
Our SEO silo architecture
We structured the site into 7 semantic silos, each with a pillar page and satellite articles. The silos cover our core business verticals: web creation, redesign, SEO, Google Ads, local SEO, agency pages, and SEO tools.
Each silo follows a strict hierarchy: pillar page → satellite articles → programmatic pages. Internal links flow upward (satellites → pillar) and laterally (satellite → satellite), creating topical authority clusters.
Programmatic pages
The biggest scale lever: programmatic content generation. We built 7 TypeScript template files that generate pages by combining professions, cities, and project types.
silo-creation-metier.ts: 128 pages for "website creation for [profession]"
silo-pages-locales.ts: 200 pages crossing cities × professions
silo-seo-metier.ts: 109 pages for "SEO for [profession]"
Total: 676 programmatic pages, each with unique structured data, internal links to its silo pillar, and adapted CTAs. All generated at build time via SSG.
Internal linking strategy
Every article contains a minimum of 3 contextual internal links. We enforce a 70/30 ratio: 70% intra-silo links, 30% cross-silo links.
To manage this at scale, each article has a relatedSlugs field — an array of exactly 3 slugs that generate related article cards at the bottom of the page. Automated, consistent, maintainable.
Next.js and performance
The stack: Next.js 14+ (App Router), TypeScript, Tailwind CSS, Framer Motion.
Key technical decisions:
SSG everywhere: Every page is pre-rendered at build time. The dynamic route [slug]/page.tsx serves all 1,200+ articles from a single component.
TypeScript-first: All articles are strictly typed. A malformed article fails at compile time, not in production.
WebP images: All 1,914 blog images converted to WebP. Target: < 150KB per image.
Font preloading: Plus Jakarta Sans + Space Grotesk loaded via next/font with display: swap.
Lazy animations: Framer Motion components loaded only when visible to avoid TBT impact.
Lighthouse targets: 80+ performance, 90+ SEO, 90+ accessibility across all pages.
Publication pipeline
We implemented a 3-status publication system: draft → scheduled → published. Articles are filtered at build time — drafts and future-scheduled content never reaches the production bundle.
function isPublished(article: BlogArticle): boolean {
if (!article.status || article.status === "published") return true;
if (article.status === "scheduled" && article.publishDate) {
return new Date(article.publishDate) <= new Date();
}
return false;
}
What we learned
Building a 1,250-page SEO ecosystem taught us that information architecture matters more than any single technical optimization. Programmatic content is an underused lever. And internal linking at scale requires automation — manual linking doesn't survive past 100 pages.
Full case study: https://clickzou.fr/refonte-site-clickzou-architecture-seo-1250-pages-nextjs
Top comments (0)