All posts
nextjs
seo
checklist

The Complete Next.js SEO Checklist (2026)

Every SEO check your Next.js app needs before production. Title tags, meta descriptions, og:image, JSON-LD, sitemap, robots.txt, and canonical URLs.

February 9, 20268 min
TL;DR

15 SEO rules every Next.js app must pass before production — from title tags and og:images to JSON-LD and robots.txt. Automate all of them with a single npx indxel check --ci command in your build pipeline.

You shipped your Next.js app. Traffic is growing. Then you notice: Google is showing a truncated title. Your og:image returns 404. Three pages have duplicate H1 tags. And nobody told you.

SEO breaks silently. Here is every check your Next.js app needs before — and after — every deploy.

1. Title tag (50-60 characters)

Every page needs a unique title. Keep it under 60 characters to avoid truncation in search results. Use Next.js generateMetadata() or Indxel's createMetadata() to enforce this.

// app/pricing/page.tsx
export function generateMetadata() {
  return createMetadata({
    title: 'Pricing — Simple plans for every team',
    description: 'Start free. Upgrade when you need more.',
    path: '/pricing',
  }, seoConfig)
}

2. Meta description (120-160 characters)

Write a compelling description that includes your primary keyword. This is your ad copy in search results. Too short and Google may rewrite it. Too long and it gets truncated.

3. Open Graph image

Every page needs an og:image that loads correctly (200 status). Use 1200x630 for optimal rendering on social platforms. Test by pasting your URL in the Twitter card validator or LinkedIn post inspector.

4. Canonical URL

Set a canonical URL on every page to avoid duplicate content issues. In Next.js, use the alternates property in your metadata. Always use absolute URLs.

5. JSON-LD structured data

Add at least one JSON-LD block per page. For your homepage: Organization + SoftwareApplication. For blog posts: Article. For pricing: FAQPage. Google uses this for rich results.

import { generateLD } from 'indxel'

const articleLD = generateLD('Article', {
  headline: post.title,
  datePublished: post.publishedAt,
  author: { name: 'Indxel', url: 'https://indxel.com' },
})

6. Sitemap.xml

Export a sitemap() function from app/sitemap.ts. Include every public URL. Exclude /api/, /auth/, /dashboard/. Update it when you add new pages. Submit it to Google Search Console.

7. Robots.txt

Export a robots() function from app/robots.ts. Allow all public paths. Disallow /api/, /auth/, /dashboard/. Explicitly allow AI bots (GPTBot, ClaudeBot, PerplexityBot) for GEO.

8. H1 tag — one per page

Every page should have exactly one H1 tag. Multiple H1s confuse search engines about the page's main topic. Zero H1s means missing semantic structure.

9. Viewport meta tag

Next.js handles this through the viewport export in your root layout. Make sure it's set to width=device-width, initial-scale=1.

10. Favicon

Include favicon.ico and apple-touch-icon.png. Set them in your root layout metadata. Missing favicons look unprofessional in browser tabs and bookmarks.

11. Twitter card

Set the twitter:card to summary_large_image for most pages. This gives you maximum visual real estate when someone shares your URL on Twitter/X.

12. Hreflang alternates

If your site is in one language, add a self-referencing hreflang. For multi-language sites, link all language versions together. Use the alternates metadata property.

13. Robots directives

Make sure you're not accidentally noindexing pages. Check for noindex in your metadata. A common mistake: setting noindex in development and forgetting to remove it.

14. No duplicate titles or descriptions

Cross-page analysis: every page should have a unique title and description. Duplicate metadata confuses search engines about which page to rank. Use npx indxel crawl to find duplicates.

15. Asset verification

Your og:image, favicon, and other referenced assets must return 200. A 404 og:image means no preview image on social platforms. Run npx indxel crawl --push to catch broken assets.

Automate it

Don't check all this manually. Add npx indxel check --ci to your build command. Every deploy gets audited against all 15 rules. Score drops below 90? Build fails. SEO regressions never reach production again.

$ npx indxel check --ci
✓ 44/47 pages pass
✗ /blog/new-post — Missing meta description
✗ /pricing — og:image returns 404
Score: 91/100 (A)