# Technical SEO checklist for SaaS websites

Source: https://www.fixreports.com/blog/technical-seo-checklist-saas

Updated 2026-10-26

Technical SEO for a SaaS company is mostly about separation and rendering. Separation, because one domain usually holds a marketing site that should rank, documentation that should rank, and an application that shouldn't be in search at all. Rendering, because SaaS sites are often built as JavaScript apps, and while Google renders JavaScript, many other crawlers, including most AI crawlers, don't. This checklist covers both, plus the usual foundations: canonicals, sitemaps, structured data, speed and how AI search engines reach your pages.

**Key points**

- Google crawls, renders and indexes JavaScript pages in separate phases and says server-side rendering or pre-rendering “is still a great idea” because not all bots can run JavaScript ([Google Search Central](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)).
- A December 2024 analysis found that none of the major AI crawlers, including GPTBot, ClaudeBot and PerplexityBot, rendered JavaScript ([Vercel](https://vercel.com/blog/the-rise-of-the-ai-crawler)).
- Google says AI Overviews and AI Mode have no extra technical requirements and need no special schema.org markup or AI text files ([Google Search Central](https://developers.google.com/search/docs/appearance/ai-features)).
- OpenAI uses OAI-SearchBot for ChatGPT search and GPTBot for model training; blocking GPTBot doesn't remove a site from ChatGPT search ([OpenAI](https://developers.openai.com/api/docs/bots)).
- Google-Extended controls whether Google may use content for Gemini training and doesn't affect inclusion in Google Search ([Google Search Central](https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers)).

## Should your app be in search results?

No. Application pages behind a login have nothing for searchers, and Googlebot doesn't sign in. The risk runs the other way: public URLs from the app, such as shared links, empty states, password reset pages and staging environments, can end up indexed and compete with your marketing pages.

- Serve the application on its own host, such as `app.example.com`, and send `X-Robots-Tag: noindex` on every response from it.
- Keep staging and preview environments out of search with authentication, which is more reliable than robots rules.
- Don't rely on robots.txt to remove pages from Google: a blocked URL can still be listed if it's linked from elsewhere, and Google can't see a noindex on a page it isn't allowed to crawl ([Google Search Central](https://developers.google.com/search/docs/crawling-indexing/block-indexing)).
- Login and sign-up pages are often searched by name (“yourproduct login”). Keeping them indexable helps existing customers find them; they shouldn't carry heavy marketing content.

Our [robots.txt checker](/robots-txt-checker) shows what each crawler may fetch, and the [meta tag checker](/meta-tag-checker) shows a page's robots meta tag and X-Robots-Tag header.

## Can search engines and AI crawlers read your marketing pages?

Check what a crawler receives before any JavaScript runs. If the HTML response of your pricing page has no prices and no headings, only a script tag, then crawlers that don't run JavaScript see an empty page.

- **Google** renders JavaScript with a recent Chromium, but rendering happens in a queue after crawling, and Google recommends server-side rendering or pre-rendering ([Google Search Central](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)).
- **AI crawlers**: Vercel's analysis of its network found that OpenAI's, Anthropic's, Perplexity's and Meta's crawlers fetched JavaScript files but didn't execute them; Gemini, which uses Google's infrastructure, and Applebot did render pages ([Vercel](https://vercel.com/blog/the-rise-of-the-ai-crawler)).
- **Link previews** in chat apps and social networks usually read only the server HTML, so titles, descriptions and Open Graph tags must be in it.

The practical fix is to render marketing pages, docs and the blog on the server or at build time, which frameworks such as Next.js, Nuxt and Astro support, and keep client-side rendering for the logged-in application. A quick test: run `curl` on your URL, or view the page source rather than the inspected DOM, and check that the text is there.

## What should the marketing site's structure look like?

SaaS buyers search with intent you can map to pages. Each of these deserves its own indexable page with a descriptive title and its own canonical URL:

- **Product and feature pages**, one per major capability.
- **Use-case and industry pages**, for searches such as “invoicing software for agencies”.
- **Integration pages**, one per integration, because people search for “[your product] + [their tool]”.
- **Pricing**, with the plans and prices in the HTML, not loaded from an API after render.
- **Comparison and alternative pages**, written fairly: competitors' prices and features change, so date them and keep them current.
- **Customer stories**, with permission and real, attributable details.

Avoid thin variations: dozens of near-identical “[feature] for [industry]” pages with swapped words are what Google's spam policies call scaled content abuse ([Google Search Central](https://developers.google.com/search/docs/essentials/spam-policies)).

## How should you handle docs, help centers and changelogs?

Documentation often brings more search traffic than the marketing site, because people search for how to do things.

- Make docs public and indexable unless they contain customer-specific information.
- For versioned docs, point the canonical of older versions to the current version of the same page, or mark old versions noindex, so search results show the current instructions.
- Give each doc page a descriptive title and H1 that match how people phrase the task (“Export invoices to CSV”), not internal feature names.
- Keep changelog entries on stable, dated URLs.
- Include docs in your XML sitemap, or give them a sitemap of their own listed in robots.txt.

If your help center runs on a third-party platform on a subdomain, check that it is verified in Search Console and that its pages link back to the main site.

## Which canonical, hreflang and redirect issues are common on SaaS sites?

- **Parameters**: UTM tags, referral codes and A/B test parameters create duplicate URLs. Every page should declare its own clean URL as canonical ([Google Search Central](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)).
- **Trailing slashes and case**: pick one form and redirect the other with a 301.
- **Localized pages**: if you translate the marketing site, link the language versions with hreflang, including a self-reference and an x-default ([Google Search Central](https://developers.google.com/search/docs/specialty/international/localized-versions)).
- **Rebrands and domain moves**: map old URLs to new ones one to one with 301 redirects; redirecting everything to the home page loses the value of the old pages.

The [SEO checker](/website-seo-checker) tests titles, H1s, canonicals and robots rules on the key pages of your site, and finds broken internal links.

## What structured data fits a SaaS site?

- **Organization** on the home page, with your name, URL, logo and `sameAs` links to official profiles.
- **WebSite** on the home page with `name` and `url`, which Google uses to choose the site name shown in results ([Google Search Central](https://developers.google.com/search/docs/appearance/site-names)).
- **SoftwareApplication**: Google's software app rich result requires a price and either an aggregate rating or a review ([Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/software-app)). Only add ratings that are genuine and visible on the page; without them, the markup still describes the product but won't earn the rich result.
- **BreadcrumbList** on docs and blog pages.
- **Article** on blog posts, with author and dates.

Don't expect FAQ markup to earn extra space: Google stopped showing FAQ rich results on 7 May 2026 ([Google Search Central](https://developers.google.com/search/updates)). The [structured data checker](/structured-data-checker) lists every item on a page and the properties Google requires for it.

## Why do SaaS marketing pages fail Core Web Vitals?

SaaS marketing sites tend to load many third-party scripts: analytics, tag managers, chat widgets, A/B testing, session recording and ad pixels. These delay the main content and keep the main thread busy, which shows up as a slow LCP and a poor INP.

- Audit every third-party script and remove those nobody uses.
- Load chat widgets on interaction, and avoid A/B testing scripts that hide the page until they run.
- Serve hero images and product screenshots at their displayed size, in WebP or AVIF, without lazy-loading the first one.
- Watch INP on pages with interactive pricing calculators and demos.

Google uses Core Web Vitals in its ranking systems, though relevance comes first ([Google Search Central](https://developers.google.com/search/docs/appearance/core-web-vitals)). The [speed test](/website-speed-test) measures a page as a throttled phone and shows real-user data when Google has it.

## How do AI search engines find and cite SaaS content?

There is no separate technical track for AI search, and some popular advice isn't supported by the companies running these systems.

- **Google AI Overviews and AI Mode** use pages that are indexed and eligible to show a snippet; Google says there are no additional requirements, no special schema and no need for AI text files ([Google Search Central](https://developers.google.com/search/docs/appearance/ai-features)).
- **ChatGPT search** relies on OAI-SearchBot. If you want to appear in ChatGPT's answers, don't block OAI-SearchBot in robots.txt; blocking GPTBot only opts out of training ([OpenAI](https://developers.openai.com/api/docs/bots)).
- **Gemini training** is controlled by the Google-Extended token, which doesn't affect Google Search ([Google Search Central](https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers)).
- **llms.txt** is a community proposal for a Markdown summary of a site. Google says it doesn't need such files; other AI services haven't documented whether they use them. It costs little to publish, but it isn't a substitute for crawlable pages.

What helps across all of them is the same: server-rendered pages, clear headings that answer the questions buyers ask, specific facts such as prices and limits in text, and pages that don't contradict each other.

## Frequently asked questions

### Should our docs be on a subdomain or a subfolder?

Both can rank. What matters more is that docs are crawlable, linked from the main site, included in a sitemap and verified in Search Console.

### Does Google index content in our JavaScript app?

Google can render JavaScript, but it does so in a separate step, and other crawlers often don't. For pages you want found, render the content on the server or at build time.

### Should we block AI crawlers?

It's a business decision. Blocking training crawlers such as GPTBot or Google-Extended keeps content out of model training without removing you from search; blocking search crawlers such as OAI-SearchBot removes you from that service's answers. The robots.txt checker shows what your current rules allow.

### Do we need SoftwareApplication markup?

It's optional. It describes your product to search engines; the software app rich result additionally needs genuine ratings or reviews shown on the page.

### What is the most common technical SEO mistake on SaaS sites?

Two do the most damage: marketing pages that render their content only with JavaScript, and staging or app URLs left open to indexing.

## Sources

- Google Search Central: [Understand JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)
- Google Search Central: [AI features and your website](https://developers.google.com/search/docs/appearance/ai-features)
- Google Search Central: [Google's common crawlers (Google-Extended)](https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers)
- Google Search Central: [Block search indexing with noindex](https://developers.google.com/search/docs/crawling-indexing/block-indexing)
- Google Search Central: [How to specify a canonical URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)
- Google Search Central: [Localized versions of your pages](https://developers.google.com/search/docs/specialty/international/localized-versions)
- Google Search Central: [Site names in Google Search](https://developers.google.com/search/docs/appearance/site-names)
- Google Search Central: [Software app structured data](https://developers.google.com/search/docs/appearance/structured-data/software-app)
- Google Search Central: [Understanding Core Web Vitals and Google search results](https://developers.google.com/search/docs/appearance/core-web-vitals)
- OpenAI: [Overview of OpenAI crawlers](https://developers.openai.com/api/docs/bots)
- Vercel: [The rise of the AI crawler](https://vercel.com/blog/the-rise-of-the-ai-crawler)
