Technical SEO for a SaaS doesn't get fixed by installing a plugin the week before launch. It gets decided on the whiteboard, while we're still arguing whether a route is public or lives behind auth. We treat SEO as an architectural layer: if the foundation is crooked, no meta-description will save you. Here are the twelve things we review before, during, and after the first line of code.
Indexability and crawl:
- We pick the rendering strategy case by case: SSR for pages that change per user, SSG for landings and static content, ISR when the volume makes full regeneration on every deploy a waste.
- We treat query parameters as second-class citizens: canonical tag pointing to the clean URL whenever
?utm,?refor table filters don't actually change the content. - We separate what should not be crawled from what should not be indexed:
robots.txtto save crawl budget on/api,/adminor assets, andnoindexvia HTTP headers for pages we want Google to visit but not display. - We turn orphan 404s with real traffic into 410s when the URL is gone for good, and 301s when a clear equivalent exists; leaving indefinite 404s is gifting negative signal.
Performance and content architecture:
- We measure Web Vitals with real RUM (CrUX, not lab PageSpeed): LCP, INP and CLS on actual users, not on a Lighthouse emulator running on a Mountain View server.
- We design URL hierarchies as information trees:
/product/featureand/docs/concept/apiare contracts with the crawler, not random slugs. - We plan internal linking before writing content: pillar pages, topical clusters, and a maximum of three clicks from home to any relevant leaf.
- We generate
sitemap.xmlwith reallastmodpulled from the data source, not from the last deploy timestamp; Google uses it to prioritize re-crawling.
Structured data and multilingual:
- We add JSON-LD from the first commit:
SoftwareApplicationfor the product,Organizationfor the brand,FAQPagein support docs andBreadcrumbListon every nested route. - For multi-locale we use
hreflangwithx-default, URLs per language (not flags toggled by JavaScript), and we make sure theenversion links toesand vice versa, with no orphans.
Monitoring:
- We analyze server logs with GoAccess or Botify to see what Googlebot actually visits: we don't rely solely on Search Console, which arrives late and aggregated.
- We set alerts on sudden changes in clicks, impressions and CWV per template, not per URL: a regression in the blog layout is caught faster by watching the template aggregate.
None of this requires a plugin. It requires deciding in cold blood, documenting it, and reviewing it every quarter the same way we review security or dependencies. Technical SEO is the boring part that separates a SaaS growing organically from one that depends forever on ad spend. We build it the way we build the rest: as infrastructure.