Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/terasakisd/link-miss-checker/archive/refs/heads/main.zip記事更新前にリンクのミスを自動チェックし、問題があれば更新を止めるWordPressプラグイン。週1回の全記事巡回とチャット通知機能つき。
解消できること
- リンクの末尾が欠ける(コピペミス)
- パラメータの重複、古いスラッグのまま
- 差し替え後にリンクが飛ばない
動作の流れ
- 記事の「更新」ボタンを押す
- ツールが記事内のリンクを全部抜き出す
- 1つずつ自動でアクセスして確認
- ちゃんと飛ぶか(HTTPステータス・リダイレクト追跡)
- 末尾が欠けていないか(
-=%等での終端、不完全な%エンコード) - パラメータが重複していないか
- 内部リンクが今のスラッグと一致しているか(旧スラッグ検出)
- JSリンク(
<div id="bt414">等、JSで遷移する要素)の遷移先URLも同様にチェック
- 問題があれば一覧モーダルで表示して、更新を止める
- 人が直して、もう一度チェック(「このまま更新する」で強制更新も可能)
- 問題なければそのまま更新
さらに週1回(月曜 午前6時)、全記事の広告リンクを自動巡回し、問題があればチャットに通知します。
インストール
link-miss-checkerフォルダをwp-content/plugins/にアップロード (または ZIP を「プラグイン > 新規追加 > プラグインのアップロード」から)- プラグインを有効化
- 「設定 > リンクミス発見」で通知先などを設定
導入チェックリスト(本番サイト)
1. Chatwork通知の接続
- APIトークンの発行: Chatwork右上の自分のアイコン →「サービス連携」→「APIトークン」 でトークンを表示・コピー(管理者がAPI利用を許可している必要があります)
- ルームIDの確認: 通知先のグループチャットを開き、URLの
#!ridの後ろの数字 (例:https://www.chatwork.com/#!rid12345678→12345678) - 「設定 > リンクミス発見」で通知先サービスを「Chatwork」にし、 APIトークンとルームIDを入力して保存
- 「ツール > リンク巡回結果」の「テスト通知を送信」ボタンを押し、ルームに届くか確認
- 失敗した場合は画面に失敗理由が表示されます(HTTP 401ならトークン誤り、 HTTP 403/404ならルームIDの誤りか未参加のルームです)
通知は [info][title]リンクミス発見ツール[/title]...[/info] 記法で囲んで送信されるため、
Chatwork上で枠付きの見やすいメッセージになります。
2. サーバーcronの設定
WP-Cronはサイトへのアクセスを契機に動くため、アクセスの少ないサイトでは 週次巡回が遅れます。サーバーのcronに以下を登録すると確実です (「ツール > リンク巡回結果」の上部に、サイトのURL入りでコピーできる形で表示されます):
*/15 * * * * curl -s "https://あなたのサイト/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
さらに wp-config.php に define( 'DISABLE_WP_CRON', true ); を追加すると、
アクセス契機の実行を止めてサーバーcronだけで動かせます(任意)。
3. 自動巡回の監視
「ツール > リンク巡回結果」上部のパネルで以下を常時確認できます:
- 次回の自動巡回の日時
DISABLE_WP_CRONが有効なのにサーバーcron未設定の疑いがある場合の警告- 前回の巡回から8日以上経過している場合の警告
また、週次イベントが何らかの理由で消えた場合や、巡回が途中で止まった場合は、 管理画面を開いたタイミングで自動的に再登録・再開されます(自己修復)。
設定項目
| 項目 | 説明 |
|---|---|
| 更新ブロック | エラー時に記事更新を止めるか |
| 巡回対象リンク | 広告リンクのみ / すべての外部リンク |
| 広告リンクのパターン | 初期値はそのサイトのドメイン。1行1パターンで、ドメイン(example.com)または「/」を含むURL部分一致(/code/)を指定できる |
| Chatwork通知 | 週次巡回の結果を通知(APIトークン+ルームID) |
画面
- ツール > リンク巡回結果 — 週次スキャンの結果一覧。「今すぐ全記事をスキャン」「テスト通知を送信」ボタンあり
- 設定 > リンクミス発見 — 各種設定
チェック項目の詳細
| コード | 重大度 | 内容 |
|---|---|---|
invalid_url |
エラー | URLの形式が不正(スキーム・ホスト欠け) |
broken_markup |
エラー | hrefに \" (エスケープされた引用符)が混入している(一括置換ツールの変換ミス等。クリックしても開けない状態) |
truncated |
エラー | 末尾欠けの疑い(- = % ? & . , _ 終端、不完全な%エンコード) |
dup_param |
エラー | クエリパラメータの重複 |
old_slug |
エラー | 旧スラッグへの内部リンク(現在のURLを提示) |
internal_not_public |
エラー | リンク先の記事が非公開 |
http_error |
エラー | アクセス不可、または HTTP 400 以上(401/403/429はbot対策とみなし報告しない。クッション/リダイレクトで外部ドメインへ移動した末の4xxも、広告主のbot対策とみなし報告しない) |
redirect_to_top |
警告 | トップページへリダイレクト(商品ページ削除の典型パターン) |
ssl_expired |
エラー | リンク先のSSL証明書が期限切れ(ブラウザでブロックされる)。チェック元サーバーのルート証明書が古いだけの検証失敗は、応答があれば報告しない |
js_unresolved |
エラー | JSリンクの遷移先URLがどこにも見つからない(リンクが飛ばない状態) |
JSリンクへの対応
<div id="bt414">詳細</div> のように、idを設定してJSで遷移させている要素にも対応しています。
遷移先URLの探索場所(上から順に優先):
- 記事本文内の `