SEOのWebエンジニア向け基礎知識（ページ公開～ランキングまでの流れで解説-大規模サイトも対応）

こんにちは！この記事は[LIFULL Advent Calendar](https://qiita.com/advent-calendar/2022/lifull)2022の18日目の記事です。

# はじめに

Webアプリケーションを扱う人たちにとって、検索エンジン最適化ことSEO（Search Engine Optimization）は切っても切り離せないものです。日本においてはGoogleの検索エンジンをYahoo!Japanも採用していることもあり、Google検索の実質シェアは全検索市場の90%超となり、ビジネス的に検索エンジンはとても大切な集客チャネルの１つです。

検索エンジン最適化のドキュメントとしては、[Google検索セントラル](https://developers.google.com/search/docs/fundamentals/get-on-google?hl=ja)という公式ドキュメントがありこちらを参照すれば網羅的にチップスを得ることができます。ですが、本記事では、**フロントエンドエンジニアとしての経験＋大規模サイトのSEO**へ専門的に集中していた経験などから、フロントエンドを扱うWebエンジニアなら絶対に抑えておいてほしいポイントを『**Googleがランキングするまでの流れ**』つまりページ公開～検索結果への期待通りの表示までの流れに沿って１つ１つの役割とともに技術的チップスを記述しています。

スペースの都合もあり、あくまで技術的かつ基礎にフォーカスした部分にとどめておりますので、より深く意味を知りたい方は記事中からリンクを張っていますので参照していただくなり、更に専門的に書かれた記事を参照されることをお勧めします。

ちなみにお忙しい方は、次の３行だけでも覚えましょう！

* ユーザーにもGoogleにも『**ページの存在を知ってもらう**』ようにする！
* ユーザーにもGoogleにも『**ページを正しく理解してもらう**』ようにする！
* ユーザーにもGoogleにも『**ページを好きになってもらう**』ようにする！

# 検索エンジンの仕組み

基本的には、次の３ステップで成り立っています。

1. クロール
1. インデックス登録
1. 検索結果表示（ランキング）

１つ１つを詳しくみていくと・・

## クロール

ウェブクローラー（[Googlebot](https://developers.google.com/search/docs/crawling-indexing/googlebot?hl=ja)）というソフトウェアが、インターネットを自動巡回し、テキスト・画像・動画などをGoogleへダウンロードし蓄積します。

すべてはここから始まるため、ウェブクローラーが自サイトで訪問してほしいページに必ず来てもらえる状態をつくりる必要があります。

### ステップ①：有効なページの公開

技術的に最初に意識することは、有効なページを公開すること。つまりに以下を意識する必要があります。

* Googlebotがアクセス可能
* ページが機能していること（ステータスコード200）
* サポートされているファイル形式（[ほぼすべての形式をサポート](https://developers.google.com/search/docs/crawling-indexing/indexable-file-types)）で公開
* [スパムコンテンツ](https://developers.google.com/search/docs/essentials/spam-policies?hl=ja)ではないこと

### ステップ②：Googleに発見してもらう

無事に有効なページを公開できても、Googlebotは神ではないのでそのままではページの存在を知ることができません。Googlebotがページを発見できるようにするためには、私たちから知らせてあげる仕組みの構築が必要となります。

手段としては大きく２つあります。

#### 手段１：

すでにGoogleにインデックス登録されているページから、[リンクでクロールできる](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)ようにする
具体的には、**href 属性が指定された \<a> タグでページを指定する必要があります**。
また、Googleは\<a>タグによるページ間の関連性をシグナルと認識しています。
注意するべきは、Javascriptのonclickなどで制御した遷移ではリンク扱いにならない可能性があります。

#### 手段２：

[sitemap.xml](https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview)でページを通知する方法となります。
小規模なサイトであれば、手段１のリンクでの通知で十二分ですが、大規模サイトや複雑なサイトではGooglebotがページを発見する手助けになります。

#### 補足：ステップアップしたい方向け

* Googleはページ間の関連性をシグナルと理解していますと書きましたが、さらに[\<a>タグのrel属性](https://developers.google.com/search/docs/crawling-indexing/qualify-outbound-links)を利用するとより正確な関連性をGoogleに伝えてることで高度な制御ができます。
* 会員ページなどクローリングしてほしくないページ場合は、[robots.txt の disallow ルール](https://developers.google.com/search/docs/crawling-indexing/robots/robots_txt#disallow)を使用したり、Google がページをインデックス登録しないようにするにはクロールを許可し、[noindex robots ルール](https://developers.google.com/search/docs/crawling-indexing/block-indexing)を使用することで高度な制御もできます。
* [大規模なサイト](https://developers.google.com/search/docs/crawling-indexing/large-site-managing-crawl-budget?hl=ja)では、より重要なページを効率よくクローリングしてもらう事を意識する必要があります。これはGoogleといえども処理量に限界があることに起因しています。


これが『**ページの存在を知ってもらう**』です。
技術的観点以外ではSNS活用なども有効です。


## インデックス登録

無事にGooglebotがページを有効なものと認めてくれたら、
次のステップはインデックスへ登録をしてもらうこととなります。

### コンテンツを正しく理解してもらう

Googleではさまざまなファイル形式の解析やインデックス登録が可能です。しかしやはり得手不得手はあり、ページ作成者側として大切なのは『**ページを正しく理解してもらう**』為の工夫になります。そのためにはやはり**HTML/テキストが今でも最も確実な手段**です。

今日ではJavascriptを利用したリッチコンテンツは当たり前に利用されており、私たちの体験を大いに向上させてくれています。ただしSEOにおける技術的な側面をみるとGoogleが[Javascriptで生成されたコンテンツをインデックス処理する際には少し複雑な処理が必要](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics#how-googlebot-processes-javascript)となってきます。これは小規模サイトであれば無視できるかもしれませんが大規模サイトではインデックスパフォーマンスを意識した設計が必要となることもあります。

また、[Googleも公式に推奨](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics#accessibility)していますが、Webは多くの方に開かれておりは検索エンジンだけではなく、さまざまなユーザーも配慮してページを作成できるとよいでしょう。例えばスクリーン リーダーやJavaScript 対応のブラウザを使用していないブラウザのユーザーのニーズを考慮してくとよいと思います。SDGsでも言われている「誰一人取り残さない」にも則していきますね。基本的なところでは**見出しタグ\<h1>などではラベリングや階層構造を正しく意識**する、**画像にはalt=””で画像を簡潔に説明できる代替テキストを入れる**など、といったWebアクセシビリティにも通じることを意識していくことが大切になります。

冒頭でも述べましたが、HTML/テキストだけでも正しく情報が伝わる設計ができていれば、個人的には検索エンジンにもユーザーにも技術的実装方法としてもシンプルかつ確実といえる手段の１つだと思います。

### メタタグの設定

ページの情報を正しく伝えるためにはメタタグも重要です。
本記事内でトピックス的に書き出すほどの内容はないのですが、[具体的設定方法はこちらを参照](https://developers.google.com/search/docs/crawling-indexing/special-tags)してもらえたらと思います。

### インデックス状況の確認

[Search consoleで確認](https://support.google.com/webmasters/answer/10351509?hl=ja&ref_topic=10345549#monitoring:~:text=%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%97%E3%81%BE%E3%81%99%E3%80%82-,%E7%A2%BA%E8%AA%8D,-Search%20Console%20%E3%81%AE)をすることができます。技術的な部分でもない為ここでは説明を省略させていただきます。

## 検索結果表示（ランキング）

無事にインデックス登録されても油断禁物です。

ランキングの仕組みとしては、インデックスしGoogleが理解できた情報とユーザーが検索したキーワードから、自サイト以外のページ群と比較され関連度が高いと思われる順に検索結果に表示されます。
上位表示されるためには、もちろんニーズに一致したコンテンツは必要なのですが、技術的にできることを絞ると[ユーザーエクスペリエンス](https://developers.google.com/search/docs/appearance/page-experience#signals)を高めることが大切になってきます。

ここで取り上げるユーザーエクスペリエンスは、**ページコンテンツそのものの価値以外に関する体験に対してのシグナル**を指しており、具体的にはページの読み込みパフォーマンス、インタラクティブ性、視覚的安定性に関する実際のユーザー エクスペリエンスを測定する指標のセットが含まれており自サイトがどのように評価されているかは[Search Consoleというツール上のユーザーエクスペリエンス](https://support.google.com/webmasters/answer/10218333?hl=ja)で確認ができます。
（正確には、[モバイルフレンドリー](https://developers.google.com/search/blog/2015/02/finding-more-mobile-friendly-search?hl=ja)、[HTTPS](https://developers.google.com/search/blog/2016/11/heres-to-more-https-on-web?hl=ja)、[煩わしいインタースティシャルに関するガイドライン](https://developers.google.com/search/docs/appearance/avoid-intrusive-interstitials?hl=ja)といったものも適用）

つまり、利用ユーザーが快適にページ内コンテンツを閲覧できる、つまり『**ページを好きになってもらう**』ことが望ましく、それらを指標化されたもの確認しながら改善などを意識していく必要があります。こちらは[Lighthouse](https://web.dev/vitals-tools/#lighthouse)、[PageSpeedInshigt](https://web.dev/vitals-tools/#pagespeed-insights)などを利用することで簡単にページ単位での課題を確認できます。[詳しくはこちら](https://web.dev/vitals-tools/)を確認してください。




# まとめ

長文をダラダラと書いてしまったのですが、上述した手段は技術革新で移り変わってくものです。ただ本質的なところは変化しづらいので、冒頭にも書きましたが次の３行だけ覚えてもらったらこの記事の目的を果たせたと思っています！

* ユーザーにもGoogleにも『**ページの存在を知ってもらう**』ようにする！
* ユーザーにもGoogleにも『**ページを正しく理解してもらう**』ようにする！
* ユーザーにもGoogleにも『**ページを好きになってもらう**』ようにする！