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 — crawlabilityCrawlability is how well search engine crawlers can discover, access, and fetch a site's pages. A crawlability issue is any technical condition — blocked access, broken links, server failures, or bloated URL inventory — that stops pages from reaching the index., title tagsThe title tag is the HTML title element in a page's head that specifies the document's title. It's the primary source for the SERP title link and a confirmed light ranking factor — but since August 2021 Google doesn't always show it verbatim., 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 → indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. → 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 subfolderA subdomain (blog.example.com) is a separate hostname; a subdirectory (example.com/blog/) is a path on the same hostname. Google has no blanket ranking preference — it decides per site whether a subdomain is treated as part of the site, based on integration signals. — no ranking penalty, but authority and crawl-budget tradeoffs), the JS/app-shell renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. 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-renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere.. 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 — crawlabilityCrawlability is how well search engine crawlers can discover, access, and fetch a site's pages. A crawlability issue is any technical condition — blocked access, broken links, server failures, or bloated URL inventory — that stops pages from reaching the index., 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 SEOEnterprise SaaS SEO is the practice of growing organic search visibility for a large software-as-a-service company. The ranking mechanics are identical to any other site — what changes is the strategy: long multi-stakeholder B2B sales cycles, product-led growth motions, JavaScript-heavy app platforms, and SEO spread across a marketing site, app, docs, and community. deep dive covers crawl budgetThe number of URLs an engine will crawl in a timeframe., 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 linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. in. It’s linked from the blog posts and product pages where it’s relevant — that’s how it earns internal PageRankPageRank is Google's original recursive link-graph algorithm: a page's score depends on the scores of the pages linking to it, and in the published model each page's score is split across its outbound links (the simplified version: links are weighted votes). Google says it's evolved since launch but still part of its core ranking systems. 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere., 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 + hreflangHreflang is an annotation (in HTML, HTTP headers, or XML sitemaps) that tells search engines which language and optional region a page targets, and which alternate versions exist. It only works when every page in the cluster references all the others., not left as
duplicate contentThe same or very similar primary content reachable at more than one URL. There's no general duplicate content penalty — the real costs are possible signal dilution, the wrong URL getting chosen, and less-efficient crawling.. 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 paginationPagination splits a large set of content — product listings, blog archives, search results — across multiple sequentially numbered URLs. For SEO, each paginated page should be crawlable, indexable, and self-canonical; Google no longer uses rel=prev/next, but Bing still does. and sitemapsA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. 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 ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. — 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 CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms.. 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 SEOMaking sure search engines can crawl, render, and index content that depends on JavaScript. 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 crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index., 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 GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. 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 noindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed. 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 crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor. — 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 IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it. 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 → indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. → 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 linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. 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 + hreflangHreflang is an annotation (in HTML, HTTP headers, or XML sitemaps) that tells search engines which language and optional region a page targets, and which alternate versions exist. It only works when every page in the cluster references all the others.; 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 linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them., watch for programmatic near-duplicatesThe same or very similar primary content reachable at more than one URL. There's no general duplicate content penalty — the real costs are possible signal dilution, the wrong URL getting chosen, and less-efficient crawling.. - Integration / marketplace pages: unique value per page (not template swaps), ask partners for backlinks, no pages for nonexistent/deprecated integrations, paginate and sitemapA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. large marketplaces. Zapier’s ~25,000 pages are the reference scale.
- Docs SEO: subdomain vs subfolderA subdomain (blog.example.com) is a separate hostname; a subdirectory (example.com/blog/) is a path on the same hostname. Google has no blanket ranking preference — it decides per site whether a subdomain is treated as part of the site, based on integration signals. has no blanket ranking preference — subfolder consolidates authority, subdomain buys platform independence. Verify subdomains separately in Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results., 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-renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere.. - Programmatic quality control cuts across all of it: quality bar per page, not raw page count. Pair sitemapsA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. + IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it. 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/indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. phases, the render-queue delay, real
<a href>links, History API routing, and the case for server-side/pre-renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM.. The core doc for section 6. - Block Search indexing with noindex — how
noindexworks and the robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. 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 inventoryCrawl demand is the 'want' side of crawl budget — how much a search engine wants to crawl a site or URL, driven by popularity, staleness, and perceived inventory (plus temporary spikes from site moves). It's distinct from crawl rate/capacity, the 'can' side.” and why thin programmatic pagesProgrammatic SEO (pSEO) is the practice of generating many pages from a single template plus a data source to target large sets of similar queries. It's powerful when each page genuinely answers its query with unique data, and spam when it just stamps a thin template across a shallow dataset. 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 sitemapsA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. with IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it. for fast discovery of new integration/comparison pages. - bingbot Series: Optimizing Crawl Frequency — cosmetic changes don’t warrant a recrawlCrawl frequency is how often a search engine comes back to re-fetch a page it already knows about. Popular pages that change often get refreshed many times a day; stable pages can go weeks or months between crawls — and you influence it indirectly, not by setting a dial.; relevant to SaaS teams shipping frequent landing-page redesigns.
- IndexNow documentation — wire it into your CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms./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 renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM.
- “Server-side or pre-renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. is still a great idea because it makes your website faster for users and crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index., 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 — noindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed.
- “When GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. precondition: “For the
noindexrule to be effective, the page or resource must not be blocked by a robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. file, and it has to be otherwise accessible to the crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index..” Jump to quote
Google — canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it.
- “Indicating a canonical preference is a hint, not a rule.” Jump to quote
Google — site namesWebSite schema (schema.org/WebSite) is structured data — usually JSON-LD on the homepage — that identifies your domain as a website entity via its name and URL. Today it mainly feeds Google's Site Names feature; the Sitelinks Search Box it used to enable was discontinued by Google in November 2024. / 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere.. 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 indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed.. 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere.?
- 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 linkingAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. → 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 budgetThe number of URLs an engine will crawl in a timeframe. 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 + hreflangHreflang is an annotation (in HTML, HTTP headers, or XML sitemaps) that tells search engines which language and optional region a page targets, and which alternate versions exist. It only works when every page in the cluster references all the others., not duplicate contentThe same or very similar primary content reachable at more than one URL. There's no general duplicate content penalty — the real costs are possible signal dilution, the wrong URL getting chosen, and less-efficient crawling..
-
noindexreserved for checkout/confirmation sub-steps, not the core page.
Comparison & “alternative” pages
- One clean canonical URLHow search engines pick one canonical URL among duplicates and consolidate signals onto it. 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 ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results., linked prominently from marketing nav/footer.
- Versioned docs (v1/v2/legacy) canonicalized or differentiated — no near-duplicate crawl waste.
JavaScript / app-shell renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM.
- Rendered HTML (not just view-source) confirmed to contain the real content.
- Nav and internal linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. are real
<a href>elements, notonClick. - Server-side or static renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. preferred for marketing pages.
- History API routing (not
#fragment routing). - Render-queue delay accounted for when diagnosing slow indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed..
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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere..
Cross-cutting
- Every programmatic page clears a real per-page uniqueness/usefulness bar.
- SitemapA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing.
lastmodaccurate; IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it. wired into the deploy pipeline.
SaaS SEO — page-type cheat sheet
What to check per SaaS page type
| Page type | Should it be indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed.? | 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-duplicatesThe same or very similar primary content reachable at more than one URL. There's no general duplicate content penalty — the real costs are possible signal dilution, the wrong URL getting chosen, and less-efficient crawling. 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. too) |
| Onboarding / dashboard | No | Crawlable + indexable by accident |
| Duplicate UTM landing variant | No | Duplicate of the real page, left indexable |
noindex vs robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. — 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-renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., content in the rendered HTML. - Don’t:
onClicknavigation,#fragment routing, assume the framework “handles SEO,” expect instant indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. (render-queue delay is real).
Docs subdomain vs subfolderA subdomain (blog.example.com) is a separate hostname; a subdirectory (example.com/blog/) is a path on the same hostname. Google has no blanket ranking preference — it decides per site whether a subdomain is treated as part of the site, based on integration signals.
- 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 ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. — URL InspectionA Google Search Console feature that reports how Google sees one specific URL on a property you own. By default it shows the last-indexed snapshot; a separate \"Test live URL\" mode fetches the current version. to see the rendered HTML of a JS page
(section 6), the Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. to catch pages wrongly
noindexed or wrongly indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. (section 7), and separate properties for each subdomain (docs, app). - Bing Webmaster ToolsMicrosoft's free portal for monitoring and improving how a site appears in Bing search — the peer to Google Search Console, plus IndexNow instant indexing, richer backlink data, and keyword volumes. Because Bing's index also feeds Microsoft Copilot, it doubles as a window into AI-search visibility. — the Bing parallel; also where you submit IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it..
- 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 crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. (Ahrefs Site Audit / Screaming Frog) — simulate a crawl to surface
noindextags, robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. blocks, near-duplicate programmatic pages, redirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. 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.
- IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it. (via your CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms./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 crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index..
Fix: Return the base pricing content in server-rendered or static HTML. Confirm the raw response and Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.’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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere., so Google cannot crawl it to see the directive; external/internal linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. may keep the blocked URL known.
Fix: Allow crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor. 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 indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed.-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 paginationPagination splits a large set of content — product listings, blog archives, search results — across multiple sequentially numbered URLs. For SEO, each paginated page should be crawlable, indexable, and self-canonical; Google no longer uses rel=prev/next, but Bing still does..
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 sitemapA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing..
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 linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them..
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. RedirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't./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 ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. 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 indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. 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, paginationPagination splits a large set of content — product listings, blog archives, search results — across multiple sequentially numbered URLs. For SEO, each paginated page should be crawlable, indexable, and self-canonical; Google no longer uses rel=prev/next, but Bing still does./hub paths, and sitemapA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. 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 SEOTechnical SEO is the practice of making a site easy for search engines to crawl, render, index, and (now) be eligible for AI answers. It's the foundation that lets your content and links rank — not a ranking trick of its own. was correct on day one.
Page type × failure mode
- Free tool: utility hidden from crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. 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 ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. 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 renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., a gated API response, or crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index.-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-TagThe X-Robots-Tag is an HTTP response header that carries the same indexing and serving directives as the robots meta tag (noindex, nofollow, nosnippet, and the rest). Because it lives in the header rather than the HTML, it's how you control indexing for non-HTML files like PDFs, images, and videos., confirm robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. allows the fetch, and monitor URL InspectionA Google Search Console feature that reports how Google sees one specific URL on a property you own. By default it shows the last-indexed snapshot; a separate \"Test live URL\" mode fetches the current version./Page IndexingThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason..
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 recrawlCrawl frequency is how often a search engine comes back to re-fetch a page it already knows about. Popular pages that change often get refreshed many times a day; stable pages can go weeks or months between crawls — and you influence it indirectly, not by setting a dial. 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 linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. after consolidation.
Expected result: One chosen URL returns 200 and self-canonicalizes; a retired true duplicate permanently redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. 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/indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. 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 sitemapA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. and marketplace paginationPagination splits a large set of content — product listings, blog archives, search results — across multiple sequentially numbered URLs. For SEO, each paginated page should be crawlable, indexable, and self-canonical; Google no longer uses rel=prev/next, but Bing still does., 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/IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it. 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 indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. and canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it., 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 renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. side (section 6) in depth: real links, History API, server-side renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., 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 SEOTechnical SEO is the practice of making a site easy for search engines to crawl, render, index, and (now) be eligible for AI answers. It's the foundation that lets your content and links rank — not a ranking trick of its own. at IBM) — the redirect chainsA → B → C instead of A → C. Each hop loses link equity and adds latency., canonical conflicts, and JavaScript menus invisible to crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. 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+ IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it. 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 indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. 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.