SEO for SaaS: what is different and what to do first
·4 min read
SaaS SEO is ordinary SEO with four complications. Your app and your marketing site share a domain, your marketing pages are often built with a JavaScript framework, your docs and changelog quietly become your biggest content library, and your best buyers search for comparisons and alternatives long before they search for broad category terms. Fix the technical split first, then chase bottom-of-funnel keywords, then get named when buyers ask ChatGPT which tool to use.
Our technical SEO checklist covers the fundamentals. This post covers only what changes when the product is software.
Keep the app out of the index
The logged-in app should not compete with your marketing site in search. Most SaaS sites leak /signup?plan=pro variants, /app/dashboard returning a 200 empty shell, or thousands of public share links.
Put the app on its own subdomain (app.example.com) or path prefix, then decide by URL type.
| URL type | What to do |
|---|---|
| Marketing pages, pricing, docs | Index, include in the sitemap |
| Login and signup | Index the plain URL once, canonicalize the variants with query strings |
| Authenticated app routes | Return 401 or redirect to login, never a 200 empty shell |
| Public share links (reports, boards) | noindex unless each one is a page you would want a stranger to land on |
A robots.txt disallow on /app/ stops crawling but does not remove URLs Google already found. Use noindex or a real auth response. The canonical tag guide covers the query string variants.
Render marketing pages on the server
Marketing sites built as single-page apps are the most common SaaS SEO failure I see. Google renders JavaScript, though rendering can lag behind crawling, per its own JavaScript SEO basics. Most AI crawlers fetch raw HTML and stop. If your pricing table, feature list or comparison copy only exists after hydration, ChatGPT and Perplexity see a page with a nav bar and nothing else.
Test it in one line:
curl -s https://example.com/pricing | grep -i "per month"No match means the price is client-rendered. Switch those routes to static or server rendering. The JavaScript SEO post walks through what each crawler runs.
Treat docs and the changelog as SEO pages
Docs answer the exact questions that evaluators type, such as "how to connect X to Slack" or "does X support SSO".
Three habits make docs pull their weight:
- Host them on your main domain or a subdomain you control, not a third-party docs host that adds its own branding and canonical tags.
- Give each page a title that matches the question, not the internal feature name. "Single sign-on with Okta" beats "Identity providers".
- Write a changelog entry for each real release, with a dated page and a plain sentence on what changed. It shows the product is alive.
Skip auto-generated API reference pages with no prose. They bloat the index.
Target bottom-of-funnel keywords before volume
Start with queries from people who are already shopping. A 20-page SaaS site should not be writing "what is project management" posts yet. Write these first:
- Alternatives pages. "[Competitor] alternatives", one page per competitor that your buyers actually consider.
- Comparison pages. "[You] vs [Competitor]", with a real feature table and an honest line on who should pick the other tool.
- Integration pages. "[Your category] for [tool they already use]", one page per integration that exists today.
- Use case pages. "[Category] for agencies" or "for remote teams", only where the product does something different for that group.
Search volumes here are small. As an illustrative example, a "vs" query with 90 searches a month can bring more trials than a 9,000-search definition query, because that person is deciding this week. Our SEO competitor analysis guide shows how to find which comparisons your market searches.
Be honest on comparison pages. One that claims you win every row reads as an ad.
Get recommended when buyers ask AI
Buyers ask ChatGPT "best CRM for a 10-person agency" and get a shortlist. Getting on it depends on two things you control and one you mostly do not.
You control crawler access. Check that robots.txt and your CDN bot protection let OAI-SearchBot, ClaudeBot and PerplexityBot fetch your marketing pages and docs. OpenAI documents its crawlers at developers.openai.com.
You control clarity. Your home page should say in one sentence what the product is, who it is for and what it costs to start. "The platform for modern teams" gives a model nothing to quote.
You mostly do not control third-party mentions. AI shortlists draw heavily on review sites, roundups and forum threads. The guide to getting mentioned by AI covers how to get onto them.
Google's own AI optimization guide says optimizing for its generative AI search is still SEO, and you need no special AI files or markup for it. ChatGPT adds utm_source=chatgpt.com to links it cites, so filter for it in analytics to see which pages earn those visits.
Check your SaaS marketing site
Our website check runs on your home page plus up to 2 more pages on the same origin, so pick the home page, pricing and your strongest comparison page. The default selection covers crawling and indexing, on-page SEO, structured data and content, and costs 67 credits for one page plus 47 per extra page. Add rendering and mobile to compare raw HTML against the rendered page with the AI crawler view, which catches the client-rendered pricing problem above.
You get one prioritized fix list and 0 to 100 scores for SEO readiness, AEO readiness and AI access. It does not read Search Console, track rankings or crawl every URL, so it will not find app routes you forgot about. A quick home page preview on /check-website costs no credits and takes about 20 seconds.