SaaSのテクニカルSEOは、ローンチ前週にプラグインを入れて解決するものではありません。ルートを公開にするかログイン配下に置くかを議論している段階、つまりホワイトボードの上で決まります。私たちはSEOをアーキテクチャの一層として扱います。土台が歪んでいれば、どんなmeta descriptionも助けにはなりません。コードの一行目を書く前後で確認している12項目を紹介します。
インデックス可能性とクロール:
- レンダリング戦略はケースバイケースで選びます。ユーザーごとに変わるページはSSR、ランディングと静的コンテンツはSSG、デプロイごとに全再生成するのが無駄な規模ではISRを使います。
- クエリパラメータは二級市民として扱います。
?utmや?ref、テーブルのフィルタが実際のコンテンツを変えない場合は、必ずクリーンURLを指すcanonicalタグを置きます。 - クロールされたくないものとインデックスされたくないものを分けます。
/api、/admin、アセットなどクロール予算を節約したい場所にはrobots.txt、Googleには訪問させても表示させたくないページにはHTTPヘッダのnoindexを使います。 - 実トラフィックのある孤立404は、URLが戻らないなら410へ、明確な代替があるなら301へ変換します。曖昧な404を放置するのは負のシグナルを贈っているのと同じです。
パフォーマンスとコンテンツ設計:
- Web Vitalsは実RUM、つまりCrUXで測ります。Mountain Viewのサーバ上で動くLighthouseエミュレータではなく、実ユーザのLCP、INP、CLSを見ます。
- URL階層は情報の木として設計します。
/product/featureや/docs/concept/apiはクローラとの契約であり、ランダムなslugではありません。 - 内部リンクはコンテンツより先に設計します。柱ページ、トピッククラスタ、そしてホームから関連リーフまで最大3クリックです。
sitemap.xmlはデプロイ日時ではなく、データソースから取得した実際のlastmodで生成します。Googleはこれを再クロールの優先度判断に使います。
構造化データと多言語:
- 最初のコミットからJSON-LDを入れます。製品には
SoftwareApplication、ブランドにはOrganization、サポートドキュメントにはFAQPage、ネストされた全ルートにBreadcrumbListを置きます。 - 多言語対応では
hreflangをx-default付きで使い、JavaScriptで切り替える国旗ではなく言語ごとのURLを用意し、en版がes版にリンクし、その逆も成り立つように、孤児を作らないことを徹底します。
モニタリング:
- サーバログをGoAccessやBotifyで分析し、Googlebotが実際に何を訪れているかを確認します。遅れて集計されるSearch Consoleだけに依存しません。
- クリック、表示回数、CWVの急変は、URL単位ではなくテンプレート単位でアラートを設定します。ブログレイアウトのリグレッションは、テンプレート集計を見ていれば早く検知できます。
どれもプラグインを必要としません。必要なのは冷静に判断し、文書化し、セキュリティや依存関係と同じ頻度で四半期ごとに見直すことです。テクニカルSEOは、有機的に伸びるSaaSと、永遠に広告費に依存するSaaSを分ける退屈な部分です。私たちは他のすべてと同じく、これをインフラとして構築します。