Link checker
コンテンツからハイパーリンクを抽出してHTTPレスポンスコードを評価することで、定期的にリンク切れをチェックし、結果を管理画面 > レポート > リンク切れに表示します。
linkchecker
インストール
composer require 'drupal/linkchecker:^2.1'
composer require 'drupal/linkchecker:^2.0'
概要
Link checkerモジュールは、Drupalサイトの包括的なリンク切れ検出と管理機能を提供します。Entityが保存される際に設定されたコンテンツFieldからリンクを抽出し、リモートサーバーにHTTPリクエストを送信してレスポンスコードを評価することで、これらのリンクを定期的にチェックします。
このモジュールは、ハイパーリンク、画像、音声、動画、iframe、埋め込みコンテンツなど、様々なHTML要素からの抽出をサポートしています。恒久的に移動したリンク(301リダイレクト)を自動修復したり、設定可能な失敗チェック回数のしきい値を超えた後、リンク切れ(404エラー)を含むコンテンツを非公開にすることができます。
すべてのリンク切れは、管理画面 > レポート > リンク切れでアクセス可能な一元化されたレポートに表示され、管理者はリンクのステータス、エラーメッセージ、失敗回数、関連コンテンツを確認できます。このモジュールはDrupalのCronシステムと統合してバックグラウンド処理を行い、コマンドライン操作用のDrushコマンドを提供します。
Features
- コンテンツ保存時にテキストField、リンクField、および様々なHTMLタグ(a、area、audio、video、img、iframe、embed、object)からリンクを抽出
- 設定可能な間隔(1〜90日)でHTTP HEAD/GETリクエストを使用してリンクステータスを定期的にチェック
- サーバー過負荷を防ぐため、ドメインごとの制限付きで同時HTTP接続(2〜128同時)をサポート
- フィルタリングとページネーション付きで/admin/reports/broken-linksからアクセス可能なリンク切れレポートViewを提供
- 設定可能な失敗しきい値後、コンテンツ内のURLを更新することで301リダイレクトされたリンクを自動修復
- 設定可能な失敗しきい値後、404リンク切れを含むコンテンツを自動的に非公開化
- デフォルトのDrupal User-Agentをブロックするサイトに対応するための設定可能なUser-Agentヘッダー
- コンテンツタイプのFieldごとに選択的スキャンを可能にするField単位の設定
- 設定可能なURLタイプフィルタリングで内部リンクと外部リンクの両方のチェックをサポート
- リンクチェック中にHTTPリクエストヘッダーをカスタマイズするためのイベントをディスパッチ
- コマンドラインでコンテンツを分析しリンクをチェックするためのDrushコマンドを提供
- 失敗回数、最終チェックタイムスタンプ、エラーメッセージを含むリンクチェック履歴を追跡
- Drupal 6/7から現在のバージョンへの設定の移行をサポート
- 特定のドメインをチェックから除外するためのURLブラックリスト(例:example.comの予約済みドメイン)
Use Cases
コンテンツ品質監査
サイトコンテンツの定期的な監査を実行して、利用できなくなった可能性のある外部リンク切れを特定します。すべてのテキストFieldとリンクFieldをスキャンするようにモジュールを設定し、適切なチェック間隔(例:週次)を設定し、コンテンツ品質を維持するためにリンク切れレポートを定期的に確認します。
自動リンク修復
「恒久的に移動したリンクを更新」を「3回の失敗チェック後」に設定して、恒久的に移動したリンクの自動修復を有効にします。これにより、外部サイトが適切な301リダイレクトを提供する場合、手動介入なしでコンテンツが新しいURLを使用するように自動更新されます。
品質管理のためのコンテンツ非公開
「ファイル未検出エラー時にコンテンツを非公開」を「3回のファイル未検出エラー後」などのしきい値に設定して、永続的なリンク切れを含むコンテンツの自動非公開を設定します。これにより、問題を確認して修正する間、ユーザーがリンク切れのあるコンテンツを見ることを防ぎます。
画像とメディアリンクの検証
<img>、<audio>、<video>タグからの抽出を有効にして、埋め込みメディアファイルがまだアクセス可能かどうかを確認します。これは、ユーザー生成コンテンツや外部ソースからインポートされたコンテンツを持つサイトに特に有用です。
SEOメンテナンス
リンク切れレポートを使用して、SEOに悪影響を与えるリンク切れを特定して修正します。検索エンジンは多くのリンク切れを持つサイトにペナルティを課すため、定期的な監視は検索ランキングの維持に役立ちます。
移行検証
別のシステムからコンテンツを移行した後、「リンクデータをクリアしてコンテンツのリンクを分析」を使用してすべてのリンクを抽出し、'drush linkchecker:check'を実行して、移行されたすべてのリンクが機能していることをすぐに確認します。
Tips
- 控えめな設定から始める - 最初は<a>タグの抽出のみを有効にし、必要に応じて拡張する
- 一時的な障害に対応しないよう、自動修復と自動非公開には「3回の失敗チェック後」を使用する
- 外部サーバーの過負荷を避けるため、ドメインごとの接続制限はデフォルトで2に設定されている
- 予約済みドキュメントドメイン(example.com、example.net、example.org)はRFC 2606に従ってURLブラックリストに常に保持される
- 編集履歴を維持するため、自動修復を有効にする前にコンテンツタイプ設定で新しいリビジョンを有効にする
- すべてのリンクが適切にインデックスされていることを確認するため、モジュールをアップグレードした後に'drush linkchecker:analyze'を実行する
- 大規模サイトでは、影響を最小限に抑えるため、オフピーク時間帯にDrush Cronでリンクチェックを実行することを検討する
Technical Details
Admin Pages 3
/admin/config/content/linkchecker
Link checkerモジュールのリンク抽出、チェック動作、エラー処理設定を構成します。このページでは、管理者がスキャンするHTMLタグの制御、チェック間隔の設定、同時接続の構成、リンク切れに対する自動アクションの定義ができます。
/admin/reports/broken-links
HTTPステータスコード、エラーメッセージ、失敗回数を含むすべての抽出されたリンクを表示・管理します。ステータスコード、リンクタイプ、またはコンテンツでフィルタリングできます。クリックして関連コンテンツを表示または編集できます。
/admin/config/content/linkcheckerlink/{linkcheckerlink}/edit
個別のリンクEntityの設定を編集します。リクエストメソッドの変更や、特定のURLのリンクチェックの有効化/無効化ができます。
権限 4
Hooks 5
hook_entity_insert
Entityが作成されたときにトリガーされます。Link checkerは設定されたFieldからリンクを抽出し、linkcheckerlink Entityを作成します。
hook_entity_update
Entityが更新されたときにトリガーされます。Link checkerはリンクを再抽出し、linkcheckerlink Entityを更新/作成し、孤立したリンクを削除します。
hook_entity_delete
Entityが削除されたときにトリガーされます。Link checkerは関連するlinkcheckerlink Entityを削除し、Queueエントリをクリーンアップします。
hook_cron
Cron実行中に呼び出されます。Link checkerはリンク抽出のためにインデックスされていないEntityを処理し、HTTPチェックのためにリンクをQueueに入れます。
hook_form_field_config_form_alter
Field設定フォームを変更してLink checker設定を追加します。「リンク切れをスキャン」チェックボックスとエクストラクター選択を追加します。
Drush Commands 3
drush linkchecker:analyze
すべての設定されたFieldからURLを抽出してコンテンツのリンクを再分析します。モジュールのアップグレードまたは設定変更後に推奨されます。
drush linkchecker:check
Queueに入れられたリンクを処理し、HTTPステータスをチェックします。リンクは設定された間隔に基づいてチェックされます。
drush linkchecker:clear
すべてのリンクデータをクリアしてコンテンツを再分析します。警告:カスタムリンク設定は削除されます。
Troubleshooting 6
一部のサーバーはデフォルトのDrupal User-Agentをブロックします。User-Agent設定をFirefoxやEdgeなどのブラウザのUser-Agentに変更してみてください。
Cronがlocalhostではなく正しい公開サイトURLで呼び出されていることを確認してください。ベースパス設定を構成するか、Drushコマンドに--uriパラメータを渡してください。
各コンテンツタイプのField設定で「リンク切れをスキャン」が有効になっていることを確認してください。リンク抽出設定で適切なHTMLタグが有効になっているかチェックしてください。
リンクは設定された間隔に基づいてチェックされます。新しいリンクが最初にQueueに入れられます。最近のログメッセージでLink checkerのアクティビティを確認してください。'drush linkchecker:check'でチェックを強制できます。
301修復はリモートサーバーが提供するリダイレクト先を信頼します。サイトが不正なリダイレクトを提供する場合は、自動修復機能を無効にして手動でリンクを更新してください。
「同時接続数」をより低い値(例:2または4)に減らして、同時HTTPリクエストとサーバーリソースの使用量を減らしてください。
Security Notes 5
- 「Link checkerを管理」権限は制限付きとしてマークされている - 信頼できる管理者にのみ付与する
- 代理アカウント設定は適切な権限を持つユーザーを使用すべきだが、自動コンテンツ変更のセキュリティへの影響を考慮する
- 自動修復機能は外部サイトからの301リダイレクトを信頼するため、悪意のあるリダイレクトによって不要なURLが挿入される可能性がある
- ブラックリスト内のURLは抽出されるがチェックされない - コンテンツ内では引き続き表示される
- モジュールは外部URLにHTTPリクエストを送信するため、コンテンツに特別に作成されたURLが含まれている場合、リモートサーバー上でアクションをトリガーするために使用される可能性がある