Technical SEO is the foundation everything else sits on. You can publish excellent content and build strong backlinks, but if Google cannot crawl and index your pages correctly, none of it matters. Here is the complete technical SEO checklist for SaaS products in 2026, including Next.js-specific considerations and the most common mistakes I see shipped to production.
Crawlability
robots.txt tells search engines which pages to crawl. The most common SaaS mistake: a robots.txt designed to block the staging environment gets deployed to production. This happens because the robots.txt is committed to the repo with Disallow: / and nobody updates it before deploying to the live domain.
Check your live robots.txt right now: https://yourdomain.com/robots.txt. It should allow crawling of your public pages. At minimum:
User-agent: *
Allow: /
Disallow: /api/
Disallow: /admin/
Sitemap: https://yourdomain.com/sitemap.xml
XML sitemap lists every URL you want indexed. Submit it to Google Search Console under "Sitemaps." Include all public pages — blog posts, landing pages, feature pages — and exclude authenticated pages, API endpoints, and internal tools.
Check that your sitemap updates automatically when you add new pages. In Next.js 15, the generateSitemap function in app/sitemap.ts handles this dynamically.
Indexability
Canonical tags tell Google which version of a URL is the "real" one when the same content appears at multiple URLs. SaaS products commonly have duplicate content from:
- Paginated listing pages (
/blog,/blog?page=2) - URL parameters (
/pricing?ref=hn,/pricing?plan=annual) - Trailing slash variations (
/featuresvs/features/)
Set canonical tags to point to the clean, parameter-free URL. In Next.js, use the alternates.canonical field in the metadata export:
export const metadata = {
alternates: {
canonical: "https://yourdomain.com/features",
},
};
noindex tells Google not to index a page. Use it on pages that should not appear in search results: internal admin pages, thank-you pages after form submission, search results pages, duplicate content pages. Never put noindex on pages you want to rank.
The dangerous mistake: setting noindex in a meta tag during development and not removing it before launch. This silently prevents indexing with no error message — Google just quietly ignores the page.
Page Speed and Core Web Vitals
Google uses Core Web Vitals as a ranking signal. The three metrics:
LCP (Largest Contentful Paint): How long until the main content is visible. Target: under 2.5 seconds. Usually caused by unoptimized hero images, slow server response, or render-blocking resources. Fix: serve images in WebP format, use next/image with proper priority on above-the-fold images, enable caching headers.
INP (Interaction to Next Paint): How fast the page responds to user interactions. Target: under 200ms. Usually caused by heavy JavaScript on the main thread. Fix: reduce bundle size, defer non-critical JavaScript, avoid long tasks.
CLS (Cumulative Layout Shift): How much the layout shifts unexpectedly while loading. Target: under 0.1. Usually caused by images without dimensions, ads, or embeds that push content down. Fix: always set width and height on images, reserve space for dynamic content.
Measure these with PageSpeed Insights (free, Google's own tool) or Lighthouse in Chrome DevTools. Test your real URLs, not a local build.
Structured Data
Structured data (JSON-LD schema markup) helps Google understand what your page is about and can enable rich results in search — star ratings, FAQs, pricing, and more.
For SaaS, three schemas matter:
SoftwareApplication schema on your homepage or product pages. Tells Google your site is a software product, includes the category, operating system, and price.
Organization schema on your homepage. Establishes your brand in Google's knowledge graph — company name, URL, logo, social profiles. This helps Google associate all mentions of your brand correctly.
FAQ schema on any page with a question-and-answer format. FAQ schema can show expandable Q&As directly in search results, increasing click-through rate without changing your ranking. Add it to pricing pages, product pages, and blog posts with a FAQ section.
In Next.js, inject JSON-LD via a script tag in your page component or layout:
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "SoftwareApplication",
name: "Zlyqor",
applicationCategory: "BusinessApplication",
offers: {
"@type": "Offer",
price: "0",
priceCurrency: "USD",
},
}),
}}
/>
Internal Linking: Pillar-Cluster Model
Internal links tell Google which pages are most important and how they relate to each other. The pillar-cluster model works like this:
A pillar page is a comprehensive overview of a broad topic (e.g., "Project Management Software"). It links to cluster pages that cover specific subtopics in depth (e.g., "How to Set Project Deadlines," "Agile vs Waterfall for Small Teams"). Cluster pages link back to the pillar.
This structure signals to Google that the pillar page is authoritative on the broad topic, while cluster pages signal depth on the specific angles. Both types of pages rank better together than they would in isolation.
In practice: every new blog post should link to at least two existing related posts. Every pillar page should link to all its cluster pages. The home page should link to your most important pillar pages.
HTTPS and Security Headers
HTTPS is a baseline ranking signal — HTTP pages rank lower. If you are still on HTTP in 2026, that is the first thing to fix.
Beyond HTTPS, security headers affect trust signals. The headers that matter for SEO (indirectly, through trust):
Strict-Transport-Security(HSTS): forces HTTPSX-Content-Type-Options: prevents MIME-type sniffingX-Frame-Options: prevents clickjacking
These are set in your Next.js next.config.ts under headers().
Next.js-Specific Advantages
Next.js has built-in SEO advantages over client-rendered React apps:
Static export: Pages exported as static HTML are fully crawlable without JavaScript. For marketing pages, blog posts, and documentation, static rendering is the correct default. output: 'export' in next.config.ts generates static files.
Metadata API: The export const metadata pattern in App Router generates correct <title>, <meta name="description">, Open Graph, and Twitter Card tags without a separate library.
generateSitemap: The sitemap.ts file in the app directory generates a dynamic XML sitemap that updates automatically as you add pages, including blog posts pulled from a database or CMS.
Image optimization: next/image automatically converts images to WebP, sets correct dimensions, and adds lazy loading. This directly improves LCP and CLS.
Common Mistakes That Ship to Production
- Staging robots.txt deployed to production (blocks all crawling)
- Missing canonical tags on paginated pages (duplicate content penalty)
- URL parameter duplicates not handled (
?ref=,?source=) generating hundreds of duplicate pages - noindex meta tags left on after launch (silent indexing failure)
- Images without dimensions causing CLS on every page load
- No sitemap submitted to Search Console (Google may still find pages but indexing is slower)
- JavaScript-rendered content only — Googlebot may not execute complex JavaScript, so key content disappears from its perspective
Run a crawl with Screaming Frog (free up to 500 URLs) or Ahrefs Site Audit to catch these before they compound.
Keep Reading
- The LLM SEO Guide for 2026 — how AI changes what Google ranks
- Google AI Overviews SEO Guide — getting cited in AI-generated search answers
- Link Building for SaaS 2026 — earn backlinks that improve your authority
Pristren builds AI-powered software for teams. Zlyqor is our all-in-one workspace — chat, projects, time tracking, AI meeting summaries, and invoicing — in one tool. Try it free.