The Complete Next.js SEO Checklist for Business Websites
Next.js App Router is one of the most SEO-friendly frameworks available — but only if you use it correctly. This checklist covers everything we implement on every Softotic client website, from basic metadata to advanced structured data.
✅ 1. Metadata API (App Router)
Use Next.js's typed Metadata API — never inject tags manually in __INLINE_CODE_0__.
export const metadata: Metadata = {
title: {
default: "Softotic | Enterprise Software",
template: "%s | Softotic",
},
description: "Your concise page description here.",
alternates: { canonical: "https://example.com/page" },
openGraph: {
title: "Page Title | Softotic",
description: "...",
images: [{ url: "/og-image.jpg", width: 1200, height: 630 }],
},
};Checklist:
- □Title template set at root layout
- □Unique description per page (150–160 chars)
- □Canonical URL on every page
- □OpenGraph title, description, image
- □Twitter card metadata
- □__INLINE_CODE_0__ meta respects __INLINE_CODE_1__ flags
✅ 2. Structured Data (JSON-LD)
Google uses JSON-LD to understand your site and generate rich results.
Must-implement schemas:
- Organization — sitewide in root layout
- WebSite with SearchAction — sitewide
- Service — on every service page
- Article — on every blog post
- BreadcrumbList — on all detail pages
- Review/AggregateRating — on testimonials page
// Inject in <head> via dangerouslySetInnerHTML
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>✅ 3. Sitemap.xml (Auto-Generated)
Use __INLINE_CODE_0__ to auto-generate from your data sources:
export default function sitemap(): MetadataRoute.Sitemap {
// Include all static + dynamic routes
return [...staticRoutes, ...serviceRoutes, ...blogRoutes];
}Verify your sitemap is submitted in Google Search Console.
✅ 4. Robots.txt
// app/robots.ts
export default function robots(): MetadataRoute.Robots {
return {
rules: [{ userAgent: "*", allow: "/", disallow: "/_next/" }],
sitemap: "https://www.softotic.com/sitemap.xml",
};
}✅ 5. Core Web Vitals
LCP (Largest Contentful Paint):
- Use __INLINE_CODE_0__ for all images with correct __INLINE_CODE_1__ and __INLINE_CODE_2__ on above-fold images.
- Server-side render above-fold content (avoid loading spinners at top).
CLS (Cumulative Layout Shift):
- Set explicit __INLINE_CODE_0__ and __INLINE_CODE_1__ on all images.
- Avoid inserting content above existing content dynamically.
- Use __INLINE_CODE_0__ on web fonts.
INP (Interaction to Next Paint):
- Minimise main-thread blocking JS.
- Use __INLINE_CODE_0__ imports with __INLINE_CODE_1__ for heavy client components.
✅ 6. Rendering Strategy by Route
Choose the right rendering mode per route:
| Route type | Strategy |
|---|---|
| Home, About | SSG (static) |
| Services, Industries | SSG with __INLINE_CODE_0__ |
| Blog posts | ISR (__INLINE_CODE_0__) |
| Sitemap | ISR |
✅ 7. Internal Linking
Every detail page should link to:
- Related services
- Related case studies
- Related blog posts
This distributes PageRank and helps Googlebot discover all pages.
✅ 8. Semantic HTML
- One __INLINE_CODE_0__ per page.
- Heading hierarchy: h1 → h2 → h3.
- Use __INLINE_CODE_0__, __INLINE_CODE_1__, __INLINE_CODE_2__, __INLINE_CODE_3__, __INLINE_CODE_4__ semantically.
- __INLINE_CODE_0__ text on every image.
✅ 9. Page Speed
Tools to validate: Lighthouse, PageSpeed Insights, WebPageTest.
Targets:
- LCP: < 2.5s
- CLS: < 0.1
- INP: < 200ms
- Lighthouse performance: > 90
Summary
SEO in Next.js App Router is excellent out of the box — but it requires deliberate configuration. Work through this checklist for every new page and route you add.
Need an SEO-optimised website built? Contact Softotic.