SaaS SEO Checklist
An SEO checklist for SaaS — product-led/free-tool pages, pricing and comparison pages, integration pages, docs SEO, JS rendering, and which funnel pages to noindex.
A SaaS SEO checklist is worth writing only if it covers what's actually different about SaaS: product-led/free-tool pages, pricing pages, comparison and 'alternative' pages, integration/marketplace pages at scale, documentation SEO (subdomain vs subfolder), the JavaScript rendering issues that plague SaaS marketing sites, and the trial/signup funnel pages that usually belong out of the index. Everything else — crawlability, canonicals, links — is normal SEO. There's no SaaS algorithm; the value is in itemizing SaaS's unique page-type and technical surface area rather than relabeling a generic TOFU/MOFU/BOFU checklist.
TL;DR — A SaaS SEO checklist is a repeatable review of the page types and technical setups that are specific to software companies: free tools, pricing pages, “us vs them” comparison pages, integration pages, help docs, and the JavaScript-heavy marketing site. Google ranks a SaaS site with the exact same rules as any other site — so a good SaaS checklist skips the generic advice and focuses on the handful of things that are genuinely different about SaaS.
Evidence for this claim Google reliably crawls links expressed as HTML a elements with resolvable href attributes. Scope: Applicable to JavaScript applications and conventional sites alike. Confidence: high · Verified: Google Search Central: Crawlable links Evidence for this claim Google must crawl a page to see a noindex rule; blocking the page in robots.txt can prevent that rule from being applied. Scope: Google crawling and indexing controls. Confidence: high · Verified: Google Search Central: Block indexing
What a SaaS SEO checklist is for
Most “SaaS SEO checklist” articles are just a normal SEO checklist with the word “SaaS” pasted on top — crawlability, title tags, links, all the usual stuff. Those things matter, but they’re the same for a bakery’s website as they are for Slack.
The parts that are actually different about SaaS are the page types and one technical pattern:
- Free tools and templates. Software companies give away small free tools, calculators, or template libraries. Done right, these rank in Google, earn links, and pull in exactly the people who’d use the paid product.
- Pricing pages. A pricing page is a real, high-value page people search for (“[product] pricing”) — it should be findable in Google, not hidden.
- Comparison pages. “Product X vs Product Y” and “alternatives to [competitor]” pages catch people who are close to buying.
- Integration pages. Pages describing what your software connects to (Slack, Zapier, Salesforce, etc.). Big SaaS companies have thousands of these.
- Documentation. Your help docs are often on a separate address (like
docs.example.com) and need their own SEO attention. - A JavaScript website. SaaS marketing sites are often built by the engineering team using tools like React or Next.js. If it’s built wrong, Google can’t see the content — the single most common technical failure on SaaS sites.
- Signup and trial pages. The “thanks for signing up” and logged-in pages usually should be kept out of Google, on purpose.
That’s the whole idea: this checklist itemizes the SaaS-specific surface area. For the practitioner version — with the exact things to check on each page type and the Google documentation behind them — switch to the Advanced tab.
TL;DR — There’s no SaaS algorithm — same crawl → render → index → rank pipeline as any site. A checklist earns its “SaaS” label only by itemizing what’s actually different: product-led/free-tool pages (indexable HTML output, own URL, schema), pricing pages (crawlable, not gated, no JS-only prices), comparison/“alternative” pages (one clean canonical each, accurate claims), integration pages at scale (unique value per page, partner backlinks, no stale/nonexistent integrations), docs SEO (subdomain vs subfolder — no ranking penalty, but authority and crawl-budget tradeoffs), the JS/app-shell rendering issues that dominate SaaS marketing sites (real
Evidence for this claim Google reliably crawls links expressed as HTML a elements with resolvable href attributes. Scope: Applicable to JavaScript applications and conventional sites alike. Confidence: high · Verified: Google Search Central: Crawlable links Evidence for this claim Google must crawl a page to see a noindex rule; blocking the page in robots.txt can prevent that rule from being applied. Scope: Google crawling and indexing controls. Confidence: high · Verified: Google Search Central: Block indexing<a href>links, History API routing, server-side/pre-rendering, the render-queue delay), and the trial/signup funnel pages that should benoindexed — which only works if the page isn’t also blocked in robots.txt. Programmatic-page quality control cuts across all of it.
What actually earns the “SaaS” label on this checklist
Two page types and one rendering pattern. That’s the whole justification for a SaaS-specific checklist: free-tool and comparison/“alternative” pages that a bakery site never builds, and the JavaScript app-shell rendering that a WordPress brochure site never has to fight. Everything else here — crawlability, canonicals, links — is the same SEO you’d run anywhere. That’s the good news: your normal technical and on-page toolkit transfers unchanged, because Google and Bing rank a software company on the same crawl → render → index → rank pipeline as a recipe blog. So this checklist skips the generic advice and spends its length on the page types and the one technical pattern a brochure or ecommerce site never has to think about.
The standard disclaimer I attach to all of this: it’s my understanding of how these systems work and how I’d approach the problem, not a guarantee — the search engines change constantly, so verify against the primary docs (linked in the Official Docs and Quotes tabs).
If you run a large, multi-property SaaS org — app subdomain, docs, community, status, marketplace, all under one brand — the scale version of this is its own topic; this checklist is the practical, scannable SMB/mid-market counterpart. The sibling Enterprise SaaS SEO deep dive covers crawl budget, three-tier monitoring, and the org-coordination problem in depth.
1. Product-led growth / free-tool pages
Free tools, calculators, and template galleries are the tactic that separates SaaS SEO from generic content marketing: they’re product surface and high-intent, link-earning organic assets at once. Ahrefs’ free tools and Notion’s template gallery are the reference examples. The failure mode is building a tool that Google can’t actually see, or that has nowhere to rank.
Check each free tool for:
- Real indexable HTML. The tool’s value proposition and result output must exist in the rendered HTML, not only appear after a paywalled or JS-only interaction. If the useful part only renders behind a click Google never performs, the page has nothing to rank on.
- Its own URL. The tool lives at a real, crawlable URL (
/free-tools/x/), not inside a modal or tab on the homepage. A tool with no URL of its own can’t rank on its own. - Internal links in. It’s linked from the blog posts and product pages where it’s relevant — that’s how it earns internal PageRank and how readers find it.
- Schema where it applies.
SoftwareApplication/WebApplicationstructured data where the tool genuinely qualifies. Don’t force it where it doesn’t fit.
2. Pricing pages
Pricing is the page type every competing SaaS checklist under-covers, and it’s a legitimate, high-intent, bottom-funnel page — people search “[product] pricing” with their wallet out. The instinct to hide pricing “so competitors can’t see it” trades away real organic demand for competitive-intelligence protection that doesn’t work anyway (competitors can always just look).
On the pricing page, check:
- It’s crawlable and indexable — not blocked in robots.txt, not
noindexed, and not gated behind a “request a demo” wall for the base tiers. - Prices aren’t JS-only. If the numbers render through client-side JavaScript that Google doesn’t execute, the page can be indexed with no prices in it. Confirm the actual numbers are in the rendered HTML.
- Currency/region variants are handled with canonical + hreflang, not left as
duplicate content. A
?currency=eurvariant should canonicalize sensibly. - Reserve
noindexfor the sub-steps, not the page itself — checkout, post-select confirmation, and gated enterprise-quote flows can be noindexed; the core pricing page should not.
3. Comparison and “alternative” pages
“X vs Y” and “alternatives to [competitor]” pages are bottom-funnel, high-intent, and chronically neglected. I’ve written before that comparison content can be hard to create in a big company because of legal review — but the accuracy discipline behind that survives all the way down to SMB scale: even without a legal team, write your comparison pages so they’re defensible and accurate. Don’t disparage competitors; do highlight real, specific differentiators.
Check comparison pages for:
- One clean canonical URL per comparison. Don’t publish
/x-vs-y/and/y-vs-x/as separate near-duplicates unless each genuinely serves a different audience with different content — otherwise you’re splitting signals and wasting crawl. - Accurate, defensible claims. Facts you can stand behind, updated when the competitor changes. Stale or wrong comparison claims are a trust and legal risk.
- Internal links from and to related content — blog posts, use-case pages, and the relevant docs — so the page is discoverable and passes authority.
- Programmatic near-duplicate watch. If these are generated from a template, make sure each one clears a real uniqueness bar (see section 8).
4. Integration and marketplace pages
Integration pages describe what your product connects to, and they’re the SaaS programmatic-SEO workhorse. Zapier’s ~25,000 integration landing pages are the north star for doing this at scale. The recurring problem is templated pages that swap the partner name and nothing else — thin at volume.
Check integration/marketplace pages for:
- Genuine unique value per page. What the integration actually does, real setup steps, and use cases — not just the partner’s name dropped into a template.
- Partner backlinks. Ask each integration partner to link to their page on your site. This is a cross-linking/backlink opportunity every competing checklist misses entirely, and partners are usually happy to do it.
- No pages for integrations that don’t exist yet or are deprecated. Publishing a page for a nonexistent or dead integration is thin, stale content and a trust problem.
- Proper pagination and sitemaps for large marketplaces, so every integration page is discoverable without a single bloated listing page.
5. Documentation SEO — subdomain vs subfolder
Docs SEO is absent from essentially every competing SaaS checklist, and the first
decision is architectural: does your documentation live at /docs/ (subfolder) or
docs.example.com (subdomain)? Google has no blanket ranking preference between the
two — the standard, long-repeated Google line is to pick whatever is easiest for you
to manage. Google’s own site-names documentation does confirm it treats a subdomain as
its own “site” (site names aren’t supported at the subdirectory level), which is
supportive evidence that subdomains are evaluated as semi-distinct entities. So the real
tradeoffs are practical, not a mythical penalty:
- Subfolder generally consolidates authority and internal-linking signal in one place.
- Subdomain buys platform independence — many docs tools (Mintlify, ReadMe, GitBook, Notion-based docs) default to a subdomain or even a third-party domain.
If your docs are on a subdomain, check:
- Verify it separately in Search Console — it’s its own property.
- Treat it as having its own crawl-budget allocation — a slow or broken docs subdomain doesn’t starve the marketing site’s crawl, and vice versa. That isolation is a feature, but it also means authority doesn’t flow automatically.
- Link it prominently from the marketing site (nav/footer) so authority reaches it.
- Control versioned-docs duplication. v1/v2/legacy doc trees create massive near-duplicate crawl waste — canonicalize unchanged old versions to current, or differentiate them clearly.
6. JavaScript rendering and app-shell issues
This is the single biggest recurring technical failure category for SaaS specifically, because SaaS marketing sites are disproportionately built on JS frameworks (Next.js/React/Vue) by the product engineering team rather than in a CMS. Google processes JavaScript in three deferred phases — crawl, render, index — and its own docs warn the page “may stay on this queue for a few seconds, but it can take longer than that.” The app-shell pattern (the initial HTML is an empty shell and all the real content is injected by JavaScript) is exactly where SaaS sites get indexed with nothing to rank on when rendering fails.
Check, grounded in Google’s JavaScript SEO documentation:
- View the rendered HTML, not just view-source. Inspect the rendered DOM (URL Inspection tool, or your browser’s Elements panel) and confirm the actual content is present after render — headlines, body copy, prices, everything that should rank.
- Real
<a href>links. Primary nav and cross-links to comparison, pricing, and integration pages must be real anchor elements withhrefattributes — Google discovers links through<a href>, not throughonClickhandlers or JS routing. - Prefer server-side rendering or static generation for marketing pages over full client-side rendering. Google says it plainly: server-side or pre-rendering “makes your website faster for users and crawlers, and not all bots can run JavaScript.”
- History API routing, not fragment (
#) routing, so client-side navigation produces real, crawlable URLs. - Account for the render-queue delay when diagnosing “why isn’t my new page indexed yet” — the delay is real and can exceed a few seconds, so don’t assume a fresh JS-rendered page will index instantly.
The myth to kill here: “my React/Next.js/Vue site handles SEO automatically.” It doesn’t. The framework raises the bar; it doesn’t clear it for you.
7. Trial, signup, and account pages — what to noindex
Google gives you the mechanism (noindex); the SaaS-specific judgment call is which
pages qualify. When Googlebot sees a noindex tag, “Google will drop that page
entirely from Google Search results, regardless of whether other sites link to it.”
The standard SaaS candidates for noindex:
- Post-signup confirmation / thank-you pages
- In-app onboarding steps and logged-in dashboard URLs that happen to be crawlable
- Low-value UTM/ad-campaign landing-page variants that duplicate the main product/pricing page
Check that:
- You’re not accidentally noindexing pages you want to rank. Audit your
noindextags — a stray one on a pricing, comparison, or integration page silently kills it. The inverse is just as common: trial/signup/thank-you pages missing anoindexthey should have. - You don’t noindex the legitimate ranking assets. Core pricing, comparison, and integration pages are high-intent pages you want indexed — never noindex those.
noindexand robots.txt aren’t fighting each other. This is the classic SaaS mistake: blocking/app/or/signup/in robots.txt and addingnoindex. Fornoindexto work, “the page or resource must not be blocked by a robots.txt file, and it has to be otherwise accessible to the crawler.” A page disallowed in robots.txt can still surface in search (without a description) if it’s linked externally, because Google never crawls it to see thenoindex. Pick one tool per goal:noindexto keep something out of the index, robots.txt to stop crawling — not both on the same URL.
8. Programmatic-page quality control (cross-cutting)
This one isn’t a page type — it’s a discipline that runs across comparison, integration, and any location/industry-variant pages you generate. Thin, near-duplicate programmatic pages are a named low-value signal (Bing flags them explicitly) and a crawl-budget “perceived inventory” problem for Google — mass-produced duplication makes Google waste crawl on pages that don’t earn it. The rule is simple: quality bar per page, not raw page count. “More integration/comparison pages is always better” is a myth; compounding comes from each page clearing a real uniqueness and usefulness bar, not from the total.
Fast discovery: sitemaps and IndexNow
One SaaS-friendly extra: because SaaS sites ship new integration and comparison pages
constantly, pair accurate sitemap lastmod values with IndexNow so new and updated
pages ping Bing (and IndexNow-participating engines) on publish rather than waiting for
the next crawl. Wiring IndexNow into your CMS or deploy pipeline is a one-time setup
that pays off every time you launch a batch of integration pages. (Note: Bing’s own
guidance in this space is crawl-mechanics-only — it doesn’t address SaaS page types
directly.)
The one-line version
No SaaS algorithm. Make free tools indexable with their own URLs; keep pricing
crawlable and JS-price-free; give every comparison one clean canonical and accurate
claims; make integration pages genuinely unique and get partner links; decide docs
subdomain-vs-subfolder on management, not a myth; fix JS rendering (real links, SSR,
History API, mind the render delay); noindex the trial/thank-you/onboarding funnel
(but never the ranking assets, and never while also blocking it in robots.txt); and hold
every programmatic page to a real quality bar.
AI summary
A condensed take on the Advanced version:
- No SaaS algorithm. Same crawl → render → index → rank pipeline as any site. A SaaS checklist earns its label only by itemizing SaaS-specific page types and one technical pattern.
- Product-led / free-tool pages: real indexable HTML output (not JS-only/paywalled
results), own crawlable URL (not a modal), internal links in,
SoftwareApplicationschema where it fits. - Pricing pages: crawlable and indexable, not gated; prices in rendered HTML (not
JS-only); currency/region variants handled with canonical + hreflang; reserve
noindexfor checkout/confirmation sub-steps, never the core page. - Comparison / “alternative” pages: one clean canonical each (avoid
/x-vs-y/+/y-vs-x/duplicates), accurate/defensible claims, internal links, watch for programmatic near-duplicates. - Integration / marketplace pages: unique value per page (not template swaps), ask partners for backlinks, no pages for nonexistent/deprecated integrations, paginate and sitemap large marketplaces. Zapier’s ~25,000 pages are the reference scale.
- Docs SEO: subdomain vs subfolder has no blanket ranking preference — subfolder consolidates authority, subdomain buys platform independence. Verify subdomains separately in Search Console, link them prominently, and canonicalize versioned-doc duplicates.
- JavaScript / app-shell: the biggest SaaS technical failure. View rendered HTML,
use real
<a href>links, prefer server-side/pre-rendering, use History API routing, and account for the render-queue delay (can exceed a few seconds). - Trial/signup funnel:
noindexthank-you/confirmation/onboarding/dashboard and duplicate UTM variants — but never pricing/comparison/integration pages, andnoindexonly works if the page isn’t also blocked in robots.txt. - Programmatic quality control cuts across all of it: quality bar per page, not raw page count. Pair sitemaps + IndexNow for fast discovery of new pages.
Official documentation
The primary sources behind this checklist. B2B/SaaS sites are governed by these the same as any other site.
- Understand JavaScript SEO basics — the crawl/render/index phases, the render-queue delay, real
<a href>links, History API routing, and the case for server-side/pre-rendering. The core doc for section 6. - Block Search indexing with noindex — how
noindexworks and the robots.txt precondition that trips up SaaS trial/app pages. The core doc for section 7. - What is URL canonicalization — “a hint, not a rule”; relevant to pricing currency variants, UTM landing-page duplicates, and
/x-vs-y/comparison pairs. - Site names in Google Search — Google treats a subdomain as its own “site” (not supported at subdirectory level); supportive evidence for the docs subdomain-vs-subfolder tradeoff.
- Optimize your crawl budget — “perceived inventory” and why thin programmatic pages waste crawl; relevant to sections 4 and 8.
- Intro to structured data — for
SoftwareApplication/WebApplicationon free-tool pages.
Bing / Microsoft
- Keeping content discoverable with sitemaps in AI-powered search (July 2025) — accurate
lastmodand pairing sitemaps with IndexNow for fast discovery of new integration/comparison pages. - bingbot Series: Optimizing Crawl Frequency — cosmetic changes don’t warrant a recrawl; relevant to SaaS teams shipping frequent landing-page redesigns.
- IndexNow documentation — wire it into your CMS/deploy pipeline so new pages ping engines on publish.
Quotes from the source
On-the-record statements from Google relevant to a SaaS checklist. Each link deep-links to the quoted passage on the source page.
Google — JavaScript rendering
- “Server-side or pre-rendering is still a great idea because it makes your website faster for users and crawlers, and not all bots can run JavaScript.” Jump to quote
- On the rendering queue delay: “The page may stay on this queue for a few seconds, but it can take longer than that.” Jump to quote
Google — noindex
- “When Googlebot crawls that page and extracts the tag or header, Google will drop that page entirely from Google Search results, regardless of whether other sites link to it.” Jump to quote
- On the robots.txt precondition: “For the
noindexrule to be effective, the page or resource must not be blocked by a robots.txt file, and it has to be otherwise accessible to the crawler.” Jump to quote
Google — canonicalization
- “Indicating a canonical preference is a hint, not a rule.” Jump to quote
Google — site names / subdomains
- “Google Search does not support site names at the subdirectory level.” (Confirming a subdomain is treated as its own “site.”) Jump to quote
Should this SaaS page be indexed — and where should docs live?
Two decisions come up on almost every SaaS audit. Start here.
A. Should this page be in Google’s index?
Q1. Is it a high-intent marketing/product page — pricing, a comparison, an integration page, a free tool, or a core feature page?
- Yes → it’s a ranking asset. Make sure it’s crawlable and indexable, not
noindexed and not blocked in robots.txt. Stop here. - No → continue.
Q2. Is it a post-signup/thank-you page, an in-app onboarding step, a logged-in dashboard URL, or a duplicate UTM/campaign landing variant?
- Yes → keep it out of the index. Continue to Q3 for how.
- No / not sure → default to leaving it indexable; a genuinely useful public page usually belongs in the index.
Q3. How do you keep it out — noindex or robots.txt?
- You want it gone from the index but Google can still crawl it → use
noindex, and make sure the page is not also blocked in robots.txt (or Google never sees the tag). - You want to stop Google spending crawl on a whole space (e.g.
/app/) → use robots.txtDisallow— but accept those URLs can still appear (without a snippet) if linked externally, so don’t rely on it to guarantee removal. - Never both on the same URL. Blocking in robots.txt and adding
noindexis the classic SaaS mistake — the block prevents Google from ever seeing thenoindex.
B. Docs on a subdomain or a subfolder?
Q1. Are you free to put docs anywhere, or does your docs tool force a subdomain?
- Tool forces a subdomain / third-party domain (Mintlify, ReadMe, GitBook, etc.) → go subdomain; there’s no ranking penalty. Skip to the subdomain hygiene list below.
- You genuinely have a choice → continue.
Q2. What matters more — consolidating authority, or platform independence?
- Consolidate authority / simplest internal linking → subfolder (
/docs/). Generally the better default for consolidating signal. - Independence from the main site’s stack/deploys, or the docs team owns its own
tooling → subdomain (
docs.example.com). Perfectly fine — Google has no blanket preference.
If you land on a subdomain, the hygiene list: verify it separately in Search Console, treat its crawl budget as isolated, link it prominently from the marketing site’s nav/footer so authority reaches it, and canonicalize unchanged legacy doc versions to current.
The one-line version: ranking assets stay indexable; funnel/dashboard pages get
noindex (never also robots-blocked); docs go wherever’s easiest to manage, because
there’s no penalty either way.
The SaaS SEO checklist
A pass across the page types and technical patterns that are actually specific to SaaS.
Product-led / free-tool pages
- Tool’s value + result output exist in rendered HTML (not JS-only or paywalled).
- Tool has its own crawlable URL (not a modal or homepage tab).
- Internally linked from relevant blog/product content.
-
SoftwareApplication/WebApplicationschema where it genuinely applies.
Pricing pages
- Crawlable and indexable — not blocked, not
noindexed, base tiers not gated behind “request a demo.” - Prices are in the rendered HTML, not JS-only.
- Currency/region variants handled with canonical + hreflang, not duplicate content.
-
noindexreserved for checkout/confirmation sub-steps, not the core page.
Comparison & “alternative” pages
- One clean canonical URL per comparison (no
/x-vs-y/+/y-vs-x/duplicates without differentiated content). - Claims accurate and defensible; updated when competitors change.
- Internally linked from and to related blog/use-case/docs content.
Integration & marketplace pages
- Each page has genuine unique value (what it does, setup, use cases) — not a template name-swap.
- Partners asked to link to their integration page (backlink opportunity).
- No pages for nonexistent or deprecated integrations.
- Large marketplaces paginated and sitemapped for full discoverability.
Documentation SEO
- Subdomain-vs-subfolder decision made on management/tooling, not a mythical penalty.
- If subdomain: verified separately in Search Console, linked prominently from marketing nav/footer.
- Versioned docs (v1/v2/legacy) canonicalized or differentiated — no near-duplicate crawl waste.
JavaScript / app-shell rendering
- Rendered HTML (not just view-source) confirmed to contain the real content.
- Nav and internal links are real
<a href>elements, notonClick. - Server-side or static rendering preferred for marketing pages.
- History API routing (not
#fragment routing). - Render-queue delay accounted for when diagnosing slow indexing.
Trial / signup / account pages
- Thank-you/confirmation, onboarding, dashboard, and duplicate UTM variants
noindexed. - Pricing/comparison/integration pages NOT
noindexed. - No page both
noindexed and blocked in robots.txt.
Cross-cutting
- Every programmatic page clears a real per-page uniqueness/usefulness bar.
- Sitemap
lastmodaccurate; IndexNow wired into the deploy pipeline.
SaaS SEO — page-type cheat sheet
What to check per SaaS page type
| Page type | Should it be indexed? | The one thing that breaks it |
|---|---|---|
| Free tool | Yes | Result/output is JS-only or has no URL of its own |
| Pricing | Yes | Gated, or prices render JS-only (indexed with no prices) |
| Comparison (“X vs Y”) | Yes | /x-vs-y/ + /y-vs-x/ near-duplicates splitting signals |
| Integration page | Yes | Template name-swap with no unique value |
| Docs | Yes | Subdomain not linked/verified; versioned duplicates |
| Thank-you / confirmation | No | Missing noindex (or blocked in robots.txt too) |
| Onboarding / dashboard | No | Crawlable + indexable by accident |
| Duplicate UTM landing variant | No | Duplicate of the real page, left indexable |
noindex vs robots.txt — pick one per goal
| Goal | Tool | Gotcha |
|---|---|---|
| Keep a crawlable page out of the index | noindex | Must NOT also be robots.txt-blocked |
Stop crawl on a whole space (/app/) | robots.txt Disallow | URLs can still appear (no snippet) if linked |
| Both at once on one URL | Neither — mistake | Block hides the noindex from Google |
JavaScript do / don’t
- Do: real
<a href>links, History API routing, server-side/pre-rendering, content in the rendered HTML. - Don’t:
onClicknavigation,#fragment routing, assume the framework “handles SEO,” expect instant indexing (render-queue delay is real).
Docs subdomain vs subfolder
- No ranking penalty either way — Google has no blanket preference.
- Subfolder → consolidates authority. Subdomain → platform independence (verify + link it).
Myths to retire
- “My React/Next/Vue site handles SEO automatically.” → It doesn’t.
- “Subdomains rank worse.” → No blanket penalty; it’s an authority/crawl tradeoff.
- “Hide pricing from search so competitors can’t see it.” → Trades real demand for protection that doesn’t work.
- “More integration pages is always better.” → Quality bar per page, not page count.
Patrick's relevant free tools
- Google Index Checker — Check one URL’s observable indexability blockers, or reconcile sitemap, crawl, and supplied Search Console evidence across a URL set before verifying Google’s actual state in URL Inspection.
- SEO Incident Simulator — Practice thirty deterministic technical SEO incident investigations — indexability, crawl controls, redirects, sitemaps, markup, caching, DNS, bot verification, rendering, hreflang, and faceted navigation — with clearly labeled fixture evidence and Find → Fix → Verify handoffs.
- Raw vs. Rendered HTML Checker — See what's in your page's initial HTML versus after JavaScript runs — headless-Chrome rendering only when the page actually needs it, a rendering-strategy verdict (SSR / prerendered / CSR / hybrid), ~15 calibrated JavaScript-SEO checks (noindex, canonicals, robots.txt blocking, links, soft 404s), a side-by-side raw-vs-rendered diff, and shareable reports.
Tools for a SaaS SEO audit
- Google Search Console — URL Inspection to see the rendered HTML of a JS page
(section 6), the Page Indexing report to catch pages wrongly
noindexed or wrongly indexed (section 7), and separate properties for each subdomain (docs, app). - Bing Webmaster Tools — the Bing parallel; also where you submit IndexNow.
- Your browser’s Elements panel / “Inspect” — the fastest free way to confirm nav
links are real
<a href>elements and that content and prices exist after render, not just in view-source. - A crawler (Ahrefs Site Audit / Screaming Frog) — simulate a crawl to surface
noindextags, robots.txt blocks, near-duplicate programmatic pages, redirect chains, and orphaned free-tool/integration pages across your subdomains. - Ahrefs (or a keyword tool that shows intent) — find the comparison, “alternative,” and integration queries worth building pages for, and the “[product] pricing” demand you’d otherwise hide.
- IndexNow (via your CMS/deploy pipeline) — ping engines the moment a batch of new integration or comparison pages ships.
Common SaaS SEO audit failures
The pricing page is indexed without prices
Likely causes: The pricing table is client-rendered, requires an interaction, or is replaced by a generic request-demo shell for crawlers.
Fix: Return the base pricing content in server-rendered or static HTML. Confirm the raw response and Search Console’s rendered view both contain the same plan and price information.
A thank-you or app page remains in search despite noindex
Likely cause: The URL is also disallowed in robots.txt, so Google cannot crawl it to see the directive; external/internal links may keep the blocked URL known.
Fix: Allow crawling long enough for noindex to be processed and remove public
links that unnecessarily expose the URL. Use robots blocking for crawl control, not
as a guaranteed index-removal mechanism.
Integration pages are discovered but not indexed
Likely causes: The pages are near-identical name swaps, describe integrations that do not exist, are orphaned, or are buried behind weak pagination.
Fix: Add real setup steps/use cases per integration, remove nonexistent/deprecated entries, link from the marketplace and relevant product/docs pages, and include only canonical live pages in the sitemap.
A free tool works for users but has no organic visibility
Likely causes: It lives in a modal, has no dedicated URL, exposes value only after JavaScript/login, or receives no internal links.
Fix: Give the tool a crawlable URL, return its purpose and usable core in rendered HTML, link it from the tool directory and relevant content, and validate appropriate application schema without manufacturing reviews.
Two comparison pages compete for the same query
Likely cause: Reversed or campaign URL variants carry substantially the same content with inconsistent canonical signals.
Fix: Choose one canonical comparison URL unless the audience and content are genuinely distinct. Redirect/consolidate true duplicates and update internal links to the chosen destination.
Docs rank separately but receive little authority or crawl attention
Likely causes: A docs subdomain is weakly linked from marketing, unverified in its own Search Console property, or full of near-duplicate version trees.
Fix: Add prominent real links from marketing, verify/monitor the docs property, and canonicalize or clearly differentiate legacy versions. The subdomain itself is not a blanket ranking penalty.
Frameworks for a SaaS SEO audit
The three-surface map
Classify every SaaS URL before choosing an indexing rule:
| Surface | Examples | Default search posture |
|---|---|---|
| Public acquisition/product | Free tools, pricing, comparisons, integrations, feature/use-case pages | Crawlable, indexable, server/static core, internally linked |
| Public support/knowledge | Docs, help articles, templates | Indexable when useful; control versions and subdomain discovery |
| Private or transactional funnel | Signup steps, thank-you pages, onboarding, dashboards, duplicate campaign variants | Usually noindex or authentication; do not hide noindex behind robots blocking |
The map prevents the common inversion: accidentally noindexing revenue pages while allowing low-value funnel states into the index.
Discover → render → qualify → maintain
Every indexable SaaS page type must pass four gates:
- Discover: It has a stable URL, real
a[href]links, pagination/hub paths, and sitemap inclusion where appropriate. - Render: The primary copy, price, tool value, or integration detail exists in the initial or reliably rendered HTML.
- Qualify: The page has a distinct intent, canonical, accurate claims, and real per-page value rather than a template swap.
- Maintain: Ownership exists for competitor changes, deprecated integrations, docs versions, pricing updates, and programmatic quality checks.
A launch checklist that omits maintenance creates stale comparison/integration pages even when technical SEO was correct on day one.
Page type × failure mode
- Free tool: utility hidden from crawlers or trapped without its own URL.
- Pricing: core demand page gated/noindexed or prices available only client-side.
- Comparison: inaccurate claims or competing reversed duplicates.
- Integration: thin nonexistent partner pages and weak discovery at scale.
- Docs: disconnected subdomain and version duplication.
- Funnel/app: indexable private/duplicate states, or invisible
noindexbecause robots.txt blocks the fetch.
Use the mapping to assign each problem to product, engineering, content, docs, legal, or analytics rather than leaving the whole checklist with the SEO team.
Fast checks for SaaS page types
Check a ranking asset’s raw response
Run in a shell against pricing, comparison, integration, and free-tool URLs. Replace the final search term with content that must be present for that page type.
url='https://example.com/pricing/'
curl -fsSI "$url" | grep -Ei '^(HTTP/|x-robots-tag:|location:)'
curl -fsSL "$url" | grep -Ei '<title|rel="canonical"|name="robots"'
curl -fsSL "$url" | grep -F 'Starter plan'Audit a URL inventory with Python
Save one URL per line in saas-urls.txt. This checks HTTP status, canonical,
noindex, title, and whether the response contains at least one real anchor link.
from urllib.request import Request, urlopen
from urllib.error import HTTPError
import re
for url in open("saas-urls.txt", encoding="utf-8"):
url = url.strip()
if not url:
continue
try:
response = urlopen(Request(url, headers={"User-Agent": "SaaSSEOAudit/1.0"}))
html = response.read().decode("utf-8", errors="replace")
print(url, response.status,
"title=" + str(bool(re.search(r"<title[^>]*>.+?</title>", html, re.I | re.S))),
"canonical=" + str(bool(re.search(r"<link[^>]+rel=[\"']canonical[\"']", html, re.I))),
"noindex=" + str(bool(re.search(r"<meta[^>]+content=[\"'][^\"']*noindex", html, re.I))),
"links=" + str(len(re.findall(r"<a\s+[^>]*href=", html, re.I))))
except HTTPError as error:
print(url, error.code, "HTTP error")Find JavaScript-only navigation in Chrome DevTools
Paste into the Console. Buttons with click handlers are not automatically a problem, but primary navigation destinations should exist as real anchors.
({
anchors: [...document.querySelectorAll('a[href]')].map((a) => a.href),
clickOnlyButtons: [...document.querySelectorAll('button[onclick], [role="link"]:not(a)')]
.map((node) => node.textContent?.trim()).filter(Boolean),
canonical: document.querySelector('link[rel="canonical"]')?.href ?? null,
robots: document.querySelector('meta[name="robots"]')?.content ?? null,
});Extract pages with noindex in Screaming Frog
Use this XPath in Custom Extraction to return the robots-meta content, then filter
the export for noindex and compare it with the three-surface map.
//meta[translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='robots']/@content Prove the SaaS SEO fix shipped correctly
Server-rendered pricing or tool-value test
Test to run: Fetch the changed pricing/free-tool URL with curl and compare its
raw HTML with the browser-rendered page and Search Console live test.
Expected result: The canonical, page purpose, and core price/tool value exist in the raw and rendered outputs without login or interaction.
Failure interpretation: The release still depends on client rendering, a gated API response, or crawler-specific output.
Monitoring window: Immediate after deployment, then after Google processes the live test/crawl.
Rollback trigger: A formerly indexable ranking asset ships an empty/generic shell or hides its primary value.
noindex processing test
Test to run: Request the changed funnel/app URL, inspect meta and X-Robots-Tag, confirm robots.txt allows the fetch, and monitor URL Inspection/Page Indexing.
Expected result: Google can crawl the URL, sees exactly one noindex directive,
and later reports the URL excluded from Search.
Failure interpretation: Robots blocking hides the directive, the tag is missing from the response Google receives, or another template overrides it.
Monitoring window: Immediate for response/robots checks; allow subsequent recrawl for index removal.
Rollback trigger: The rule lands on pricing, comparison, integration, tool, or other intended ranking assets.
Comparison canonical-consolidation test
Test to run: Fetch both comparison variants and inspect status, canonical, and internal links after consolidation.
Expected result: One chosen URL returns 200 and self-canonicalizes; a retired true duplicate permanently redirects to it, and internal links use the chosen URL.
Failure interpretation: Both duplicates remain indexable, canonicals conflict, or the redirect points to a page serving a different comparison intent.
Monitoring window: Immediate after deployment and through the next crawl/indexing updates.
Rollback trigger: A genuinely differentiated comparison is mistakenly collapsed or the chosen page becomes unreachable.
Integration discovery and quality test
Test to run: Sample new/updated integration URLs from the sitemap and marketplace pagination, then crawl them without JavaScript and compare their unique setup/use-case content.
Expected result: Each live integration is discoverable, canonical, 200, linked, and contains substantive partner-specific value.
Failure interpretation: Pagination/sitemap discovery is incomplete, the page is an orphan, or the template shipped name-swap content.
Monitoring window: Immediate after a batch publish and after sitemap/IndexNow processing.
Rollback trigger: The batch publishes nonexistent integrations or materially near-identical pages that fail the per-page quality bar.
Resources worth your time
My related writing
- Unlocking Growth Through Enterprise SaaS SEO — my full SaaS guide: product-led content, the “vs” and free-tool pages, checking indexing and canonicalization, the bottom-of-funnel-first sequence, and the JavaScript and crawl-budget issues behind SaaS sites. The parent for a lot of this checklist.
- JavaScript SEO Issues & Best Practices — the rendering side (section 6) in depth: real links, History API, server-side rendering, and the render-queue delay.
- Enterprise SEO Strategies For Maximum Growth — for the scale version, when a SaaS site becomes an org-coordination problem.
My speaking
- Enterprise SEO Chaos (SMX Advanced, from my time as Technical SEO at IBM) — the redirect chains, canonical conflicts, and JavaScript menus invisible to crawlers behind real large SaaS/enterprise sites. My standing disclaimer applies — this is my understanding, not gospel.
From around the industry
- Understand JavaScript SEO basics — Google Search Central — the primary doc behind the whole JS-rendering section.
- Block Search indexing with noindex — Google Search Central — how
noindexworks and the robots.txt precondition every SaaS trial-page setup has to respect. - What is URL canonicalization — Google Search Central — the “hint, not a rule” behind pricing-variant and comparison-page canonical decisions.
- Site names in Google Search — Google Search Central — confirms subdomains are treated as distinct “sites,” the backdrop to the docs subdomain-vs-subfolder call.
- Keeping content discoverable with sitemaps in AI-powered search — Bing Webmaster Blog (July 2025) — accurate
lastmod+ IndexNow for fast discovery of new integration/comparison pages. - IndexNow documentation — the protocol to wire into your deploy pipeline.
- Google clarifies using canonical & noindex at the same time — Search Engine Journal — trade-press coverage of Google’s guidance on not combining conflicting indexing signals, relevant to the trial-page/pricing-variant decisions here.
Test yourself: SaaS SEO checklist
Five questions on the page types and technical patterns specific to SaaS. Pick an answer for each, then check.
Build-time retrieval analysis plus live signals for this exact article. The automatic chunk report includes a deterministic readiness score and is ready without a model download.
Search Console
sampleGA4 traffic (28d)
sampleCloudflare traffic (7d)
sampledCrUX field data (28d, phone)
sampleGoogle NLP entities
localChangelog
Revision history
Compare the published article with an archived editorial snapshot. Added and removed words are shown only after you open a comparison.
Updated Jul 18, 2026.
Editorial summary and recorded change details.Summary
Replaced the generic templated 'there is no SaaS algorithm' opener heading with framing specific to what earns a SaaS checklist its label.
Change details
- Advanced
Rewrote the advanced-lens opening section to lead with the two page types and one rendering pattern that actually distinguish a SaaS checklist, keeping the shared-pipeline fact as supporting context rather than the headline.