SEO técnico para SaaS
Os padrões de SEO técnico específicos de empresas de software — sites de marketing com app shell em JavaScript e o que precisa de renderização não servidor, documentação em subdomínio ou subpasta, desperdício de orçamento de rastreamento causado pela explosão de URLs freemium, conflitos entre noindex e robots.txt e por que hreflang não resolve preços em várias moedas.
Idiomas
1 sinal de evidência nesta página
- Ferramenta relacionada ativaRaw vs. Rendered HTML Checker
SEO técnico para SaaS é o trabalho comum de rastrear → renderizar → indexar → ranquear aplicado um uma superfície técnica incomum: sites de marketing com app shell em JavaScript (que correm o risco de ser agrupados como duplicatas, não apenas de ficar invisíveis), documentação em subdomínio ou subpasta (uma troca real entre rastreamento e autoridade, não uma penalidade), produtos freemium que geram enormes quantidades de URLs de painéis, avaliações e usuários (desperdício de orçamento de rastreamento disfarçado de conteúdo), conflitos entre noindex e robots.txt (o erro clássico de SaaS) e preços por região (em que hreflang trata de idioma e região, nunca de moeda). Google e Bing processam um site SaaS pelo mesmo pipeline de qualquer outro site; o que é específico de SaaS é um superfície, não algoritmo. UM correção para quase tudo é decidir cedo um intenção arquitetural, não remediar depois que as URLs existem.
TL;DR — SaaS técnico SEO é regular técnico SEO — crawling, rendering, indexação — applied para o handful de técnico setups que mostre up over e over em software companies’ sites. há não special “SaaS algorithm.” What’s diferente é o shape de o site: um marketing site criado like um app, ajuda documentação em um separado address, um gratuito/trial produto que spits out endless URLs, e (se você sell em multiple countries) pricing páginas que precisa careful handling.
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
por que SaaS sites precisa seu próprio técnico checklist
UM SaaS site obtém crawled, renderizado, indexed, e ranked com o exact mesmo pipeline as um recipe blog — há não separado classificação sistema para software companies. What’s diferente é o shape de o site. Porque um SaaS produto é software, seu marketing site tends para ser criado like software, seu documentação live em seu próprio address, e seu gratuito tier silenciosamente generates thousands de páginas ninguém deve ser indexação. Esses structural facts crie o mesmo handful de técnico problems em SaaS site depois SaaS site. Ali são four worth knowing sobre.
1. O marketing site é criado like um app
SaaS marketing sites são frequentemente criado por o produto engineering team usando ferramentas like React, Vue, ou Next.js — não em um website CMS. Quando isso é done wrong, o página arrives em Google quase empty, e todos o real conteúdo (headlines, prices, copy) obtém loaded em afterward por JavaScript. Se Google não run que JavaScript successfully, isso indexes um blank página. O fix é para verifique o importante conteúdo é em o página de o início (isso é o que “server-side rendering” significa).
2. O documentação live em algum lugar caso contrário
Ajuda documentação frequentemente sits em seu próprio address like docs.example.com em vez de
example.com/docs/. Neither um é penalized por Google — isso é genuinely um
your-choice decision. Mas um separado address é treated as seu próprio “site,” so isso é
worth knowing isso é um tradeoff, não um gratuito lunch.
3. UM gratuito/trial produto faz um lot de URLs
Se pessoas pode sign up e use um gratuito version de seu produto, cada dashboard, cada saved relatório, cada etapa de o trial flow pode crie seu próprio web address. para Google que looks like thousands de near-worthless páginas, e isso pode waste tempo crawling eles em vez de seu real marketing páginas. O fix é para mantenha que stuff out de Google’s reach em o primeiro place — geralmente behind um login.
4. Diferente countries precisa care
Se você mostre diferente prices em diferente countries, o tags que tell Google “este é o UK version” (called hreflang) handle idioma e região — mas eles do não handle currency. isso é um common mix-up worth knowing sobre.
isso é o shape de isso. para como cada de estes na realidade funciona — o app-shell duplicate problema, o docs-subdomain tradeoff em detail, o crawl-budget mechanics, e o noindex mistakes que trip up nearly cada SaaS team — switch para o Advanced tab.
TL;DR — Não SaaS algorithm — mesmo crawl → render → index → rank pipeline as qualquer site; what’s SaaS-specific é o técnico surface isso runs contra. App-shell marketing sites risk being clustered as duplicates e mis-canonicalized, não just going invisible — so marketing/pricing/documentação/blog precisa SSR/SSG enquanto o logged-in produto UI pode stay client-rendered porque Google nunca crawls isso. documentação em um subdomain vs subfolder é um real crawl/autoridade tradeoff (um subdomain é um distinct “site”), não um penalty. Freemium apps mint o SaaS version de “faceted navegação” e “infinite spaces” — dashboards, trial-flow etapas, shareable user-generated páginas — e o fix é architectural (auth-gate ou robots.txt), porque
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 URLsnoindexnão save crawl budget. O classic SaaS mistake é blocking um space em robots.txt e noindexing isso, so onoindexé nunca seen; um JS-injectednoindexé doubly fragile em um app shell. E hreflang targets idioma/região, nunca currency.
início aqui: o surface, não algorithm
Everything SaaS-specific sobre técnico SEO vem de o shape de o site, não classificação sistema. Google e Bing run um SaaS site por o mesmo crawl → render → index → rank pipeline as qualquer outro site; o que alterações é o que pipeline é pointed em — um app-shell marketing site, documentação em um subdomain, um freemium URL explosion, um multi-region pricing setup. So este não é um diferente discipline. isso é ordinary técnico SEO applied para um específico e recurring set de structural facts.
O sibling SaaS SEO checklist itemizes o o que para verifique across SaaS página types. este deep dive é o por que isso happens e como isso funciona behind o handful de técnico patterns — por que app shells cause duplicate misfires, por que crawl budget behaves differently para um freemium app, por que o noindex/robots.txt combo é self-defeating, por que documentação subdomain-vs-subfolder é um real tradeoff, e por que hreflang não touch currency. Onde o general mechanics live em seu próprio articles — JavaScript SEO, crawl budget, subdomain vs subdirectory, hreflang, canonicalization — I’ll point ali rather than re-explain, e focus em o SaaS application.
O standard disclaimer I attach para todos de este: isso é meu understanding de como estes systems trabalho e como I’d approach o problema, não um guarantee — o engines altere constantly, so verifique contra o primary documentação (linked em o Official documentação e Quotes tabs).
O app-shell problema: quando seu marketing site é um single-page app
início com o pattern que dominates SaaS técnico SEO e é nearly absent de competing “SaaS técnico SEO” guides. Porque SaaS marketing sites são so frequentemente owned por produto engineering e criado em um JavaScript estrutura rather than um CMS, eles frequently ship as um app shell: o initial HTML é essentially um container, e o real conteúdo é injected por JavaScript depois load.
O reason este matters mas than “Google pode não see meu conteúdo” é subtler e worse. Em meu JavaScript SEO guide I described o failure modo diretamente: “Com app shell models, very little conteúdo e código pode ser mostrado em o initial HTML resposta. Em fact, cada página em o site pode display o mesmo código, e este código pode ser o exact mesmo as o código em some outro websites.” Quando cada route’s servidor resposta é um near-identical shell, Google’s deduplication pode misfire: “este pode sometimes cause páginas para ser treated as duplicates e não immediately go para rendering. Even worse, o wrong página ou even o wrong site pode mostre em resultados de pesquisa.”
Sit com que. O site é indexed — isso é just indexed wrong. Google clusters distinct marketing páginas together e picks o wrong canonical para mostre. isso é um failure modo com não real comércio eletrônico ou media equivalent em este scale, porque esses site types menos commonly ship o entire domain as um JS bundle. UM quick tell, de o mesmo guide: “Se você see um lot de URLs com um low word count em site Auditoria, isso pode indicate você têm este problema.”
O que precisa servidor rendering vs o que pode stay client-rendered
O estrutura para deciding é sobre SEO stake, não aesthetics. Qualquer página whose entire job é para ser encontrado e read por alguém quem não é logged em — marketing, pricing, comparação, documentação, blog — deve não depend em client-side JavaScript para exist em o DOM. Seu conteúdo deve ser present em o servidor resposta, via SSR, static geração, ou hydration. As I put isso: “Qualquer kind de SSR, static rendering, e prerendering setup é going para ser fine para mecanismos de busca.” Full client-side rendering é o risky end de o spectrum.
O real in-app produto UI — o logged-in dashboard um usuário reaches depois authenticating — é o opposite caso. Google vai nunca crawl behind seu login, so há não SEO stake em como isso renders. Isso pode ser full CSR; isso é fine. O problema é somente quando app-like CSR patterns leak out onto o público, pre-login marketing surface — qual é exactly o que um single-page-app architecture spanning o inteiro domain faz. Draw o line em o login wall: público side precisa para render server-side; private side pode do whatever o produto team likes.
Um extra argument para SSR isso é grown teeth lately: o wave de AI crawlers agora hitting sites mostly não execute JavaScript. Se seu público conteúdo somente existe depois client-side rendering, você está invisible não just para o weakest pesquisa crawlers mas para que entire cohort — um mas reason o pre-login surface deve render em o servidor.
O Google/Bing split em dynamic rendering
Dynamic rendering — serving um pre-rendered version para bots e o client-side
version para usuários — é um genuine point onde o dois engines’ official guidance
diverges, e um SaaS article shouldn’t paper over isso. Bing’s webmaster team affirms isso
as acceptable: bingbot “é generally able para render JavaScript”, mas Bing
“bingbot is generally able to render JavaScript”
(tradução) «o Bingbot geralmente consegue renderizar JavaScript»
explicitly endorses dynamic rendering
as non-cloaking “desde que você faça um good faith effort para return o mesmo conteúdo para
todos visitors, com o somente diferença being o conteúdo é renderizado em o servidor para
bots e em o client para real usuários.”
meu próprio position é o opposite, e I’ll flag isso clearly as meu opinion. Em meu JavaScript SEO guide I wrote que dynamic rendering “é um workaround e, para ser honest, I nunca recommended isso” — isso faz setups mas complex e harder para troubleshoot, e “isso é definitely cloaking” em practice. So: Bing’s official line calls isso fine; Google’s próprio JS documentação treat isso mas as um legacy workaround than um primeiro escolha; I’d avoid isso. Se você pode do real SSR/SSG, do que em vez de dynamic rendering. Present este para seu team as um live disagreement, não um settled best practice.
Um mas app-shell-specific cost worth naming: client-side dados fetching é expensive para crawl. As I noted em o guide, “JavaScript XHR solicitações eat crawl budget, e I mean eles gobble isso down. Unlike maioria outro resources que são cached, estes obtenha fetched live during o rendering process.” Um app-shell marketing site que pulls seu copy de um API em cada route não é just risking duplicate clustering — isso é paying um uncached crawl cost em cada render.
documentação: subdomain ou subfolder, e por que isso é um real tradeoff
quase cada SaaS company faces este decision e quase não competing guide addresses
isso: faz documentação live em example.com/docs/ (subfolder) ou docs.example.com
(subdomain)? O decision é frequently forced — Mintlify, ReadMe, GitBook, e
Notion-based documentação frequentemente default para um subdomain ou um third-party domain — so isso é worth
understanding o mechanics se ou não você obtenha um escolha.
Primeiro, kill o myth: há não classificação penalty para um subdomain. John Mueller tem
disse isso plainly — “Em general, nós see estes o mesmo”
sobre como Google trata subdomains vs subdirectories, adding “I iria personally try para
mantenha itens together as muito as possível” e, para o indifferent caso,
“se você está like ‘well I não care either way’ então I iria just mantenha isso within o
mesmo site.”
“if you’re like ‘well I don’t care either way’ then I would just keep it within the same site.”
(tradução) «se você está like ‘well I não care either way’ então I iria just mantenha isso within o mesmo site.»
Mas “não penalty” não é “não diferença.” Google’s próprio
“Google Search does not support site names at the subdirectory level”
(tradução) «a Pesquisa Google não oferece suporte a nomes de site no nível de subdiretório»
site-names documentação
confirms isso trata um subdomain as seu próprio “site” — site nomes não são supported em o
subdirectory nível. isso é o closest item para um official técnico fact behind o
tradeoff, e isso tem concrete consequences:
- Crawl budget é per-hostname. UM separado documentação subdomain obtém seu próprio crawl allocation. isso é um feature (um slow ou broken documentação corpus não vai starve o marketing site’s crawl, e vice versa) mas também um cost (autoridade e internal-link sinal não flow across o boundary automaticamente).
- Pesquisa Console trata isso as um separado property. Você verifique e monitor
docs.example.comem seu próprio. Easy para forget; easy para leave un-instrumented. - Versioned documentação multiply duplication. UM documentação corpus com v1/v2/legacy trees pode generate enormous near-duplicate crawl waste — canonicalize unchanged antigo versions para current, ou differentiate eles clearly.
Here’s por que documentação são arguably o legitimate subdomain caso Mueller describes as “slightly diferente”: um documentação corpus tem seu próprio lançamento cadence, seu próprio informações architecture, e frequentemente seu próprio third-party tooling. Se você têm um gratuito escolha e quer para consolidate autoridade e internal-linking sinal, subfolder é o cleaner default. Se seu tooling forces um subdomain, ou você quer o docs’ crawl e autoridade pool isolated de o marketing site, subdomain é fine — just link isso prominently de o marketing nav/footer so autoridade reaches isso, e verifique isso separately.
Crawl budget e o freemium URL problema
“por que iria um SaaS site têm um crawl-budget problema em todos — we’re não um comércio eletrônico site com millions de produto páginas?” Porque freemium e trial produtos generate o mesmo URL sprawl por um diferente mechanism. cada dashboard state, cada usuário profile, cada shareable “here’s meu relatório” página, cada etapa de um trial flow pode mint um único, technically crawlable URL.
para Googlebot, isso é indistinguishable de o classic low-value-URL categorias Google tem named para anos — faceted navegação, session IDs, infinite spaces. O large-site crawl-budget guide e Gary Illyes’ original crawl-budget post lay out esses categorias; o SaaS instances map straight onto eles. Usuário profile páginas e per-session dashboard declara são seu “faceted navegação.” Trial-flow etapa URLs e share-a-report páginas são seu “infinite spaces.” isso é o mesmo waste, SaaS-flavored.
Bing frames o mesmo idea mas bluntly. Fabrice Canel’s line é worth taping para o wall:
“Less is more for SEO. Never forget that. Less URLs to crawl, better for SEO”
(tradução) «menos é mais para SEO. Nunca se esqueça disso. Menos URLs para rastrear, melhor para o SEO»
“Menos é mas para SEO. nunca forget que. Menos URLs para crawl, better para SEO.”
cada extra dashboard permutation não é neutral; isso é um self-inflicted crawl cost even
antes qualidade enters o picture. Illyes tem separately described crawl scheduling as
Google ordering um site’s URLs por importance e funcionando por que bucket as far as o
servidor pode handle (Mecanismo de busca Roundtable cobertura) —
so junk URLs não just sit harmlessly; eles compete para o mesmo finite fetch capacity
as seu marketing e documentação páginas.
Isto é architecture, não cleanup
O critical reframing: o fix para freemium URL sprawl é architectural, decided up
front — não um per-page noindex cleanup depois o URLs já exist. Mantenha que inteiro
surface out de o crawlable space de o início: either behind authentication (so isso é
nunca fetchable) ou blocked as um space em robots.txt. Trying para remediate depois o
fact — letting Google discover um million dashboard URLs e então bolting noindex onto
o template — é ambos slower e, as o next section mostra, easy para obtenha exactly wrong.
E correto o tempting myth aqui explicitly: noindex faz não save crawl budget.
Google ainda tem para solicitação página para see o noindex tag, so um noindex página é
ainda um crawled página. Se o objetivo é para stop Google spending fetches em um inteiro section,
noindex é o wrong ferramenta — você precisa robots.txt disallow (ou mantenha isso behind auth).
Um mas corrective para equipes tempted para over-index em este: fixing crawl waste lifts
efficiency, não rankings. Um increased crawl rate não, por itself, improve seu
positions (um point Google itself tem feito em seu
crawl-budget post).
O reason para fix isso é para verifique crawl lands em seu marketing, pricing, e documentação
páginas em vez de infinite dashboard permutations — as I’ve put isso antes em meu
crawl-budget guide, mas crawling não mean
você vai rank better, mas se seu páginas não são crawled e indexed eles não pode rank em todos.
Noindex vs robots.txt: o classic SaaS conflict
Here’s o single maioria common real-world SaaS técnico mistake, e isso vem straight
out de o previous section. UM team quer para mantenha /app/, /dashboard/, ou /trial/
out de Google. So eles do ambos: block o space em robots.txt e adicione noindex
para esses templates, figuring belt-and-suspenders é safer.
isso é ao contrário. O dois controls interact, e combining eles este way é
self-defeating. noindex requires o página para ser crawlable para ser seen — Google tem
para fetch o página para read o tag. robots.txt disallow prevents que fetch. So em um
URL isso é ambos disallowed e noindexed, Google nunca crawls isso, nunca sees o
noindex, e — se anything links para que URL externally — o URL pode ainda surface em
resultados de pesquisa, just sem um snippet. você já produced o exact leak você eram trying
para prevent, e agora você pode’t fix isso com noindex porque o robots block stops o
crawl que noindex precisa.
Google’s noindex documentação
declara o mechanism e o precondition diretamente. Quando Googlebot crawls o página e
sees o tag, “Google vai drop que página entirely de Google pesquisa resultados,
regardless de se outro sites link para isso” — mas “para o noindex regra para ser
effective, o página ou resource deve não ser blocked por um robots.txt arquivo, e isso tem para
ser otherwise accessible para o crawler.” Um ferramenta per objetivo: noindex para mantenha um
crawlable página out de o index; robots.txt para stop crawling um inteiro space você não
care sobre indexação. nunca ambos em o mesmo URL.
JS-injected noindex é doubly fragile em um app shell
há um SaaS-specific twist que stacks em top de o app-shell problema. Se seu
noindex tag é somente adicionado por client-side JavaScript — não present em o initial
servidor resposta — então isso depends em Google successfully rendering o página para ser seen em
todos. isso é precisely o layer isso é least reliable em um app-shell architecture, e
Mecanismo de busca Roundtable tem
reported um Google bug
onde noindex injected via JavaScript em um React-style app wasn’t sempre respected e
páginas obteve indexed anyway.
O takeaway é um regra: para anything em um JavaScript-heavy SaaS site, put noindex em
o server-rendered HTML ou o HTTP header, não em um tag seu estrutura injects em
runtime. UM noindex que somente existe depois render é um noindex você pode’t rely em.
Multi-region SaaS: canonical e hreflang não são um pricing solution
O last SaaS-specific pattern é para produtos que sell em multiple countries. O recurring conflation é treating hreflang as um currency solution. Isso não é. Hreflang’s entire contract é idioma + região targeting — telling Google qual URL para troca em o SERP para um searcher em um fornecido idioma/locale. Isso says nothing sobre qual preço para display.
So um US/UK/ao pricing página, todos em English mas cada showing um diferente currency, é não solved por hreflang. isso é dois separado problems:
- O region-targeting pergunta — qual de o three English páginas deve mostre para um UK searcher — é o hreflang/canonical job. use per-region URLs com self-referencing canonicals mais hreflang annotations entre eles.
- O currency-display pergunta — qual preço mostra em o página — precisa seu próprio mechanism entirely: URL-based regional páginas, geo-IP, um conta setting, ou um explícito região picker. Hreflang vai nunca touch isso.
E um caution even depois você já done o região targeting right: se o páginas são
same-language e near-identical apart de um currency figure, Google pode ainda consolidate
eles as duplicates regardless de hreflang, porque o conteúdo não é meaningfully
diferente. Google’s
“If you provide similar or duplicate content on different URLs in the same language”
(tradução) «se você disponibilizar conteúdo semelhante ou duplicado em URLs diferentes no mesmo idioma»
multi-regional guidance
addresses exactly este caso: “Se você provide similar ou duplicate conteúdo em diferente
URLs em o mesmo idioma as parte de um multi-regional site (para instance, se ambos
example.de/ e example.com/de/ mostre similar German idioma conteúdo), pick um
preferred version e use o rel="canonical" element e hreflang tags para verifique
que o correto idioma ou regional URL é served para searchers.” O lesson para SaaS:
se o somente diferença entre seu regional pricing páginas é o number, differentiate
eles meaningfully ou accept que Google pode fold eles together — e handle currency as um
display concern, não um hreflang um. (Worth um note: Bing leans em o content-language
meta tag rather than hreflang, so seu international handling diverges de Google’s.)
O técnico throughline
Etapa back e cada um de estes é really o mesmo tension. SaaS product-engineering habits — build everything as um single-page app, generate um URL para everything, ship fast e adicione internationalization later — collide com o que mecanismos de busca precisa: stable, crawlable, non-duplicated, appropriately-scoped URLs. O app shell é SPA-everything meeting deduplication. O freemium URL explosion é generate-a-URL-for-everything meeting crawl budget. O multi-region mess é ship-fast-add-i18n-later meeting hreflang e canonical.
E em cada caso o durable fix é o mesmo: architectural intenção, decided early — render o público surface server-side, mantenha o app surface out de o crawlable space, escopo seu international URLs deliberately — rather than remediation depois o URLs já exist. isso é o inteiro de SaaS técnico SEO: não um diferente rulebook, just o ordinary rulebook applied com foresight para um específico shape de site.
AI summary
UM condensed take em o Advanced version:
- Não SaaS algorithm. Mesmo crawl → render → index → rank pipeline as qualquer site; what’s SaaS-specific é o shape de o técnico surface, não classificação regras.
- App shells são um duplicate-content risk, não just um invisibility risk. Quando cada route ships um near-identical HTML shell, Google pode cluster distinct páginas as duplicates e mostre o wrong canonical — o site é indexed wrong, não just missing.
- SSR vs CSR é decided em o login wall. Público pre-login páginas (marketing, pricing, documentação, blog) precisa SSR/SSG/hydration; o logged-in produto UI pode stay full CSR porque Google nunca crawls isso. Non-JS AI crawlers são um mas argument para SSR em o público surface.
- Dynamic rendering é contested. Bing officially calls isso acceptable e non-cloaking; Patrick’s position (e Google’s próprio leaning) trata isso as um workaround — “isso é definitely cloaking” — so prefer real SSR/SSG.
- documentação subdomain vs subfolder é um real tradeoff, não um penalty. Não classificação diferença (Mueller: “nós see estes o mesmo”), mas um subdomain é um distinct “site”: per-hostname crawl budget, separado Pesquisa Console property, autoridade não flow automaticamente.
- Freemium apps mint o SaaS version de faceted-nav/infinite-spaces waste —
dashboards, trial-flow etapas, shareable usuário páginas. O fix é architectural (auth-gate
ou robots.txt), não per-page
noindexdepois o fact — enoindexnão save crawl budget porque o página ainda tem para ser fetched. - O classic SaaS mistake: blocking um space em robots.txt e noindexing isso, so o
noindexé nunca seen e externally-linked URLs ainda leak em resultados. Um ferramenta per objetivo. JS-injectednoindexé extra-fragile em um app shell — put isso em o servidor HTML ou HTTP header. - Hreflang targets idioma/região, nunca currency. Região targeting é um canonical/hreflang job; currency display precisa seu próprio mechanism (geo-IP, conta setting, região picker). Near-identical regional páginas pode ser consolidated anyway.
Official documentação
O primary sources behind o SaaS-specific técnico patterns. UM SaaS site é governed por estes o mesmo as qualquer outro site.
Google — JavaScript / rendering
- Understand JavaScript SEO basics — o crawl/render/index phases, o render-queue delay, real
<a href>links, History API routing, e o caso para server-side/pre-rendering. - Fix Search-related JavaScript problems — History API guidance e soft-404 handling para client-side routed apps.
- Rendering em o Web (web.dev) — o Chrome/Google team’s próprio trade-off writeup de CSR/SSR/SSG/hydration; o estrutura para “o que precisa servidor rendering vs client rendering.”
Google — crawl budget / low-value URLs
- Optimize seu crawl budget — crawl capacity × crawl demand, “perceived inventory,” e por que blocking low-value spaces em robots.txt (não
noindex) é como você save crawl budget. - O que Crawl Budget significa para Googlebot (Gary Illyes, 2017) — o canonical lista de low-value-add URL categorias (faceted nav, session IDs, infinite spaces) que freemium URL sprawl maps onto.
Google — noindex / robots.txt
- Block Pesquisa indexação com noindex — como
noindexfunciona e o robots.txt precondition que trips up nearly cada SaaS app-page setup. - Robots.txt introduction — o companion decision: block crawling entirely vs allow-crawl-but-noindex.
Google — subdomains / multi-region
- site nomes em Google pesquisa — confirms Google trata um subdomain as seu próprio “site” (não supported em o subdirectory nível).
- Managing multi-regional e multilingual sites — o same-language regional-duplicate caso (
example.de/vsexample.com/de/) que recurs em SaaS. - Tell Google sobre localized versions de seu página (hreflang) — base hreflang mechanics; idioma/região, não currency.
- O que é URL canonicalization — “um hint, não um regra,” relevante quando um
?region=ou?currency=parameter é layered em regional páginas.
Bing / Microsoft
- bingbot Series: JavaScript, Dynamic Rendering, e Cloaking. Oh meu! — Bing’s position que bingbot renders JavaScript e seu endorsement de dynamic rendering as non-cloaking (onde Bing e meu próprio view diverge).
- bingbot Series: Maximizing Crawl Efficiency — Bing’s crawl-efficiency framing, diretamente applicable para freemium URL sprawl.
Quotes de o source
On-the-record statements de Google, Bing, e Google reps, mais meu próprio first-party writing. cada search-engine link deep-links para o quoted passage em o source página.
Google — noindex e seu robots.txt precondition
- “Google vai drop que página entirely de Google pesquisa resultados, regardless de se outro sites link para isso.”
“Google will drop that page entirely from Google Search results”
(tradução) «o Google removerá essa página por completo dos resultados da Pesquisa Google»
Jump para quote - “para o
noindexregra para ser effective, o página ou resource deve não ser blocked por um robots.txt arquivo, e isso tem para ser otherwise accessible para o crawler.” “must not be blocked by a robots.txt file”
(tradução) «não pode estar bloqueado por um arquivo robots.txt»
Jump para quote
Google — subdomains as distinct “sites”
- “Google pesquisa faz não support site nomes em o subdirectory nível.” (Confirming um subdomain é treated as seu próprio “site.”) Jump para quote
Google — multi-region duplicates
- “Se você provide similar ou duplicate conteúdo em diferente URLs em o mesmo idioma as parte de um multi-regional site (para instance, se ambos
example.de/eexample.com/de/mostre similar German idioma conteúdo), pick um preferred version e use orel="canonical"element ehreflangtags para verifique que o correto idioma ou regional URL é served para searchers.” Jump para quote
John Mueller, Google — subdomain vs subdirectory (via Mecanismo de busca Journal)
- “Em general, nós see estes o mesmo.” Read o cobertura
- “I iria personally try para mantenha itens together as muito as possível.”
- “Se você está like ‘well I não care either way’ então I iria just mantenha isso within o mesmo site.”
Fabrice Canel, Microsoft Bing (via Mecanismo de busca Land)
- “Menos é mas para SEO. nunca forget que. Menos URLs para crawl, better para SEO.” Jump para quote
Bing — JavaScript e dynamic rendering
- “bingbot é generally able para render JavaScript.” Jump para quote
- “desde que você faça um good faith effort para return o mesmo conteúdo para todos visitors, com o somente diferença being o conteúdo é renderizado em o servidor para bots e em o client para real usuários, isto é acceptable e não considered cloaking.”
“as long as you make a good faith effort to return the same content to all visitors”
(tradução) «desde que você faça um esforço de boa-fé para retornar o mesmo conteúdo a todos os visitantes»
Jump para quote
Me — em o app-shell duplicate risk (de meu JavaScript SEO guide, Ahrefs)
- “Com app shell models, very little conteúdo e código pode ser mostrado em o initial HTML resposta. Em fact, cada página em o site pode display o mesmo código, e este código pode ser o exact mesmo as o código em some outro websites.”
- “este pode sometimes cause páginas para ser treated as duplicates e não immediately go para rendering. Even worse, o wrong página ou even o wrong site pode mostre em resultados de pesquisa.”
- “Qualquer kind de SSR, static rendering, e prerendering setup é going para ser fine para mecanismos de busca.”
- Em dynamic rendering: “Isto é um workaround e, para ser honest, I nunca recommended isso… isso é definitely cloaking.”
- “JavaScript XHR solicitações eat crawl budget, e I mean eles gobble isso down. Unlike maioria outro resources que são cached, estes obtenha fetched live during o rendering process.”
Three SaaS técnico decisions, as flowcharts
O three questions que come up em nearly cada SaaS técnico auditoria.
UM. faz este página precisa server-side rendering?
Q1. Vai alguém quem é não logged em precisa para encontre este página em pesquisa? (marketing, pricing, comparação, documentação, blog, feature páginas)
- Sim → seu conteúdo deve exist em o servidor resposta. use SSR, static geração, ou hydration — não full client-side rendering. Conteúdo, headlines, e prices belong em o initial HTML.
- Não → continue.
Q2. É isso o real in-app produto UI, reachable somente depois login?
- Sim → não SEO stake; Google nunca crawls isso. Full client-side rendering é fine.
- Não / não sure → default para treating isso as público e render isso server-side. O danger é app-style CSR leaking onto o público surface.
B. Deve nosso documentação go em um subdomain ou um subfolder?
Q1. faz seu documentação plataforma (Mintlify / ReadMe / GitBook / etc.) force um subdomain ou third-party domain?
- Sim → go subdomain; há não classificação penalty. Jump para o hygiene lista below.
- Não, você têm um gratuito escolha → continue.
Q2. O que matters mas — consolidating autoridade, ou isolating o documentação?
- Consolidate autoridade / simplest internal linking → subfolder (
/docs/). O cleaner default quando você têm o escolha. - Isolate crawl budget / plataforma independence / documentação team owns seu tooling →
subdomain (
docs.example.com). Fine — Google “sees estes o mesmo.”
Subdomain hygiene lista: verifique isso separately em Pesquisa Console, treat seu crawl budget as isolated, link isso prominently de o marketing nav/footer so autoridade reaches isso, e canonicalize unchanged legacy doc versions para current.
C. Como do nós mantenha app / trial / dashboard URLs out de Google?
Q1. Do você quer para stop Google crawling o inteiro space (para save crawl budget), ou just mantenha isso out de o index?
- Stop crawling o space → mantenha isso behind authentication (best — nunca fetchable) ou
robots.txtdisallow. Accept que um disallowed-but-externally-linked URL pode ainda appear sem um snippet. - Mantenha um crawlable página out de o index → use
noindex, e verifique o página é não também blocked em robots.txt (ou Google nunca sees o tag).
Q2. É o página JavaScript-rendered (app shell)?
- Sim → put o
noindexem o server-rendered HTML ou HTTP header, não um JS-injected tag — um render-dependentnoindexé fragile em um app shell.
nunca do ambos em o mesmo URL. Blocking em robots.txt e noindexing é o classic
SaaS mistake — o block hides o noindex de Google, e o URL pode ainda leak em
resultados.
O mental models
1. Mesmo pipeline, diferente surface area. há não SaaS algorithm. Crawl → render → index → rank é identical para qualquer site. Quando um SaaS página underperforms technically, não reach para um SaaS-specific explanation — locate qual stage de o ordinary pipeline isso é failing em (crawled? renderizado? indexed? served?), então fix que.
2. O login wall é o SSR/CSR line. Público, pre-login páginas deve render server-side (marketing, pricing, documentação, blog). O private, post-login produto UI pode ser full CSR porque Google nunca crawls isso. O inteiro app-shell problema é CSR patterns leaking across que line onto o público surface.
3. App shell = duplicate risk, não just invisibility. O worst app-shell outcome não é um blank página — isso é Google clustering distinct páginas as duplicates porque cada route’s servidor HTML é o mesmo shell, então showing o wrong um. “Indexed wrong” é harder para spot than “não indexed.”
4. Freemium URL sprawl = faceted nav por another nome.
Dashboards, trial-flow etapas, e shareable usuário páginas são SaaS instance de o
low-value-URL categorias Google named anos ago. Fix isso architecturally (auth-gate ou
robots.txt) up front — não com per-page noindex depois o URLs exist, porque
noindex não save crawl budget.
5. Um control per objetivo — e eles interact.
robots.txt stops crawling mas não indexação; noindex stops indexação mas precisa
crawlability para ser seen. Combining eles em um URL é self-defeating. Decide o objetivo
primeiro, então pick o single ferramenta que serves isso.
6. Hreflang answers “qual região,” nunca “qual preço.” Região targeting é um canonical + hreflang job. Currency display é um separado mechanism (geo-IP, conta setting, região picker). Conflating eles é um common SaaS mistake, e near-identical regional páginas pode obtenha consolidated anyway.
SaaS técnico SEO — cheat sheet
O four SaaS-specific patterns, em um glance
| Pattern | O SaaS-specific risk | O fix |
|---|---|---|
| App-shell marketing site | páginas clustered as duplicates, wrong canonical mostrado | SSR/SSG o público surface; conteúdo em initial HTML |
| documentação subdomain vs subfolder | Treated as um distinct “site” (crawl/autoridade isolated) | Subfolder para consolidate; subdomain se forced/isolating — link + verifique isso |
| Freemium URL explosion | Dashboards/trials/shares = faceted-nav/infinite-spaces waste | Auth-gate ou robots.txt o space up front |
| Multi-region pricing | hreflang treated as um currency fix (isso não é) | hreflang/canonical para região; separado mechanism para currency |
noindex vs robots.txt — pick um per objetivo
| objetivo | Ferramenta | Gotcha |
|---|---|---|
| Mantenha um crawlable página out de o index | noindex | Deve NÃO também ser robots.txt-blocked, ou isso é nunca seen |
Stop crawl em um inteiro space (/app/, /dashboard/) | robots.txt Disallow (ou auth) | URLs pode ainda appear (não snippet) se linked externally |
| Save crawl budget | robots.txt / auth — não noindex | noindex páginas são ainda crawled; eles não save budget |
| ambos em once em um URL | Neither — o classic SaaS mistake | Block hides o noindex; leak com não fix |
Rendering — onde SSR é required vs optional
| Surface | SEO stake? | Rendering |
|---|---|---|
| Marketing / pricing / comparação / blog | Sim (pre-login) | SSR / SSG / hydration — conteúdo em servidor HTML |
| documentação | Sim | SSR / SSG (maioria documentação platforms já do este) |
| Logged-in produto UI | Não (nunca crawled) | Full CSR é fine |
JavaScript do / não
- Do: real
<a href>links, History API routing, server-side/pre-rendering,noindexem servidor HTML/HTTP header. - Não:
onClicknavegação,#fragment routing, JS-injectednoindexem um app shell, assume o estrutura “handles SEO,” rely em dynamic rendering quando real SSR é possível.
Myths para retire
- “meu React/Next/Vue site handles SEO automaticamente.” → Isso raises o ceiling; isso não clear o bar.
- “Subdomains rank worse.” → Não penalty (“nós see estes o mesmo”); isso é um crawl/autoridade tradeoff.
- “
noindextambém saves crawl budget.” → Não — o página é ainda crawled para read o tag. - “Block em robots.txt e
noindex= extra safe.” → ao contrário; o block hides onoindex. - “hreflang vai fix nosso multi-currency pricing.” → hreflang é idioma/região, não currency.
- “Dynamic rendering é um safe standard fix.” → Contested; Bing endorses isso, I não — prefer real SSR.
Pesquisa mostra o wrong SaaS página para several routes
Symptom: Diferente público routes render correctly para usuários, mas pesquisa clusters eles together ou selects um unexpected página/canonical. Provável cause: Seu initial servidor responses contain o mesmo app shell, so o distinct conteúdo arrives somente depois JavaScript e o bruto páginas look like duplicates. Fix: Move principal copy, headings, canonical, e crawlable navegação em SSR/SSG output. compare bruto e renderizado HTML across o route cohort, então confirm cada initial resposta é distinct e self-consistent.
UM JavaScript-injected noindex não é respected
Symptom: Um app-adjacent página appears em pesquisa even though o navegador DOM eventually contains noindex. Provável cause: O directive é adicionado somente depois client rendering, qual pode ser delayed, skipped, ou affected por o reported JS/noindex behavior. Fix: Put noindex em o initial HTML ou um HTTP X-Robots-Tag, mantenha o URL crawlable, e inspect o fetched resposta em Pesquisa Console depois recrawl.
UM noindexed URL appears sem um snippet
Symptom: UM URL blocked em robots.txt ainda appears as um simples/snippet-less resultado despite também having um noindex tag. Provável cause: O robots regra prevents Google de fetching o página e seeing noindex. Fix: Decide qual objetivo matters. Se o URL deve leave o index, allow crawling long enough para um server-rendered noindex para ser processed; se o inteiro space deve nunca ser crawlable, use authentication ou o deliberate crawl block e understand que external descoberta pode ainda expose o URL.
Regional pricing páginas consolidate ou mostre em o wrong mercado
Symptom: Similar English pricing URLs troca, consolidate, ou fail para serve o intended regional variant. Provável cause: Hreflang/canonical relationships são incomplete ou contradictory, ou o páginas differ somente por currency e provide too little regional distinção. Fix: forneça cada intended regional URL um self-canonical, completo reciprocal hreflang, valid locale codes, e significativo regional conteúdo. Handle currency com o product’s separado location/conta/selector logic; verifique o full hreflang cluster rather than um página.
SaaS técnico implementação checklist
Público app-shell / rendering
- Marketing, pricing, comparação, blog, e público documentação conteúdo é present em initial HTML por SSR/SSG/prerendering.
- Principal navegação e internal links use real
a hrefelements. - Canonical e robots intenção appear em o initial resposta e não altere unexpectedly depois hydration.
- Distinct routes não return um identical shell com todos único conteúdo deferred para XHR.
- Logged-in produto UI é separated de o público rendering requirement em o authentication boundary.
documentação host e responsabilidade
- Subfolder vs. subdomain é um deliberate tooling/crawl/autoridade decision, não um assumed classificação penalty.
- UM documentação subdomain é verified e monitored as seu próprio Pesquisa Console property.
- Marketing navegação/footer links para documentação, e documentação link back por useful contextual paths.
- Versioned documentação têm explícito canonical/differentiation regras e não uncontrolled legacy duplication.
Freemium e conta URL space
- Dashboard, trial-step, user-profile, e share URLs são inventoried antes launch.
- Private surfaces require authentication; non-search crawl spaces use deliberate robots regras.
-
noindexnão é usado as um crawl-budget control. - Não URL é simultaneously robots.txt-blocked e expected para expose um noindex directive.
Regional SaaS páginas
- Regional URLs self-canonicalize e lista reciprocal hreflang partners com valid idioma/região codes.
- Currency display tem seu próprio mechanism; hreflang é usado somente para idioma/região targeting.
- Same-language regional páginas contain significativo market-specific informações onde separado indexation é intended.
Ferramentas para SaaS técnico SEO
- bruto vs. renderizado HTML Checker — compare initial e renderizado HTML para catch app-shell duplication, missing conteúdo/links, e robots/canonical alterações depois hydration.
- robots.txt Tester — teste app, dashboard, trial, share, asset, e public-page cohorts contra bot-specific regras e inspect o exact winning directive.
- returntag — crawl o regional cluster para return-tag, self-reference, target-status, canonical, código, e
x-defaultproblems. - Google pesquisa Console URL Inspection — compare fetched/renderizado conteúdo, inspect canonical/indexação sinais, e solicitação validation depois server-rendering ou noindex alterações.
- Google pesquisa Console página Indexação e Crawl Stats — monitor unwanted app URLs, expected exclusions, host-level crawl patterns, e documentação subdomain behavior.
- servidor logs e um bruto/renderizado crawler — meça se bots spend solicitações em freemium URL spaces e compare público template output antes e depois JavaScript.
SSR/SSG conversion parity teste
Teste para run: Depois converting um público template, run representative routes por Render lacuna e compare bruto HTML across routes bem como bruto versus renderizado conteúdo per route. Expected resultado: Principal conteúdo, headings, crawlable links, canonical, e intended robots directives exist em o initial resposta; distinct routes não mas share um indistinguishable shell. Failure interpretation: Hydration/dados fetching ainda owns critical conteúdo ou rewrites SEO sinais. Monitoring window: Immediate depois deployment para cada changed template. Rollback trigger: Roll back quando bruto responses lose conteúdo, routes become identical, ou hydrated output conflicts com servidor output.
Server-side noindex teste
Teste para run: Fetch um intended exclusion sem rendering, inspect o robots meta ou X-Robots-Tag, e teste o URL em robots.txt Tester. Expected resultado: Noindex é present em o initial resposta e robots.txt permits o crawl needed para read isso. Failure interpretation: O directive é ainda JS-dependent ou hidden behind um crawl block. Monitoring window: Immediate depois deploy e depois CDN/cache propagation; confirm Pesquisa Console state depois recrawl. Rollback trigger: Stop rollout se o shared template adiciona noindex para público páginas ou removes isso de intended exclusions.
Freemium crawl-space teste
Teste para run: Crawl representative app/trial/dashboard/share patterns e avaliação bot logs mais o robots-rule matrix depois um architecture ou routing altere. Expected resultado: Authenticated/private paths cannot ser fetched; deliberately blocked low-value spaces follow o intended regra; público marketing páginas e required rendering assets remain allowed. Failure interpretation: UM route pattern leaks crawlable infinite space ou um overbroad regra blocks público conteúdo/assets. Monitoring window: Immediate depois routing releases e during o next bot-log avaliação. Rollback trigger: Revert quando o regra exposes private conteúdo, blocks um indexable cohort, ou prevents required público rendering.
Regional cluster teste
Teste para run: Validate o deployed regional URLs com returntag e inspect o page-level canonical alongside o detected hreflang set. Expected resultado: cada indexable regional URL self-canonicalizes, partners return-tag um another, targets resolve successfully, e locale codes são valid. Failure interpretation: O cluster é incomplete, points por redirecionamentos/errors, ou contradicts canonical selection. Monitoring window: Immediate depois deployment e depois qualquer locale/domain altere. Rollback trigger: Hold o novo regional URL de o cluster quando isso breaks reciprocity ou canonicalizes para um diferente locale unexpectedly.
Resources worth seu tempo
meu related writing
- JavaScript SEO: UM Definitive Guide — o deep source para o app-shell section: o duplicate-clustering failure modo, SSR/static/prerendering, por que I não recomendo dynamic rendering, e como XHR solicitações eat crawl budget.
- Unlocking Growth por Enterprise SaaS SEO — meu full SaaS guide, o parent piece; product-led conteúdo, o “vs”/free-tool páginas, e o JavaScript e crawl-budget problemas behind SaaS sites, em o enterprise scale.
- Quando Deve Você Worry sobre Crawl Budget? — o general crawl-budget guide behind o freemium-URL section: mas crawling não mean better rankings, mas uncrawled páginas não pode rank em todos.
- O Beginner’s Guide para técnico SEO — onde todos de este fits em o broader technical-SEO picture.
meu speaking
- Enterprise SEO Chaos (SMX Advanced, de meu tempo as técnico SEO em IBM) — o redirecionamento chains, canonical conflicts, e JavaScript menus invisible para crawlers behind real large SaaS/enterprise sites. meu standing disclaimer applies: isto é meu understanding, não gospel.
De cerca de o setor
- Understand JavaScript SEO basics — Google pesquisa Central — o primary doc para o rendering section: crawl/render/index phases e o caso para SSR.
- Rendering em o Web — web.dev — o Chrome team’s CSR/SSR/SSG/hydration trade-off estrutura.
- Optimize seu crawl budget — Google pesquisa Central — capacity × demand e por que robots.txt (não
noindex) é como você save crawl budget. - Block Pesquisa indexação com noindex — Google pesquisa Central — o
noindexmechanics e o robots.txt precondition behind o classic SaaS conflict. - Managing multi-regional e multilingual sites — Google pesquisa Central — o same-language regional-duplicate guidance behind o pricing-page section.
- Google’s John Mueller Em Quando para use Subdomain vs. Directory — Mecanismo de busca Journal — o “nós see estes o mesmo” framing behind o documentação decision.
- bingbot Series: JavaScript, Dynamic Rendering, e Cloaking. Oh meu! — Bing Webmaster Blog — Bing’s official endorsement de dynamic rendering, o point onde Bing e meu próprio view diverge.
- O five infrastructure gates behind crawl, render, e index — Mecanismo de busca Land — Fabrice Canel’s “Menos é mas para SEO” line applied para URL sprawl.
Teste yourself: SaaS técnico SEO
Five questions em o técnico patterns específico para SaaS sites. Pick um resposta para cada, então verifique.
Registro de alterações
Atualizado em 22 de ago. de 2026.
Resumo editorial e detalhes registrados da alteração.Detalhes da alteração
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
Não é possível fazer a comparação completa — nenhum instantâneo anterior foi arquivado para esta revisão.
Atualizado em 25 de jul. de 2026.
Resumo editorial e detalhes registrados da alteração.Detalhes da alteração
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
Não é possível fazer a comparação completa — nenhum instantâneo anterior foi arquivado para esta revisão.
Atualizado em 18 de jul. de 2026.
Resumo editorial e detalhes registrados da alteração.Detalhes da alteração
- Iniciante
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
- Avançado
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
Não é possível fazer a comparação completa — nenhum instantâneo anterior foi arquivado para esta revisão.