HomeWorkJournalAboutReach Out
Journal/Growth Playbook
Growth Playbook

Technical SEO untuk Next.js & React: Checklist Implementation 2026

Technical SEO checklist comprehensive untuk Next.js dan React. 32-item implementation guide dengan code example, plus prayamudya.id case study sebagai reference.

Praya MudyaPraya Mudya2 Juli 202613 min read
Technical SEO untuk Next.js & React: Checklist Implementation 2026

Sebelum masuk ke detail, ini ringkasan singkat artikel.

  • Next.js dan React punya nuance technical SEO yang beda dari traditional WordPress atau static HTML. SSR, SSG, dan hydration strategy impact crawlability dan ranking.
  • Checklist 32-item ini cover 5 area kritis yaitu rendering strategy (6 item), metadata + schema (8 item), core web vitals (7 item), URL + routing (6 item), dan dev workflow (5 item).
  • Next.js 15 dengan App Router (released 2024) introduce new pattern yaitu generateMetadata, params Promise, sitemap.js dinamis yang relevant untuk SEO modern.
  • prayamudya.id sebagai reference case study yaitu built dengan Next.js 15 + Sanity CMS, deployed ke Vercel, dengan technical SEO checklist applied selama 3 bulan pengembangan.
  • Mistake paling sering yaitu confuse Server Component vs Client Component impact untuk SEO, plus hydration mismatch yang block proper indexation.

Selama membangun prayamudya.id selama 3 bulan terakhir (Next.js 15 + Sanity CMS + Vercel), saya navigate technical SEO nuance yang spesifik untuk modern React stack. Beberapa decision yang work, beberapa yang lesson learned. Artikel ini share checklist comprehensive 32-item yang practitioner bisa pakai sebagai reference, dengan code example dan honest acknowledgment apa yang work atau ga di context prayamudya.id case study. Audience target yaitu developer + technical SEO practitioner.

Section 1, Rendering Strategy (6 item)

Rendering strategy decision impact crawlability fundamental. Salah pilih strategy berarti Google ga bisa crawl content kamu proper.

Item 1.1, Default ke Server Component (App Router)

Next.js 15 App Router default component yaitu Server Component. Critical untuk SEO karena HTML rendered di server, langsung crawlable.

Implementation guideline.

  • Default semua component sebagai Server Component kecuali butuh interactivity.
  • Pakai "use client" directive HANYA kalau butuh useState, useEffect, atau event handler.
  • Wrap interactive part di Client Component yang isolated, sisanya tetap Server.
  • Test via View Source di browser yaitu HTML harus contain content, bukan empty div.

Item 1.2, Static Site Generation untuk Content Static

Content yang ga sering berubah (blog post, about page, service page) ideal pakai SSG via generateStaticParams.

Code pattern.

  • Export generateStaticParams() di dynamic route untuk pre-render semua possible path.
  • Combine dengan revalidate untuk Incremental Static Regeneration.
  • Build time cost trade off dengan runtime performance gain.

Item 1.3, ISR untuk Content Semi-Dynamic

Incremental Static Regeneration ideal untuk content yang update kadang-kadang (blog post baru, product price, etc).

Implementation di prayamudya.id.

  • Journal article pakai revalidate 60 detik. Update di Sanity reflect di production dalam 1 menit.
  • Homepage pakai revalidate 300 detik karena update less frequent.
  • Service pages pakai revalidate 3600 detik (1 jam) karena change rarely.

Item 1.4, Avoid Pure Client-Side Rendering

Component yang fully Client-Side Rendered (CSR) butuh JavaScript execution sebelum content visible. Bad untuk SEO karena Googlebot ga always execute JS proper.

Red flag yang harus dihindari.

  • useEffect untuk fetch data critical (title, description, main content).
  • Conditional rendering yang depend on client-side state untuk main content.
  • Loading skeleton tanpa fallback HTML yang static.

Item 1.5, Streaming dengan Suspense untuk Performance

Suspense boundary kasih ability stream HTML progressively. Improve perceived performance + Core Web Vitals.

Pattern yang work.

  • Wrap data fetching yang heavy di Suspense.
  • Provide loading.js untuk page-level loading state.
  • Combine dengan Server Component untuk maximum benefit.

Item 1.6, Hydration Mismatch Prevention

Hydration mismatch error block React proper hydration, impact interactivity + sometimes SEO.

Common causes hydration mismatch.

  • Date formatting yang depend on locale (server vs client locale berbeda).
  • Conditional rendering berdasarkan window object yang ga available di server.
  • Random ID generation tanpa stable key.

Solution.

  • Pakai suppressHydrationWarning untuk specific component yang intentional mismatch.
  • useEffect untuk client-only logic yang ga critical.
  • Stable ID generation pakai useId() hook.

Section 2, Metadata + Schema (8 item)

Metadata adalah signal paling fundamental ke Google. Next.js 15 generateMetadata function powerful tapi punya quirk.

Item 2.1, generateMetadata di Setiap Page

Async function generateMetadata kasih flexibility full untuk dynamic metadata.

Pattern yang ideal di App Router.

  • Export generateMetadata sebagai async function di setiap page.tsx atau page.js.
  • Return object dengan title, description, openGraph, twitter, alternates.
  • Pakai await untuk fetch data yang needed untuk metadata.

Lesson dari prayamudya.id.

  • Page-level metadata override layout.js openGraph completely. Jangan rely on layout untuk page-specific og:image.
  • Setiap page harus declare openGraph image specifically.

Item 2.2, Dynamic OG Image Generation

Next.js 15 support dynamic OG image via opengraph-image.tsx file.

Implementation di prayamudya.id.

  • Setiap journal article punya opengraph-image.tsx yang generate branded design.
  • Pakai ImageResponse dari next/og.
  • Include article title + author + brand element di image.
  • Font loading dari Vercel Edge requires fetch dari URL, bukan fs.readFileSync.

Item 2.3, Canonical URL Setup

Canonical tag critical untuk avoid duplicate content issue.

Pattern di metadata.

  • Setiap page declare alternates.canonical di metadata.
  • Pakai absolute URL, bukan relative.
  • Cross-domain canonical kalau content same di multiple domain.

Item 2.4, JSON-LD Schema Markup

Schema markup via JSON-LD adalah preferred format untuk Google + best untuk GEO/AI search.

Schema yang must-have di prayamudya.id.

  • Person schema untuk founder/author identity.
  • Organization schema untuk brand entity.
  • Article + BlogPosting schema untuk journal artikel.
  • BreadcrumbList schema untuk navigation context.
  • Service schema untuk service page (consultant offering).
  • FAQPage schema untuk artikel yang punya FAQ section.

Implementation pattern.

  • Render JSON-LD via Script component dari next/script.
  • Type "application/ld+json".
  • Strategy "beforeInteractive" untuk crucial schema.

Item 2.5, Robots.txt Configuration

Robots.txt control crawler access. Next.js 15 generate dinamis via robots.js atau static di public/.

Best practice.

  • Allow semua user agent ke main path.
  • Disallow /api/, /_next/, dan path internal.
  • Sitemap declaration di robots.txt.
  • Tested via Google Search Console Robots tester.

Item 2.6, Sitemap Dynamic dari Data Source

Sitemap dinamis dari CMS adalah game-changer untuk content site.

Implementation di prayamudya.id.

  • Pakai src/app/sitemap.js (App Router pattern).
  • Fetch dari Sanity via sanityFetch helper untuk semua journal article.
  • Auto-update setiap kali artikel baru published, tanpa manual edit.
  • Include lastModified dari Sanity _updatedAt field.

Item 2.7, Twitter Card + Open Graph Complete

Social media preview impact click-through dari shared link.

Required field.

  • og:title, og:description, og:image, og:url.
  • og:type yang appropriate (website, article, profile).
  • twitter:card "summary_large_image" untuk article.
  • og:image:alt untuk accessibility + context.

Item 2.8, hreflang untuk Multi-language (optional)

Kalau site bilingual atau multi-language, hreflang mandatory.

Implementation pattern.

  • Alternates.languages di metadata dengan locale code (id-ID, en-US).
  • Reciprocal yaitu page A reference page B, page B reference page A.
  • x-default untuk fallback language.

Section 3, Core Web Vitals (7 item)

Core Web Vitals adalah ranking factor sejak 2021. Next.js + React stack punya optimization opportunity specific.

Item 3.1, Image Optimization via next/image

Component next/image handle responsive image, lazy loading, format conversion otomatis.

Best practice di prayamudya.id.

  • Always pakai next/image, jangan native img tag.
  • Specify width + height untuk avoid layout shift.
  • priority={true} untuk above-fold image.
  • Format AVIF + WebP otomatis via Next.js.

Item 3.2, Font Loading Optimization

Font loading impact CLS dan LCP signifikan.

Pattern via next/font.

  • Pakai next/font/google atau next/font/local.
  • display: 'swap' untuk avoid FOIT.
  • Preload critical font weight.
  • Self-host dari /public/fonts/ untuk performance + privacy.

Lesson di prayamudya.id.

  • Custom font (Fraunces italic accent) loaded dari public/fonts/ via URL fetch, bukan fs.readFileSync.
  • Vercel serverless ga support fs.readFileSync untuk font.

Item 3.3, JavaScript Bundle Size

Bundle size impact First Input Delay (FID) dan Interaction to Next Paint (INP).

Reduction tactic.

  • Dynamic import via next/dynamic untuk component heavy.
  • Tree-shaking otomatis di Next.js production build.
  • Avoid full library import (lodash, date-fns) untuk single function.
  • Analyze via @next/bundle-analyzer di development.

Item 3.4, CSS Strategy

CSS strategy impact rendering speed.

Best practice.

  • CSS Modules untuk component-scoped style.
  • Tailwind CSS untuk utility-first (well-optimized di Next.js).
  • Avoid CSS-in-JS yang runtime-heavy (styled-components, emotion) untuk SEO-critical page.
  • Critical CSS auto-inline by Next.js production build.

Item 3.5, LCP Optimization

Largest Contentful Paint adalah Core Web Vital yang paling impact ranking.

Tactic optimize LCP.

  • Identify LCP element (biasanya hero image atau heading).
  • priority={true} untuk LCP image.
  • Server-side render LCP content (avoid client fetch).
  • Preload critical resource via Link rel="preload".

Target.

  • LCP di bawah 2.5 detik untuk pass Core Web Vital.
  • prayamudya.id LCP saat ini 1.2 detik mobile, 0.8 detik desktop.

Item 3.6, CLS Prevention

Cumulative Layout Shift ganggu user experience + ranking.

Prevention tactic.

  • Specify width + height untuk semua image.
  • Reserve space untuk dynamic content (ads, embed).
  • Avoid inject content above existing content (ga shift dari atas).
  • Font loading dengan display: swap dan fallback font yang match metric.

Item 3.7, INP (Interaction to Next Paint)

INP replaced FID sebagai Core Web Vital di Maret 2024.

Optimization tactic.

  • Avoid long task di main thread.
  • Web Worker untuk heavy computation.
  • Debounce event handler yang fire frequent.
  • Optimize React render dengan useMemo dan React.memo untuk component expensive.
Checklist ini saya pakai untuk audit Next.js sites client GoesDigital, plus reference saat bangun prayamudya.id. Kalau kamu butuh technical SEO audit untuk Next.js site kamu, schedule chemistry call gratis untuk diskusi specific issue.

Section 4, URL + Routing (6 item)

URL structure dan routing impact crawlability fundamental. App Router introduce pattern baru yang harus di-handle proper.

Item 4.1, Clean URL Structure

URL bersih + descriptive support SEO dan UX.

Best practice.

  • Pakai hyphen, bukan underscore.
  • Short (di bawah 60 character).
  • Include primary keyword.
  • Lowercase consistent.
  • Avoid stop word (a, the, and).

Pattern di prayamudya.id.

  • /journal/growth-playbook/article-slug.
  • /performance-marketing-consultant (service page).
  • /work/case-study-slug.

Item 4.2, Dynamic Route Handling

Dynamic route via [slug] folder pattern di App Router.

Implementation.

  • Pakai [slug]/page.js untuk dynamic segment.
  • Pakai [...slug]/page.js untuk catch-all.
  • Combine dengan generateStaticParams untuk pre-generate semua path.

Item 4.3, params Promise di Next.js 15

Critical lesson dari migration prayamudya.id ke Next.js 15 yaitu params jadi Promise yang harus di-await.

Pattern yang correct.

  • Async page component yang await params sebelum destructure.
  • Same pattern untuk searchParams.

Pattern yang error-prone (Next.js 14 pattern).

  • Destructure params langsung tanpa await akan throw error di Next.js 15.

Item 4.4, 404 Page yang Handle Properly

404 page critical untuk user experience + SEO.

Best practice.

  • Custom not-found.js di App Router.
  • Include navigation back ke main page.
  • Status code 404 properly return (not 200).
  • Helpful message + suggested action.

Item 4.5, Redirect Handling

Redirect impact link equity transfer.

Implementation.

  • 301 redirect untuk permanent move via next.config.js redirects.
  • 307/308 redirect untuk temporary.
  • Avoid redirect chain (A to B to C). Direct redirect (A to C).
  • Test via curl atau Screaming Frog.

Item 4.6, Internal Linking Strategy

Internal linking distribute authority dan support crawlability.

Best practice.

  • Pakai next/link untuk client-side navigation.
  • prefetch={true} default untuk above-fold link.
  • Internal link dari pillar ke cluster article.
  • Maximum 3 click depth dari homepage ke any page.

Section 5, Dev Workflow (5 item)

Workflow discipline support consistent SEO quality di production.

Item 5.1, Pre-Production SEO Check

Catch issue sebelum push ke production.

Tooling yang work.

  • Lighthouse di Chrome DevTools untuk per-page audit.
  • @next/eslint-plugin-next untuk SEO-related linting.
  • Manual check di staging environment sebelum prod deploy.

Item 5.2, Continuous Monitoring

Post-deploy monitoring catch issue yang lolos dari pre-prod check.

Tools yang dipakai.

  • Google Search Console untuk index status + Core Web Vitals.
  • Vercel Analytics untuk real user metric.
  • Plausible atau GA4 untuk traffic + behavior.
  • Sentry untuk error tracking yang impact UX.

Item 5.3, Schema Validation Automation

Schema invalid silently break rich result eligibility.

Process.

  • Schema.org Validator manual check pas deploy major change.
  • Google Rich Results Test untuk specific schema type.
  • CI/CD integration via Schema.org API kalau scope memungkinkan.

Item 5.4, Performance Budget di CI/CD

Performance budget prevent regression di production.

Implementation.

  • Lighthouse CI di GitHub Actions atau Vercel pipeline.
  • Set threshold yaitu LCP under 2.5s, INP under 200ms, CLS under 0.1.
  • Block deploy kalau threshold exceeded (atau warning only).

Item 5.5, Documentation Internal

Knowledge transfer pas tim grow atau ada developer turnover.

Yang harus di-document.

  • Rendering strategy decision per route (SSR, SSG, ISR).
  • Schema markup pattern + JSON-LD template.
  • Performance budget + Core Web Vitals target.
  • Deployment + redirect history.

prayamudya.id Case Study Reference

Quick recap technical stack + result.

Stack technical.

  • Next.js 15 dengan App Router.
  • Sanity CMS untuk content management.
  • Tailwind CSS v4 untuk styling.
  • Deployed di Vercel dengan Edge functions untuk OG image.
  • CSS Modules per component untuk styling specific.

Result selama 3 bulan development.

  • Core Web Vitals semua pass yaitu LCP 1.2s, INP 120ms, CLS 0.02.
  • SEO score Lighthouse 100/100 untuk semua main page.
  • GEO/AI search ranking established untuk niche keyword.
  • Currently ranking Top 10 di Google untuk "performance marketing consultant", "seo consultant jakarta", "marketing consultant jakarta".

Key technical lesson learned.

  • Next.js 15 params Promise breaking change butuh migration effort.
  • Vercel Edge functions ga support fs.readFileSync untuk font.
  • Sanity Studio writes immediate to production via same Sanity Cloud.
  • Inline style ga support media query, butuh CSS class + style block.

Technical SEO untuk Next.js + React adalah area yang require continuous learning karena framework evolve cepat. 32-item checklist ini bukan exhaustive, tapi cover area paling kritis yang impact ranking dan user experience. Practitioner yang serius improve technical SEO worth invest 2-3 hari untuk audit comprehensive pakai checklist ini. Kalau kamu butuh second opinion atau professional audit, mari schedule chemistry call.


→ Schedule technical SEO audit

FAQ

1. Apakah Next.js automatically baik untuk SEO?

Iya untuk default Server Component (App Router) dan SSG/ISR. Tapi developer masih bisa break SEO via wrong pattern yaitu over-use Client Component, ignore metadata, atau skip Core Web Vitals optimization. Checklist ini help avoid common pitfall.

2. Pages Router vs App Router, mana yang better untuk SEO?

Both work, dengan pattern berbeda. App Router (default di Next.js 13+) lebih modern dengan Server Component native dan metadata API yang flexible. Pages Router masih supported tapi less feature di Next.js 15. Untuk project baru, App Router recommended.

3. Apakah React tanpa Next.js bisa SEO-friendly?

Bisa, tapi butuh extra effort. Pakai library seperti Vite + react-router + manual SSR setup, atau Remix, atau static site generator. Trade-off yaitu lebih effort untuk match feature Next.js out-of-box.

4. Berapa lama implementation 32-item checklist ini?

2-4 minggu untuk project medium-size yang baseline udah okay. 6-8 minggu untuk full audit + remediation untuk site established. Spread effort across phase yaitu rendering strategy + metadata first (highest impact), kemudian Core Web Vitals + URL routing, finally dev workflow.

5. Apakah perlu hire technical SEO specialist atau developer biasa cukup?

Developer dengan SEO awareness bisa execute most checklist. Specialist worth hire untuk audit comprehensive atau site dengan complexity tinggi (e-commerce, marketplace, multi-language). Cost specialist Rp 8-25 juta untuk audit project, ROI typically dalam 6-12 bulan dari improved ranking.

Continue Reading

More from Growth Playbook

Marketing Funnel D2C Indonesia: Kenapa AARRR Kalahkan Awareness-First (2026)
Growth Playbook

Marketing Funnel D2C Indonesia: Kenapa AARRR Kalahkan Awareness-First (2026)

Funnel D2C Indonesia 2026 pakai pirate funnel AARRR, bukan awareness-first. Orang beli karena butuh dan ada bukti, bukan karena brand. Plus WhatsApp lifecycle, marketplace, dan pola COD.

11 min read
GEO Optimization untuk Indonesia: Strategi AI Search yang Practical (2026)
Growth Playbook

GEO Optimization untuk Indonesia: Strategi AI Search yang Practical (2026)

Practical implementation guide GEO untuk Indonesia. Step-by-step optimasi konten muncul di ChatGPT, Perplexity, Gemini, Google AI Overview. Plus measurement framework.

12 min read
Cara Setup Pixel + Conversion API Meta untuk iOS 14.5+ (Implementation Guide 2026)
Growth Playbook

Cara Setup Pixel + Conversion API Meta untuk iOS 14.5+ (Implementation Guide 2026)

Step-by-step setup Meta Pixel + Conversion API untuk recover attribution iOS 14.5 plus era. Implementation guide dengan code snippet, deduplication setup, dan troubleshooting.

11 min read
← Back to Journal