SaaS SEO kỹ thuật

Đó kỹ thuật-SEO patterns cụ thể để software companies — JavaScript app-shell marketing các trang và điều gì cần máy chủ kết xuất, tài liệu on một subdomain so với subfolder, crawl-budget waste từ freemium URL explosion, noindex so với robots.txt conflicts, và vì sao hreflang không solve multi-currency pricing.

Xuất bản lần đầu: 3 thg 7, 2026 · Cập nhật lần cuối: 8 thg 8, 2026 · Advanced
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này

SaaS SEO kỹ thuật là ordinary crawl → render → chỉ mục → xếp hạng hoạt động aimed tại an unusual kỹ thuật surface: JavaScript app-shell marketing các trang (mà risk đang clustered as duplicates, không chỉ going invisible), tài liệu on một subdomain so với subfolder (một real crawl/authority tradeoff, không một hình phạt), freemium các sản phẩm đó mint huge numbers of thấp-giá trị dashboard/trial/người dùng URLs (crawl-budget waste dressed lên as nội dung), noindex-so với-robots.txt conflicts (đó classic SaaS mistake), và multi-region pricing (nơi hreflang targets language/region, không bao giờ currency). Google và Bing chạy một SaaS site qua đó giống nhau pipeline as bất kỳ other site, so điều gì là SaaS-cụ thể là đó surface, không đó algorithm. Đó cách sửa cho gần như all of điều này là architectural intent decided sớm, không remediation sau đó URLs exist.

TL;DR — Không SaaS algorithm — giống nhau crawl → render → chỉ mục → xếp hạng pipeline as bất kỳ site; điều gì là SaaS-cụ thể là đó kỹ thuật surface điều này chạy so với. App-shell marketing các trang risk đang clustered as duplicates và mis-canonicalized, không chỉ going invisible — so marketing/pricing/tài liệu/blog cần SSR/SSG trong khi đó logged-trong sản phẩm UI có thể stay client-được kết xuất vì Google không bao giờ crawl điều này. Tài liệu on một subdomain so với subfolder là một real crawl/authority tradeoff (một subdomain là một distinct “site”), không một hình phạt. Freemium apps mint đó SaaS version of “faceted navigation” (bản dịch) «faceted navigation» và “infinite spaces” (bản dịch) «infinite spaces» — dashboards, trial-flow steps, shareable người dùng-generated các trang — và đó cách sửa là architectural (auth-gate hoặc robots.txt), vì noindex không save ngân sách crawl. Đó classic SaaS mistake là blocking một space trong robots.txt noindexing điều này, so đó noindex là không bao giờ seen; một JS-injected noindex là doubly fragile on an app shell. Và hreflang targets language/region, không bao giờ currency.

Evidence for this claim Google processes JavaScript pages through crawling, rendering, and indexing, and not every bot supports JavaScript equivalently. Scope: Google JavaScript processing; server rendering can improve portability and reliability. Confidence: high · Verified: Google Search Central: JavaScript SEO basics Evidence for this claim Google warns that faceted navigation and other effectively infinite URL spaces can waste crawling resources. Scope: Large or rapidly expanding URL spaces, including parameterized application URLs. Confidence: high · Verified: Google Search Central: Managing crawling of faceted navigation URLs

Bắt đầu ở đây: surface, không algorithm

Mọi thứ SaaS-cụ thể về kỹ thuật SEO xuất hiện từ shape của trang web, không xếp hạng hệ thống. Google và Bing chạy SaaS trang web qua giống nhau crawl → render → chỉ mục → xếp hạng pipeline as bất kỳ khác trang web; Điều gì thay đổi là Điều gì đó pipeline là pointed tại — app-shell marketing trang web, tài liệu on subdomain, freemium URL explosion, multi-region pricing setup. So điều này không phải khác discipline. nó ordinary kỹ thuật SEO applied để cụ thể và recurring đặt của structural facts.

sibling SaaS SEO checklist itemizes Điều gì để kiểm tra trên SaaS trang types. điều này deep dive là Vì sao nó happens và Cách nó hoạt động behind handful của kỹ thuật patterns — Vì sao app shells nguyên nhân duplicate misfires, Vì sao ngân sách crawl behaves differently cho freemium app, Vì sao noindex/robots.txt combo là self-defeating, Vì sao tài liệu subdomain-so với-subfolder là thực tradeoff, và Vì sao hreflang không touch currency. nơi chung mechanics trực tiếp trong của họ own các bài viết — JavaScript SEO, ngân sách crawl, subdomain so với subdirectory, hreflang, canonicalization — I’ll point ở đó thay vì re-giải thích, và focus on SaaS application.

tiêu chuẩn disclaimer I attach để tất cả điều này: nó my understanding của Cách những điều này các hệ thống hoạt động và Cách I’d approach vấn đề, không bảo đảm — engines thay đổi constantly, so verify so với chính tài liệu (linked trong Tài liệu chính thứcQuotes tabs).

app-shell vấn đề: Khi của bạn marketing trang web là single-trang app

Bắt đầu với đó pattern đó dominates SaaS SEO kỹ thuật và là nearly absent từ competing “SaaS technical SEO” (bản dịch) «SaaS SEO kỹ thuật» các hướng dẫn. Vì SaaS marketing các trang là so thường owned by sản phẩm engineering và được xây dựng on một JavaScript framework thay vì một CMS, they frequently ship as an app shell: đó ban đầu HTML là essentially một container, và đó real nội dung là injected by JavaScript sau load.

Đó reason này matters hơn “Google might not see my content” (bản dịch) «Google có thể không see my nội dung» là subtler và tệ hơn. Trong my JavaScript SEO hướng dẫn I described đó chế độ lỗi trực tiếp: “With app shell models, very little content and code may be shown in the initial HTML response. In fact, every page on the site may display the same code, and this code may be the exact same as the code on some other websites.” (bản dịch) «Với app shell models, very little nội dung và code có thể là shown trong đó ban đầu HTML phản hồi. Trong fact, mỗi trang on đó site có thể display đó giống nhau code, và này code có thể là đó chính xác giống nhau as đó code on some other websites.» Khi mỗi route máy chủ phản hồi là một near-giống hệt shell, Google deduplication có thể misfire: “This can sometimes cause pages to be treated as duplicates and not immediately go to rendering. Even worse, the wrong page or even the wrong site may show in search results.” (bản dịch) «Này có thể sometimes nguyên nhân các trang để là treated as duplicates và không immediately go để kết xuất. Ngay cả tệ hơn, đó sai trang hoặc ngay cả đó sai site có thể cho thấy trong kết quả tìm kiếm.»

Sit với đó. Đó site được lập chỉ mục — đây là chỉ được lập chỉ mục sai. Google clusters distinct marketing các trang together và picks đó sai canonical để cho thấy. đó là một chế độ lỗi với không real ecommerce hoặc media tương đương tại này quy mô, vì những site types ít hơn commonly ship đó entire domain as một JS bundle. MỘT nhanh tell, từ đó giống nhau hướng dẫn: “If you see a lot of URLs with a low word count in Site Audit, it may indicate you have this issue.” (bản dịch) «Nếu bạn see một lot of URLs với một thấp word count trong Site Audit, điều này có thể indicate bạn có này vấn đề.»

Điều gì cần máy chủ kết xuất so với Điều gì có thể stay client-được kết xuất

Đó framework cho deciding là về SEO stake, không aesthetics. Bất kỳ trang whose entire job là để là được tìm thấy và đọc by ai đó ai không logged trong — marketing, pricing, so sánh, tài liệu, blog — không nên phụ thuộc on client-side JavaScript để exist trong đó DOM. Của nó nội dung nên là present trong đó máy chủ phản hồi, qua SSR, static generation, hoặc hydration. As I put điều này: “Any kind of SSR, static rendering, and prerendering setup is going to be fine for search engines.” (bản dịch) «Bất kỳ kind of SSR, static kết xuất, và prerendering setup là going để là fine cho các công cụ tìm kiếm.» Đầy đủ client-side kết xuất là đó risky end of đó spectrum.

thực tế trong-app sản phẩm UI — logged-trong dashboard người dùng reaches sau khi authenticating — là opposite case. Google sẽ không bao giờ crawl behind của bạn login, so có không SEO stake trong Cách nó renders. nó có thể là đầy đủ CSR; đó fine. vấn đề là chỉ Khi app-như CSR patterns leak out onto công khai, pre-login marketing surface — mà là chính xác Điều gì single-trang-app architecture spanning toàn bộ domain làm. Draw line tại login wall: công khai side cần để render máy chủ-side; riêng tư side có thể làm whatever sản phẩm team likes.

Một extra argument cho SSR đó grown teeth lately: wave của AI các crawler hiện tại hitting các trang mostly không execute JavaScript. nếu của bạn công khai nội dung chỉ tồn tại sau khi client-side kết xuất, bạn’re invisible không chỉ để weakest tìm kiếm các crawler nhưng để đó đểàn bộ cohort — một nhiều hơn reason pre-login surface nên render on máy chủ.

Google/Bing split on dynamic kết xuất

Dynamic kết xuất — serving một pre-được kết xuất version để bots và đó client-side version để người dùng — là một genuine point nơi đó hai engines’ chính thức hướng dẫn diverges, và một SaaS bài viết không nên paper over điều này. Bing quản trị viên web team affirms điều này as acceptable: bingbot “is generally able to render JavaScript” (bản dịch) «là generally able để render JavaScript», nhưng Bing explicitly endorses dynamic kết xuất as non-cloaking “as long as you make a good faith effort to return the same content to all visitors, with the only difference being the content is rendered on the server for bots and on the client for real users.” (bản dịch) «miễn là bạn làm một good faith effort để trả về đó giống nhau nội dung để all khách truy cập, với đó chỉ khác biệt đang đó nội dung là được kết xuất on đó máy chủ cho bots và on đó client cho real người dùng.»

My own position là đó opposite, và I’ll flag điều này rõ ràng as my opinion. Trong my JavaScript SEO hướng dẫn I wrote đó dynamic kết xuất “is a workaround and, to be honest, I never recommended it” (bản dịch) «là một workaround và, để là honest, I không bao giờ được khuyến nghị điều này» — điều này làm setups hơn phức tạp và harder để troubleshoot, và “it’s definitely cloaking” (bản dịch) «đây là definitely cloaking» trong thực tế. So: Bing chính thức line calls điều này fine; Google own JS tài liệu treat điều này hơn as một legacy workaround hơn một đầu tiên lựa chọn; I’d tránh điều này. Nếu bạn có thể làm real SSR/SSG, làm đó thay vì dynamic kết xuất. Present này để của bạn team as một trực tiếp disagreement, không một settled best practice.

Một hơn app-shell-cụ thể cost worth naming: client-side dữ liệu fetching là expensive để crawl. As I noted trong đó hướng dẫn, “JavaScript XHR requests eat crawl budget, and I mean they gobble it down. Unlike most other resources that are cached, these get fetched live during the rendering process.” (bản dịch) «JavaScript XHR các yêu cầu eat ngân sách crawl, và I có nghĩa là they gobble điều này xuống. Unlike hầu hết other các tài nguyên đó là được lưu đệm, những nhận fetched trực tiếp during đó kết xuất xử lý.» An app-shell marketing site đó pulls của nó copy từ an API on mỗi route không chỉ risking duplicate clustering — đây là paying an uncached crawl cost on mỗi render.

Tài liệu: subdomain hoặc subfolder, và Vì sao nó thực tradeoff

Gần như mỗi SaaS company faces điều này decision và gần như không competing hướng dẫn addresses nó: làm tài liệu trực tiếp tại example.com/docs/ (subfolder) hoặc docs.example.com (subdomain)? decision là frequently forced — Mintlify, ReadMe, GitBook, và Notion-based tài liệu thường default để subdomain hoặc thứ ba-party domain — so nó worth understanding mechanics liệu hoặc không bạn nhận lựa chọn.

Đầu tiên, kill đó myth: có không xếp hạng hình phạt cho một subdomain. John Mueller có đã nói điều này plainly — “In general, we see these the same” (bản dịch) «Nhìn chung, we see những đó giống nhau» về cách Google xử lý subdomains so với subdirectories, thêm “I would personally try to keep things together as much as possible” (bản dịch) «I sẽ personally try để giữ điều together as nhiều as có thể» và, cho đó indifferent case, “if you’re like ‘well I don’t care either way’ then I would just keep it within the same site.” (bản dịch) «nếu bạn là như ‘well I không care either way’ thì I sẽ chỉ giữ điều này trong đó giống nhau site.»

Nhưng “không hình phạt” không “no difference.” (bản dịch) «không khác biệt.» Google own site-names tài liệu xác nhận điều này xử lý một subdomain as của nó own “site” — site names không supported tại đó subdirectory cấp độ. đó là đó closest điều để an chính thức kỹ thuật fact behind đó tradeoff, và điều này có concrete consequences:

  • Ngân sách crawl là theo-hostname. tách biệt tài liệu subdomain nhận của nó own crawl allocation. đó feature ( chậm hoặc hỏng tài liệu corpus sẽ không starve marketing trang web crawl, và vice versa) nhưng cũng cost (authority và internal-link tín hiệu không flow trên boundary tự động).
  • Search Console xử lý nó as tách biệt thuộc tính. bạn verify và monitor docs.example.com on của nó own. Easy để forget; easy để leave un-instrumented.
  • Versioned tài liệu multiply duplication. tài liệu corpus với v1/v2/legacy trees có thể generate enormous near-duplicate crawl waste — canonicalize unchanged old versions để hiện tại, hoặc differentiate them rõ ràng.

Ở đây vì sao tài liệu là arguably đó legitimate subdomain case Mueller mô tả as “slightly different” (bản dịch) «slightly khác nhau»: một tài liệu corpus có của nó own phát hành cadence, của nó own information architecture, và thường của nó own bên thứ ba tooling. Nếu bạn có một free lựa chọn và muốn để consolidate authority và internal-linking tín hiệu, subfolder là đó cleaner default. Nếu của bạn tooling forces một subdomain, hoặc bạn muốn đó tài liệu’ crawl và authority pool isolated từ đó marketing site, subdomain là fine — chỉ link điều này prominently từ đó marketing nav/footer so authority reaches điều này, và verify điều này riêng.

Ngân sách crawl và freemium URL vấn đề

“Why would a SaaS site have a crawl-budget problem at all — we’re not an ecommerce site with millions of product pages?” (bản dịch) «Vì sao sẽ một SaaS site có một crawl-budget vấn đề tại all — chúng ta là không an ecommerce site với millions of sản phẩm các trang?» Vì freemium và trial các sản phẩm generate đó giống nhau URL sprawl qua một khác nhau mechanism. Mỗi dashboard state, mỗi người dùng profile, mỗi shareable “here’s my report” (bản dịch) «ở đây my báo cáo» trang, mỗi step of một trial flow có thể mint một unique, technically crawlable URL.

Để Googlebot, đó là indistinguishable từ đó classic thấp-giá trị-URL categories Google có named cho năm — faceted navigation, session IDs, infinite spaces. Đó lớn-site crawl-budget hướng dẫn và Gary Illyes’ original crawl-budget post lay out những categories; đó SaaS instances map straight onto them. Người dùng profile các trang và theo-session dashboard trạng thái là của bạn “faceted navigation.” (bản dịch) «faceted navigation.» Trial-flow step URLs và share-một-báo cáo các trang là của bạn “infinite spaces.” (bản dịch) «infinite spaces.» đây là đó giống nhau waste, SaaS-flavored.

Bing frames đó giống nhau ý tưởng hơn bluntly. Fabrice Canel line là worth taping để đó wall: “Less is more for SEO. Never forget that. Less URLs to crawl, better for SEO.” (bản dịch) «Ít hơn là hơn cho SEO. Không bao giờ forget đó. Ít hơn URLs để crawl, tốt hơn cho SEO.» Mỗi extra dashboard permutation không neutral; đây là một self-inflicted crawl cost ngay cả trước quality enters đó picture. Illyes có riêng described crawl scheduling as Google ordering một site URLs by importance và hoạt động qua đó bucket as far as đó máy chủ có thể xử lý (Công cụ tìm kiếm Roundtable coverage) — so junk URLs không chỉ sit harmlessly; they compete cho đó giống nhau finite fetch capacity as của bạn marketing và tài liệu các trang.

Đây là architecture, không cleanup

cốt yếu reframing: khắc phục cho freemium URL sprawl là architectural, decided lên front — không theo-trang noindex cleanup sau khi các URL đã exist. giữ đó toàn bộ surface out của crawlable space từ bắt đầu: either behind authentication (so nó không bao giờ fetchable) hoặc blocked as space trong robots.txt. Trying để remediate sau khi fact — letting Google discover million dashboard các URL và sau đó bolting noindex onto template — là cả hai chậm hơn và, as tiếp theo section hiển thị, easy để nhận chính xác sai.

và đúng tempting myth ở đây explicitly: noindex không save ngân sách crawl. Google vẫn có để yêu cầu trang để see noindex tag, so noindex trang là vẫn được crawl trang. nếu goal là để dừng Google spending fetches on toàn bộ section, noindex là sai tool — bạn cần robots.txt disallow (hoặc giữ nó behind auth). Một nhiều hơn corrective cho nhóm tempted để over-chỉ mục on điều này: sửa crawl waste lifts efficiency, không thứ hạng. increased tốc độ crawl không, by itself, improve của bạn positions ( point Google itself có đã làm trong của nó crawl-budget post). reason để khắc phục nó là để hãy đảm bảo crawl lands on của bạn marketing, pricing, và tài liệu các trang thay vì infinite dashboard permutations — as I’ve put nó trước khi trong my crawl-budget hướng dẫn, nhiều hơn crawling không có nghĩa là bạn’ll xếp hạng tốt hơn, nhưng nếu của bạn các trang không phải được crawl và được lập chỉ mục họ có thể’t xếp hạng tại all.

Noindex so với robots.txt: kinh điển SaaS conflict

Ở đây single phần lớn phổ biến thực-world SaaS kỹ thuật mistake, và nó xuất hiện straight out của trước đó section. team wants để giữ /app/, /dashboard/, hoặc /trial/ out của Google. So họ làm cả hai: block space trong robots.txt thêm noindex để những điều đó templates, figuring belt-và-suspenders là safer.

nó backwards. hai controls interact, và combining them điều này way là self-defeating. noindex requires trang để là crawlable để là seen — Google có để fetch trang để đọc tag. robots.txt disallow ngăn đó fetch. So on URL đó cả hai disallowed và noindexed, Google không bao giờ crawl nó, không bao giờ sees noindex, và — nếu bất cứ điều gì links để đó URL externally — URL có thể vẫn surface trong kết quả tìm kiếm, chỉ không có snippet. bạn’ve produced chính xác leak bạn là trying để ngăn, và hiện tại Bạn có thể’t khắc phục nó với noindex vì robots block dừng crawl đó noindex cần.

Google noindex tài liệu trạng thái đó mechanism và đó precondition trực tiếp. Khi Googlebot crawl đó trang và sees đó tag, “Google will drop that page entirely from Google Search results, regardless of whether other sites link to it” (bản dịch) «Google sẽ drop đó trang hoàn toàn từ Google Search kết quả, regardless of liệu other các trang link để điều này» — nhưng “for the noindex rule 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.” (bản dịch) «cho đó rule để là effective, đó trang hoặc tài nguyên không được là blocked by một robots.txt file, và điều này có để là nếu không accessible để đó crawler.» Một tool theo goal: noindex để giữ một crawlable trang out of đó chỉ mục; robots.txt để dừng crawling một toàn bộ space bạn không care về lập chỉ mục. Không bao giờ cả hai on đó giống nhau URL.

JS-injected noindex là doubly fragile on app shell

có SaaS-cụ thể twist đó stacks bên cạnh app-shell vấn đề. nếu của bạn noindex tag là chỉ đã thêm by client-side JavaScript — không present trong ban đầu máy chủ phản hồi — sau đó nó phụ thuộc vào Google successfully kết xuất trang để là seen tại all. đó precisely layer đó least reliable on app-shell architecture, và công cụ tìm kiếm Roundtable có reported Google bug nơi noindex injected qua JavaScript trong React-style app đã không luôn respected và các trang đã nhận được lập chỉ mục anyway.

takeaway là rule: cho bất cứ điều gì on JavaScript-nặng SaaS trang web, put noindex trong máy chủ-được kết xuất HTML hoặc HTTP header, không trong tag của bạn framework injects tại runtime. noindex đó chỉ tồn tại sau khi render là noindex Bạn có thể’t rely on.

Multi-region SaaS: canonical và hreflang không phải pricing giải pháp

cuối cùng SaaS-cụ thể pattern là cho các sản phẩm đó sell vào multiple countries. recurring conflation là treating hreflang as currency giải pháp. nó không phải. Hreflang đểàn bộ contract là language + region targeting — telling Google mà URL để đổi vào SERP cho searcher trong được cho language/locale. nó nói không có gì về mà price để display.

So US/UK/AU pricing trang, all trong English nhưng mỗi cho thấy khác currency, là không solved by hreflang. đó hai tách biệt các vấn đề:

  • ** region-targeting câu hỏi** — mà của three English các trang nên hiển thị cho UK searcher — là hreflang/canonical job. sử dụng theo-region các URL với self-referencing canonicals plus các chú thích hreflang giữa them.
  • ** currency-display câu hỏi** — mà price hiển thị on trang — cần của nó own mechanism hoàn toàn: URL-based regional các trang, geo-IP, account setting, hoặc rõ ràng region picker. Hreflang sẽ không bao giờ touch nó.

Và một caution ngay cả sau khi bạn’ve đã xong đó region targeting right: nếu đó các trang là giống nhau-language và near-giống hệt apart từ một currency hình, Google có thể vẫn consolidate them as duplicates regardless of hreflang, vì đó nội dung không meaningfully khác nhau. Google multi-regional hướng dẫn addresses chính xác này case: “If you provide similar or duplicate content on different URLs in the same language as part of a multi-regional site (for instance, if both example.de/ and example.com/de/ show similar German language content), pick a preferred version and use the rel="canonical" element and hreflang tags to make sure that the correct language or regional URL is served to searchers.” (bản dịch) «Nếu bạn cung cấp similar hoặc duplicate nội dung on khác nhau URLs trong đó giống nhau language as part of một multi-regional site (chẳng hạn, nếu cả hai và cho thấy similar German language nội dung), pick một được ưu tiên version và dùng đó element và tags để hãy bảo đảm đó correct language hoặc regional URL là phân phối để searchers.» Đó lesson cho SaaS: nếu đó chỉ khác biệt giữa của bạn regional pricing các trang là đó number, differentiate them meaningfully hoặc accept đó Google có thể fold them together — và xử lý currency as một display concern, không an hreflang một. (Worth một note: Bing leans on đó content-language meta tag thay vì hreflang, so của nó international xử lý diverges từ Google.)

kỹ thuật throughline

Step lại và mỗi một của những điều này là thực sự giống nhau tension. SaaS sản phẩm-engineering habits — xây dựng mọi thứ as single-trang app, generate URL cho mọi thứ, ship fast và thêm internationalization sau đó — collide với Điều gì các công cụ tìm kiếm cần: ổn định, crawlable, non-duplicated, appropriately-scoped các URL. app shell là SPA-mọi thứ đáp ứng deduplication. freemium URL explosion là generate—URL-cho-mọi thứ đáp ứng ngân sách crawl. multi-region mess là ship-fast-thêm-i18n-sau đó đáp ứng hreflang và canonical.

và trong mỗi case durable khắc phục là giống nhau: architectural intent, decided sớm — render công khai surface máy chủ-side, giữ app surface out của crawlable space, phạm vi của bạn international các URL có chủ ý — thay vì remediation sau khi các URL đã exist. đó toàn bộ của SaaS kỹ thuật SEO: không khác rulebook, chỉ ordinary rulebook applied với foresight để cụ thể shape của trang web.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.