<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: J-Christophe C.</title>
    <description>The latest articles on Forem by J-Christophe C. (@jchristophe_c_a97ec1e82).</description>
    <link>https://forem.com/jchristophe_c_a97ec1e82</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3820489%2Ffe298cb4-3a2f-4ec8-927f-eeb8bf134f7c.jpg</url>
      <title>Forem: J-Christophe C.</title>
      <link>https://forem.com/jchristophe_c_a97ec1e82</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jchristophe_c_a97ec1e82"/>
    <language>en</language>
    <item>
      <title>How we built a 1,250-page SEO architecture with Next.js</title>
      <dc:creator>J-Christophe C.</dc:creator>
      <pubDate>Thu, 12 Mar 2026 13:49:13 +0000</pubDate>
      <link>https://forem.com/jchristophe_c_a97ec1e82/how-we-built-a-1250-page-seo-architecture-with-nextjs-pdb</link>
      <guid>https://forem.com/jchristophe_c_a97ec1e82/how-we-built-a-1250-page-seo-architecture-with-nextjs-pdb</guid>
      <description>&lt;p&gt;Late 2025, we decided to rebuild our agency website from scratch. Not a theme swap. A full structural rebuild designed for SEO at scale.&lt;/p&gt;

&lt;p&gt;The result: 1,250 pages, 7 semantic silos, 676 programmatic pages, and a performance-first stack. Here's the technical breakdown.&lt;/p&gt;

&lt;p&gt;Why we left WordPress&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;We needed a stack that could generate 1,000+ static pages at build time with zero runtime overhead.&lt;/p&gt;

&lt;p&gt;Our SEO silo architecture&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Programmatic pages&lt;br&gt;
The biggest scale lever: programmatic content generation. We built 7 TypeScript template files that generate pages by combining professions, cities, and project types.&lt;/p&gt;

&lt;p&gt;silo-creation-metier.ts: 128 pages for "website creation for [profession]"&lt;br&gt;
silo-pages-locales.ts: 200 pages crossing cities × professions&lt;br&gt;
silo-seo-metier.ts: 109 pages for "SEO for [profession]"&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;Internal linking strategy&lt;br&gt;
Every article contains a minimum of 3 contextual internal links. We enforce a 70/30 ratio: 70% intra-silo links, 30% cross-silo links.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Next.js and performance&lt;br&gt;
The stack: Next.js 14+ (App Router), TypeScript, Tailwind CSS, Framer Motion.&lt;/p&gt;

&lt;p&gt;Key technical decisions:&lt;/p&gt;

&lt;p&gt;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.&lt;br&gt;
TypeScript-first: All articles are strictly typed. A malformed article fails at compile time, not in production.&lt;br&gt;
WebP images: All 1,914 blog images converted to WebP. Target: &amp;lt; 150KB per image.&lt;br&gt;
Font preloading: Plus Jakarta Sans + Space Grotesk loaded via next/font with display: swap.&lt;br&gt;
Lazy animations: Framer Motion components loaded only when visible to avoid TBT impact.&lt;br&gt;
Lighthouse targets: 80+ performance, 90+ SEO, 90+ accessibility across all pages.&lt;/p&gt;

&lt;p&gt;Publication pipeline&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;function isPublished(article: BlogArticle): boolean {&lt;br&gt;
  if (!article.status || article.status === "published") return true;&lt;br&gt;
  if (article.status === "scheduled" &amp;amp;&amp;amp; article.publishDate) {&lt;br&gt;
    return new Date(article.publishDate) &amp;lt;= new Date();&lt;br&gt;
  }&lt;br&gt;
  return false;&lt;br&gt;
}&lt;br&gt;
What we learned&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;Full case study: &lt;a href="https://clickzou.fr/refonte-site-clickzou-architecture-seo-1250-pages-nextjs" rel="noopener noreferrer"&gt;https://clickzou.fr/refonte-site-clickzou-architecture-seo-1250-pages-nextjs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>seo</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
