DrupalのGoogleインデックス:Drupalコンテンツを検索に届ける完全ガイド
Drupalは、政府、大学、大企業によって使用される、最も強力なCMSプラットフォームの1つです。しかし、その柔軟性は、インデックスが自動的ではないことを意味します — Googleがすべてのコンテンツを発見してインデックスできるようにするには、適切なモジュールをインストールして構成する必要があります。
このガイドの内容
Drupalは、柔軟性、セキュリティ、スケーラビリティで知られるコンテンツ管理フレームワークです。ウェブ上の最も複雑なサイトのいくつかを支えています:何千ものページを持つ政府ポータル、複数の部門とコンテンツタイプを持つ大学のウェブサイト、エンタープライズイントラネット、大規模なメディア出版物。Drupalの強みは、シンプルなブログから多言語、複数サイトプラットフォーム、数百のコンテンツタイプと複雑なアクセス権限を持つものまで、事実上あらゆるコンテンツアーキテクチャを処理できるように構成できることです。
この柔軟性には代償があります:Drupalは最初からSEO機能を含んでいません。WordPress(組み込みサイトマップと基本的なSEOがある)、Shopify(サイトマップとcanonicalタグを自動生成する)、Ghost(デフォルトで包括的なSEOを含む)とは異なり、Drupalではすべてのインデックス機能のために寄稿モジュールをインストールして構成する必要があります。XMLサイトマップ生成、URLエイリアス、メタタグ管理、リダイレクト処理、robots.txtカスタマイズには、すべて別々のモジュールが必要です。
Drupal SEOモジュールのコアセット — しばしば「Drupal SEOスタック」と呼ばれる — には、サイトマップ生成用のXML Sitemap(またはSimple XML Sitemap)、自動URLエイリアス用のPathauto、メタタグ管理用のMetatag、301リダイレクト処理用のRedirect、クローラーアクセス制御用のrobots.txtモジュールが含まれます。これらのモジュールがないと、Drupalは/node/123(不透明な数値パス)のようなURLを生成し、XMLサイトマップはなく、メタディスクリプションは生成されず、ファイルシステムレベルでしか編集できない基本的なrobots.txtを持ちます。
本ガイドでは、DrupalサイトをGoogleにとって完全にインデックス可能にするために必要なすべてのモジュールと設定を説明します。Drupal 10、Drupal 11を実行している場合でも、まだDrupal 9サイトを維持している場合でも、モジュールと概念はほぼ同じです。インストール、設定、Drupalのアーキテクチャに固有の一般的な落とし穴、大規模なDrupalインストールのための高度な技術を解説します。
Drupal SEOモジュールスタック
検索エンジンインデックス向けに適切に構成されたDrupalサイトには、特定の寄稿モジュールのセットが必要です。各モジュールはSEOの異なる側面を処理し、それらは協力して包括的なインデックスサポートを提供します。
Simple XML Sitemap(または古いXML Sitemapモジュール)は、/sitemap.xmlファイルを生成します。サイトマップに含めるコンテンツタイプ、タクソノミー語彙、メニュー、カスタムエンティティタイプを指定できます。各タイプの優先順位と変更頻度を設定できます。Simple XML Sitemapが現代的な選択であり、Drupal 10と11をネイティブにサポートしていますが、古いXML Sitemapモジュールは新しいDrupalバージョンとの互換性の問題がある場合があります。
Pathautoは、設定可能なパターンに基づいて、人間が読めるURLエイリアスを自動的に生成します。/node/123の代わりに、Pathautoは定義したトークンパターンに基づいて/blog/my-article-titleのようなURLを作成します。Pathautoは、動的URL生成のためにTokenモジュールに依存しています。Pathautoがないと、すべてのDrupalページは内部ノードパスでのみアクセス可能になり、ユーザーとSEOの両方にとってひどいです。
Metatagモジュールは、グローバル、コンテンツタイプ、個別のノードレベルでメタタグ(タイトル、ディスクリプション、canonical、robots、Open Graph、Twitter Cardsなど)を設定するUIを提供します。トークン置換をサポートしているため、タイトルタグに「[node:title] | [site:name]」のようなパターンを作成できます。Metatagモジュールがないと、Drupalは基本的な<title>タグのみを生成し、メタディスクリプション、canonical URL、ソーシャルメタタグはありません。
Redirectモジュールは、301リダイレクトを管理します。URLエイリアスを変更すると(手動またはPathauto経由)、Redirectモジュールは古いURLから新しいURLへのリダイレクトを自動的に作成できます。手動リダイレクトを作成するためのUIも提供し、末尾のスラッシュの不一致や大文字小文字混在URLなどの一般的なリダイレクトの問題を修正できます。
robots.txtモジュール(またはRobotsTxtモジュール)では、サーバー上で直接ファイルを編集する代わりに、Drupal管理インターフェースを通じてrobots.txtファイルを管理できます。これは、Drupalのrobots.txtがdocroot内の静的ファイルであり、コア更新中に変更が上書きされる可能性があるため重要です。
PathautoでURLエイリアスを設定する
URLエイリアスは、Drupal SEOにとって基本です。Drupalの内部パス(/node/123、/taxonomy/term/45)は技術的にはクロール可能でインデックス可能ですが、キーワード情報を提供せず、不透明なサイト構造を作成します。Pathautoは、定義したパターンに基づいてURLエイリアスを自動的に生成することでこれを解決します。
Pathautoを設定するには、Composer(composer require drupal/pathauto)でインストールし、/admin/modulesで有効にしてから、/admin/config/search/path/patternsでパターンを設定します。各コンテンツタイプについて、トークンを使用してパターンを作成します。一般的なパターンには、ブログ記事用の/blog/[node:title]、複数のコンテンツタイプ用の/[node:content-type]/[node:title]、階層的な商品URL用の/products/[node:field_product_category:entity:name]/[node:title]、メニュー階層ベースのURL用の/[node:menu-link:parents:join-path]/[node:title]があります。
Pathautoは、これらのパターンを解決するためにTokenモジュールを使用します。タイトルを自動的に小文字にし、スペースをハイフンに置き換え、特殊文字を削除し、長いURLを切り詰めます。/admin/config/search/path/settingsでトランスリテレーション設定をカスタマイズして、特殊文字、アクセント、非ラテン文字の処理方法を制御できます。
重要なPathauto設定は、既存のエイリアスの「Update action」です。ノードのタイトルを変更すると、PathautoはURLエイリアスを更新すべきでしょうか?する場合、Redirectモジュールがインストールされていない限り、古いURLは壊れます。推奨される設定は「Create a new alias. Leave the existing alias functioning」 — 既存のエイリアスをアクティブに保ちながら新しいエイリアスを作成します。Redirectモジュールと組み合わせると、古いURLは自動的に新しいURLにリダイレクトされます。
何千もの/node/123 URLがすでにGoogleにインデックスされている既存サイトの場合、Pathautoはすべての既存コンテンツに対して一括でエイリアスを生成できます。/admin/config/search/path/update_bulkに移動し、処理するコンテンツタイプを選択します。一括生成後、Redirectモジュールをインストールして有効にし、/node/123パスから新しいエイリアスへの自動リダイレクトを作成します。これにより、Googleがリダイレクトを追跡し、インデックスをクリーンなURLに更新します。
インデックスのためのMetatagモジュール設定
Metatagモジュールは、Googleがあなたのページをどう見るかを制御するために不可欠です。Composer(composer require drupal/metatag)でインストールし、Metatagモジュールとそのサブモジュール:Metatag: Open Graph、Metatag: Twitter Cards、Metatag: Verification(サーチコンソールの確認タグ用)を有効にします。
/admin/config/search/metatagでグローバルデフォルトを設定します。グローバル設定は、より具体的な設定を持たないページのフォールバックメタタグを設定します。グローバルタイトルを「[current-page:title] | [site:name]」に、ディスクリプションを「[node:summary]」(または汎用ディスクリプションを避けるために空のままにする)に、canonical URLを「[current-page:url]」に設定します。
次に、コンテンツタイプ固有のオーバーライドを作成します。ブログ記事の場合、タイトルを「[node:title] - Blog | [site:name]」に、ディスクリプションを「[node:field_meta_description]」(コンテンツタイプに追加した専用のメタディスクリプションフィールドを使用)に設定するかもしれません。商品ページの場合、商品固有のトークンを使用します。タクソノミー用語ページの場合、タイトルパターンとして「[term:name] - [vocabulary:name] | [site:name]」を使用します。
Metatagモジュールは、コンテンツタイプごとおよび個別のノードごとのロボットメタディレクティブも制御します。インデックスされるべきでないコンテンツタイプ(管理者専用のコンテンツタイプ、webform確認ページ、ユーザープロファイルページなど)の場合、コンテンツタイプレベルでロボットメタを「noindex, follow」に設定します。これにより、Googleはそれらのページをインデックスせず、リンクは追跡します。
個別のノードの場合、コンテンツ編集者はノード編集フォームの「Meta tags」フィールドセットでメタタグを上書きできます。重要なコンテンツのためにカスタムメタディスクリプションを書くように編集者を訓練してください — 自動生成されたサマリーは検索用に最適化されていないことがよくあります。メタディスクリプション執筆を強制したい場合は、フォーム表示設定を通じてフィールドを必須にするか、カスタム検証ハンドラを使用してください。
Metatagモジュールは、多言語サイトのMetatag: hreflangサブモジュールを通じたhreflangタグもサポートしています。Drupalサイトが多言語(コアTranslationモジュールを使用)の場合、hreflangを有効にして、各ページのすべての言語バージョンをリンクするhreflangタグを自動的に生成するように設定します。
XMLサイトマップの生成と設定
Composer(composer require drupal/simple_sitemap)でSimple XML Sitemapをインストールし、有効にします。/admin/config/search/simplesitemapで設定します。モジュールでは、複数のサイトマップを作成し(コンテンツセクションが異なる大規模なサイトに役立つ)、含めるエンティティタイプ、バンドル、特定のエンティティを選択できます。
ほとんどのDrupalサイトでは、インデックスされるべきコンテンツタイプ(記事、ページ、商品)の公開されたノード、実質的なコンテンツを持つ公開されたタクソノミー用語ページ、公開ページを生成するカスタムエンティティタイプを含めます。管理目的、アクセス制御背後、または本質的に薄い(webform送信やユーザープロファイルなど)コンテンツタイプは除外します。
Simple XML Sitemapは、コンテンツタイプごとの優先順位とchangefreq設定をサポートしています。Googleはこれらのヒントをほとんど無視すると述べていますが、それらを設定することはサイトマップを整理し、コンテンツの相対的な重要性をシグナルするのに役立ちます。ホームページの優先順位を1.0、主要なコンテンツタイプを0.8、タクソノミー用語のような二次コンテンツを0.5に設定します。
モジュールはデフォルトで/sitemap.xmlにサイトマップを生成し、URL数が設定された制限(デフォルト2000、サイトマップ仕様あたり最大50000)を超えると、複数のファイルに分割します。何万ものページを持つ大規模なDrupalサイトの場合、サイトマップ生成はリソース集約的になる可能性があります。cronがオフピーク時間中にサイトマップを再生成するように設定し、再生成間隔を適切に設定します(ほとんどのサイトでは6〜24時間ごと)。
Drupalサイトマップでよくある問題は、エンティティアクセスです。Drupalの権限システムは、匿名ユーザーには表示できるがcronユーザーには表示できないノードへのサイトマップジェネレーターのアクセスを防ぐ可能性があります。Simple XML Sitemapモジュールは、デフォルトで匿名ユーザーの権限を使用して、cron実行中にサイトマップを生成します。ノードが特定の権限を必要とする場合は、匿名ユーザーがアクセスできることを確認するか、別のユーザーの権限を使用してサイトマップを生成するようにモジュールを設定してください。
サイトマップを設定した後、Google Search Consoleの「サイトマップ > 新しいサイトマップを追加」でyourdomain.com/sitemap.xmlを送信します。404のURL(サイトマップ内の削除されたノード)、ブロックされたURL(robots.txtの競合)、リダイレクトURL(エイリアスが変更されたノード)などのエラーがないか、サイトマップステータスを監視してください。
Drupalのノードパス、エイリアス、重複コンテンツ
Drupalには、他のCMSプラットフォームが共有しない独自の重複コンテンツの問題があります:コンテンツは内部パス(/node/123)とURLエイリアス(/blog/my-article)の両方でアクセス可能です。適切な設定がないと、Googleは両方のURLをインデックスし、重複コンテンツを作成する可能性があります。
第一の防御策は、Redirectモジュールの「Enforce clean and canonical URLs」設定です。有効にすると、エイリアス/blog/my-articleを持つノードの/node/123にアクセスすると、エイリアスへの301リダイレクトが発生します。これにより、Googleにエイリアスがcanonical URLであり、ノードパスは無視すべきであることが伝えられます。/admin/config/search/redirect/settingsでこの設定を有効にしてください。
第二の防御策は、Metatagモジュールからのcanonical URLメタタグです。ノードが何らかの理由で内部パスでアクセスされた場合でも、HTMLの<head>内のcanonicalタグはエイリアスURLを指します。Googleはcanonicalタグを尊重し、ランキングシグナルをcanonical URLに統合します。
第三の防御策は、robots.txtファイルです。Disallow: /node/をrobots.txtに追加して、Googleが内部ノードパスを完全にクロールするのを防ぎます。これは、リダイレクトとcanonicalタグと組み合わせて、ノードパスがインデックスされないことを確実にするベルトとサスペンダーのアプローチです。
Drupalは、タクソノミー用語ページを通じて潜在的な重複も作成します。「Categories」という名前の語彙に「Technology」という用語がある場合、Drupalは/taxonomy/term/5(およびPathautoで/categories/technologyのようなエイリアス)にページを作成し、その用語でタグ付けされたすべてのノードをリストします。タクソノミー用語ページが他の場所に表示されるノードティーザーのリストだけで、独自の序文コンテンツを持たない場合、Googleは薄いまたは重複したコンテンツとして分類する可能性があります。
Viewsで生成されたページは別の複雑さを追加します。DrupalのViewsモジュールは、ページネーション付きで様々な基準でコンテンツをリストするページを作成できます。1ページあたり10件のすべてのブログ投稿をリストするViewは、/blog?page=1、/blog?page=2などのURLを作成します。各ページネーションページには類似のコンテンツがあります(投稿が異なるだけ)。rel="next"とrel="prev"ページネーションタグ(Googleは非推奨にしましたが、一部のSEO実践者は依然として使用しています)または ページネーションページのnoindexディレクティブなしでは、Googleはコンテンツ価値が減少する深いページネーションページにクロールバジェットを浪費する可能性があります。
Drupalのキャッシュとメタタグへの影響
Drupalは、あらゆるCMSの中で最も洗練されたキャッシュシステムの1つを持っています。これは一般的にパフォーマンスの利点ですが、適切に理解されていないとSEOの頭痛の種になる可能性があります。
Drupalのページキャッシュ(匿名ユーザー用のInternal Page Cacheモジュール、認証ユーザー用のDynamic Page Cache)は、完全にレンダリングされたHTMLページを保存します。Metatagモジュールを通じてノードのメタタグを更新すると、キャッシュがクリアされるまで、キャッシュされたHTMLは古いメタタグを提供し続ける可能性があります。積極的なキャッシュ(数時間または数日のTTL)を持つサイトでは、SEO変更が長期間Googleには見えないことを意味します。
解決策は、Drupalのキャッシュタグシステムを理解することです。ノードを編集すると、Drupalのキャッシュタグシステムは、そのノードのコンテンツを含むキャッシュされたページを自動的に無効化するはずです。これは、メタタグの変更がノード編集の一部である場合(Metatagモジュールのノードごとの上書きを使用)に正しく機能します。ただし、グローバルまたはコンテンツタイプレベルのメタタグデフォルトへの変更は、すべての影響を受けるページのキャッシュ無効化をトリガーしない可能性があります。グローバルメタタグ設定を変更した後、/admin/config/development/performance > Clear all cachesでサイトのページキャッシュを手動でクリアしてください。
外部キャッシュレイヤーは、別の次元を追加します。DrupalサイトがVarnish、リバースプロキシキャッシュ、またはCloudflareなどのCDNの背後にある場合、Drupalのキャッシュタグを認識しない追加のキャッシュレイヤーがあります。Drupalの内部キャッシュをクリアした後、外部キャッシュもクリアする必要があります。Varnishの場合は、Varnish Purgeモジュールを使用してDrupalのキャッシュタグシステムをVarnishのパージメカニズムと統合します。Cloudflareの場合は、Cloudflareモジュールを使用して、Drupalコンテンツが変更されたときにCDNキャッシュを自動的にパージします。
Purgeモジュールとそれに関連するモジュール(Purge Queuer、Purge Processor、プラットフォーム固有のプラグイン)は、すべてのレイヤーにわたってキャッシュ無効化を管理するための統一されたインターフェースを提供します。SEOの目的では、重要な要件は次のとおりです:いずれかのページのメタタグが変更されたら、そのページのすべてのキャッシュされたバージョン(Drupal内部キャッシュ、Varnish、CDN)を無効化して、Googleの次のクロールが更新されたタグを認識できるようにします。
認証済みと匿名のキャッシュには特に注意してください。Drupalは、認証ユーザー(編集者、管理者)と匿名ユーザー(Googlebotを含む)に異なるコンテンツを提供できます。Metatag設定がユーザーロールに基づく条件を含んでいる場合、匿名バージョンが正しいメタタグを持っていることを確認してください。ログアウトして(またはシークレットウィンドウを使用して)、ページソースを表示して、Googleが見るメタタグを確認します。
ステップバイステップガイド
コアSEOモジュールスタックをインストールする
Composerを使用して、不可欠なSEOモジュールをインストールします:composer require drupal/simple_sitemap drupal/pathauto drupal/metatag drupal/redirect drupal/token。次に、Drupal管理画面の/admin/modulesまたはDrush経由でそれらを有効にします:drush en simple_sitemap pathauto metatag metatag_open_graph redirect。これらのモジュールは、サイトマップ生成、URLエイリアス、メタタグ管理、リダイレクト処理の基盤を提供します。各モジュールが有効になっており、/admin/reports/statusで依存関係エラーがないことを確認してください。
PathautoのURLエイリアスパターンを設定する
/admin/config/search/path/patternsに移動し、各コンテンツタイプのURLパターンを作成します。記事の場合は、/blog/[node:title]のようなパターンを使用します。ページの場合は、/[node:title]を使用します。商品(該当する場合)の場合は、/products/[node:title]、またはカテゴリーベースの階層用の/products/[node:field_category:entity:name]/[node:title]を使用します。パターンを作成した後、/admin/config/search/path/update_bulkに移動し、すべての既存コンテンツのエイリアスを一括生成します。次に、Redirectモジュールをインストールして有効にし、内部ノードパス(/node/123)から新しいエイリアスへの自動301リダイレクトを作成します。
すべてのコンテンツタイプにMetatagモジュールを設定する
/admin/config/search/metatagに移動して、メタタグデフォルトを設定します。グローバルタイトルパターンを[current-page:title] | [site:name]に、canonical URLを[current-page:url]に設定します。次に、コンテンツタイプ固有のオーバーライドを追加します:各コンテンツタイプについて「Add」をクリックし、タイトル、ディスクリプション、canonical URL、robotsディレクティブを設定します。専用フィールドがある場合はディスクリプションを[node:field_meta_description]に、フォールバックとして[node:summary]に設定します。インデックスされるべきでないコンテンツタイプ(webforms、内部ページ)の場合は、ロボットメタをnoindex, followに設定します。
XMLサイトマップを設定して生成する
/admin/config/search/simplesitemapに移動し、含めるエンティティタイプを設定します。すべての公開コンテンツタイプに対して公開されたノードを有効にし、実質的なコンテンツを持つ語彙のタクソノミー用語を有効にし、ユーザープロファイル、webform送信、その他の非公開エンティティを除外します。サイトマップの優先順位を設定します(ホームページ1.0、主要コンテンツ0.8、二次コンテンツ0.5)。「Generate」をクリックして、サイトマップを即座に作成し、次に/sitemap.xmlにアクセスして、期待されるURLが含まれていることを確認します。自動再生成のためにcron間隔を設定してください。
内部パスをブロックするためにrobots.txtを設定する
Drupalサイトのrobots.txtファイル(docroot内)を編集し、クロールされるべきでない内部パスをブロックするルールを追加します。Disallow: /node/(内部ノードパスをブロック)、Disallow: /admin/(管理ページをブロック)、Disallow: /user/(ユーザープロファイルとログインページをブロック)、Disallow: /search/(Drupalの内部検索結果をブロック)を追加します。下部にSitemap: https://yourdomain.com/sitemap.xmlを追加します。RobotsTxtモジュールを使用している場合は、ファイルを直接編集する代わりに、/admin/config/search/robotstxtでこれらのルールを管理してください。
サイトマップを送信し、Google Search Consoleで確認する
DrupalサイトをGoogle Search Consoleに追加します。確認には、Metatag: VerificationサブモジュールをUseして、/admin/config/search/metatag > Global > VerificationでGoogle確認メタタグを追加します。確認後、Google Search ConsoleのSitemapsに移動して、サイトマップURLを送信します。サイトマップレポートでエラーを監視します。一般的なエラーには、403を返すURL(権限の問題)、301を返すURL(ノードパスからリダイレクトするエイリアス)、ソフト404のあるURL(空のコンテンツを持つノード)が含まれます。各エラーカテゴリを修正してから再送信してください。
より高速なインデックスのためにIndexBolt経由で優先ページを送信する
モジュールインストールと設定を完了した後、Drupalサイトには特に移行または主要な再構築の後にインデックスが必要なページのバックログがあることがよくあります。サイトマップURLをエクスポートし、Google Search Consoleのページレポートを使用してまだインデックスされていないページを特定します。最高優先度のページをIndexBolt経由で送信します — 主要なランディングページ、最も価値のあるコンテンツノード、検索可視性を維持する必要のあるバックリンクのあるページに焦点を当てます。DrupalのクリーンでサーバーレンダリングされたHTMLは、IndexBoltのインデックスパイプラインの優れた候補です。
よくある問題と解決方法
ノードパス(/node/123)とURLエイリアスが重複コンテンツを作成する
原因: Drupalコンテンツは、内部ノードパス(`/node/123`)とURLエイリアス(`/blog/my-article`)の両方でアクセス可能です。Redirectモジュールのcanonical URL強制がないと、Googleは両方のURLを発見してインデックスし、同じページの2つのURLの間でランキングシグナルを分割する重複コンテンツを作成する可能性があります。
解決方法: Redirectモジュールをインストールして有効にし、`/admin/config/search/redirect/settings`に移動して「Enforce clean and canonical URLs」を有効にします。これにより、`/node/123`からURLエイリアスへの自動301リダイレクトが作成されます。また、エイリアスを指すcanonical URLを出力するようにMetatagモジュールを設定します。ベルトとサスペンダーの保護として、`Disallow: /node/`をrobots.txtに追加して、Googleが内部パスを完全にクロールするのを防ぎます。
Viewsページネーションが何百もの薄いページを作成している
原因: DrupalのViewsモジュールは、`/blog?page=1`、`/blog?page=2`から`/blog?page=50`のようなURLを作成するページ分けされたリストを生成します。各ページ分けされたページには、コンテンツの小さなサブセット(通常はページあたり10〜25項目)が含まれており、各ページはGoogleの観点から類似に見えます。深いページネーションページ(ページ10以降)には、発見価値がほとんどなく、クロールバジェットを浪費します。
解決方法: 深いページネーションを持つViewsの場合、最初のページを超えるページネーションページにnoindexディレクティブを追加します。これは、Metatagモジュールのトークンシステムまたはpageパラメータを検出するカスタムコードで行えます。あるいは、伝統的なページネーションの代わりに「Load more」パターン(無限スクロールまたは「Load more」ボタン)を使用して、すべてのコンテンツを単一のURLに保持します。View設定でアイテム数を増やすことで、ページ分けされたページの総数を減らします。
薄いコンテンツのタクソノミー用語ページがインデックスされている
原因: Drupalのタクソノミーシステムは、すべての語彙のすべての用語に対してページを作成します。タグ付けされたノードが少ない用語は、薄いアーカイブページ — 1〜2のコンテンツティーザーと独自のテキストのないページ — を生成します。Googleはこれらの薄いページをインデックスする可能性がありますが、ランクは低く、サイト全体の品質シグナルを希薄化します。
解決方法: カテゴリーページとして機能するタクソノミー用語にディスクリプションコンテンツを追加します。タクソノミー用語編集フォームで、トピックを説明する100〜300語のユニークなコンテンツを書きます。タクソノミー用語テンプレートを設定して、このディスクリプションを目立つように表示します。用語ページがまったくインデックスされるべきでない語彙(内部タグ付け語彙など)の場合、その語彙の用語のMetatagデフォルトをnoindexに設定します。Simple XML Sitemap設定で語彙を除外することで、薄いタクソノミー用語ページをサイトマップから削除します。
Drupalの権限が匿名アクセスを公開コンテンツへのアクセスをブロックしている
原因: Drupalの粒度の細かい権限システムは、匿名ユーザー(Googlebotを含む)が公開コンテンツにアクセスするのを意図せず防ぐことがあります。これは、「View published content」権限が匿名ロールから削除された場合、Content Access、Node Accessなどのコンテンツアクセスモジュールがロールによる表示を制限する場合、またはフィールドレベルの権限が匿名ユーザーからコンテンツを隠す場合に発生します。
解決方法: `/admin/people/permissions`に移動して、匿名ユーザーロールがインデックスされるべきすべてのコンテンツタイプに対して「View published content」権限を有効にしていることを確認します。コンテンツアクセスモジュールを使用している場合、公開ノードが匿名ユーザーにアクセス可能であることを確認するためにそれらの設定を監査します。完全にログアウトしてコンテンツページにアクセスしてテストします — アクセス拒否ページが表示された場合、権限が間違っています。また、Simple XML Sitemapモジュールがcron中にコンテンツにアクセスできることを確認します(デフォルトでは匿名ユーザーとして実行されます)。
キャッシュがSEO変更後に古いメタタグを提供している
原因: Drupalの積極的なページキャッシュ(Internal Page Cache、Dynamic Page Cache、外部VarnishまたはCDN)は、メタタグを含む完全にレンダリングされたHTMLを保存します。Metatagモジュールを通じてメタタグを更新する場合 — 特にグローバルまたはコンテンツタイプレベルのデフォルト — キャッシュされたHTMLは、キャッシュTTL設定によっては、数時間または数日間古いメタタグを提供し続ける可能性があります。
解決方法: グローバルまたはコンテンツタイプレベルでメタタグを変更した後、`/admin/config/development/performance` > Clear all cachesですべてのキャッシュをクリアします。Varnishを使用している場合は、Varnishキャッシュもパージします(Varnish CLIで`ban req.http.host == "yourdomain.com"`)。CloudflareまたはCDNを使用している場合は、ダッシュボードまたはAPIを通じてCDNキャッシュをパージします。シークレットブラウザウィンドウでページにアクセスしてソースを表示することで、更新されたメタタグを確認します。継続的な信頼性のために、Purgeモジュールをインストールして、すべてのレイヤーでのキャッシュ無効化を自動化してください。
モジュールの競合が重複または欠落したメタタグを引き起こしている
原因: 複数のDrupalモジュールが同じメタタグを生成しようとする可能性があります。たとえば、テーマが独自のタイトルタグを出力し、Metatagモジュールが別のものを生成し、カスタムモジュールが3番目のものを追加する場合があります。同様に、SEO Checklistモジュール、Google Analyticsモジュール、または他の寄稿モジュールが、Metatagモジュール出力と競合する独自のメタタグを挿入する可能性があります。
解決方法: いくつかのコンテンツページのページソースを表示し、重複したメタタグを検索します — 複数の`<title>`タグ、複数の`<meta name="description">`タグ、または複数の`<link rel="canonical">`タグを探します。重複がある場合は、各タグを生成しているモジュールを特定します。重複ソースを無効にします — 通常は、テーマテンプレートからメタタグ出力を削除し(`html.html.twig`と`page.html.twig`を確認)、すべてのメタタグ生成にMetatagモジュールのみに依存します。Metatagモジュールは、すべてのSEO関連メタタグの単一の真実のソースであるべきです。
プロのヒント
よくある質問
Drupalには組み込みSEO機能がありますか?+
Drupalコアは基本的な構成要素を提供します — クリーンなHTML出力、設定可能な`<title>`タグ、URLエイリアシング(Drupal 8以降、コアに基本的なエイリアス管理が含まれている)、robots.txtのような静的ファイルを提供する機能。ただし、DrupalにはXMLサイトマップ、メタディスクリプション管理、自動canonical URL、構造化データ、リダイレクト管理が最初から含まれていません。これらの機能は、別途インストールして構成する必要のある寄稿モジュール(Simple XML Sitemap、Metatag、Redirect、Pathauto)によって提供されます。
SEOにどのDrupalモジュールが必要ですか?+
重要なDrupal SEOモジュールスタックには次のものが含まれます:サイトマップ生成用のSimple XML Sitemap、自動URLエイリアス用のPathauto、Token(Pathautoに必要)、メタタグ管理用のMetatag、301リダイレクト処理用のRedirect、オプションでrobots.txtを管理画面を通じて管理するためのRobotsTxtモジュール。多言語サイトの場合は、Metatag: hreflangサブモジュールを追加します。すべてのモジュールをComposer経由でインストールし、`/admin/modules`またはDrushを通じて有効にしてください。
/node/123パスがインデックスされないようにする方法は?+
3層アプローチを使用します:(1)Redirectモジュールをインストールし、「Enforce clean and canonical URLs」を有効にして、`/node/123`をURLエイリアスに自動的に301リダイレクトします。(2)canonical URLをエイリアスパスに設定するようにMetatagモジュールを設定します。(3)`Disallow: /node/`をrobots.txtに追加して、Googleが内部ノードパスをクロールするのを防ぎます。これら3つの対策を組み合わせることで、Googleはクリーンなエイリアスのみを見てインデックスし、内部ノードパスは決して見ないことが保証されます。
Drupal移行中にURL変更をどう処理しますか?+
移行前に、サイトマップをエクスポートして現在のサイトのすべてのURLを文書化します。Drupalへの移行後、可能な限り古いURL構造に一致するエイリアスを生成するようにPathautoを設定します。変更する必要があるURLについては、Redirectモジュールを使用して301リダイレクトを作成します。`/admin/config/search/redirect/import`でCSVを介してリダイレクトを一括インポートできます。リダイレクトを設定した後、サイトマップをGoogle Search Consoleに再送信し、リダイレクトの欠落を示す404エラーがないか、ページレポートを監視してください。
DrupalのViewsページがインデックスされないのはなぜですか?+
Viewsページがインデックスされない理由はいくつかあります:Viewsページ URLがサイトマップに含まれていない(Simple XML Sitemapのカスタムリンクで手動で追加)、ページコンテンツが他のページに非常に似ている(コンテンツが重複するページ分けされたビュー)、ページのメタロボットタグが正しくない(Viewsディスプレイのために Metatagモジュール設定を確認)、または匿名ユーザーが持たない権限をページが必要としている。特定の問題を診断するために、Google Search ConsoleのURL検査ツールでViewsページのURLをテストしてください。
基本認証背後のDrupalサイトでIndexBoltを使用できますか?+
IndexBoltは公開URLにアクセスする必要があるため、インデックスさせたい本番ページについては、基本HTTP認証(Drupalステージング環境で一般的)を削除する必要があります。ステージングサイトに基本認証がある場合は問題ありません — ステージングはインデックスされるべきではありません。本番サイトは、認証バリアなしで公開アクセス可能でなければなりません。Drupalのコンテンツアクセス権限はHTTP認証とは別です — 匿名ユーザーが公開ノードを表示できる限り、IndexBoltはそれらのURLをインデックスのために送信できます。