あなたのウェブサイトが突然「隠しリンク型のスパム」にやられると、本当にヤバいことになります。軽い場合はGoogleの順位がガクッと下がって、アクセスが半減。重いと「危険なサイト」としてブラックリスト入りすることも。
ほとんどの人は異常に気づいた時にはすでに手遅れ状態。しかも、ページを削除したり、サーバーを止めたりすると、逆に状況を悪化させてしまいます。
私たちは8年間、実戦でSEOをやってきて、60件以上の「隠しリンク侵入」を解決してきました。その中で確立したのが、“72時間以内の被害制御+高速リカバリー”の標準手順です。
Screaming Frogでリダイレクトコードを特定したり、手動でリンクを削除してGoogleに修復報告を出したり(実際のテンプレあり)、悪質なリンクの影響を中和する「信頼コンテンツ」を出したりと、どの手順も3つの時間ポイント(24時間 / 3日 / 7日)を守ることが超重要です。
特に注意!過去7日で主要キーワードの順位が10位以上落ちていて、インデックス内に「?redirect=casino」みたいなURLが出てきたら、すでにハッキングされている可能性が高いです。まず最初のステップに進んで、チェックを始めてください。
Table of Contens
Toggleあなたのサイト、本当に「隠しリンク」にやられてる?
隠しリンクの怖いところは、エラー画面も出ないし、サイトが落ちたりもしない点。だからこそ見落とされやすいんです。
ほとんどの人は、Google順位が半分以下に下がった後に初めて異常に気づきます。でもその時点では、すでに悪質なリンクが数週間表示されているかもしれません。Googleに「マルウェアサイト」としてマークされている可能性も。
私たちの経験では、70%以上の隠しリンクが「画像フォルダ」「古い投稿」「JSスクリプト」に埋め込まれていて、見た目ではまず気づけません。
コードがわからなくてもOK。10分以内に「寄生リンク」を見つけられる激安なツール活用法をご紹介します。
Google Search Console:公式警告をチェック
- 「セキュリティと手動対策」→「手動対策」へ。「不自然なリンク」「ハッキングされたコンテンツ」などの赤い警告があれば、確定です。
- 要注意:一部のハッカーは「問題なし」と偽装します。「セキュリティの問題」→「サンプルページを見る」で、対象URLをクリックして中にリダイレクトコード(
<meta http-equiv="refresh" content="0;url=ギャンブルサイト.com">
など)があるか確認を。
ウェブ管理ツール:隠しリダイレクトコードをスキャン
Screaming Frog(無料版で最大500URLまで)を使って、次の条件で絞り込み:
- 外部リンクが異常に多いページ(10個以上なら警戒)
- “style=display:none”付きのリンク(例:
<a href="ギャンブルサイト" style="display:none">
) - 外部JSを読み込んでるページ(例:
<script src="http://怪しいドメイン.js">
)
スピード確認:Chrome拡張 Link Redirect Traceで301リダイレクトの実態を追跡しましょう。
検索インデックス:影のページを見破る
Google検索で以下のように調べてみてください:
site:yourdomain.com intitle:カジノ/くじ/アダルト
site:yourdomain.com inurl:.php?ref=
「オンラインカジノセール」みたいな、自分が作った覚えのないページが出てきたら、すでにスパムページが埋め込まれています。
究極の確認方法:サーバーログ(/var/log/apache2/access.log
)を開いて「.php?
」で検索し、不審なアクセスを調べましょう(例:ベトナムやウクライナIPからのPOSTリクエストが連続)。
重要なヒント:もし/wp-content/uploads/2023/
のような画像フォルダに隠しリンクが集中しているなら、画像アップロードの脆弱性を突かれた可能性があります。ファイル名に<?php eval(
などのコードが含まれてないか確認を。
隠しリンクを完全削除する3ステップ
もし見つけたなら、最初の72時間が勝負です。多くの人があわててページを削除したり、全部再インストールしたりしますが、それは逆効果。Googleに「コンテンツ不安定」と判断されて順位がさらに落ちることも。
60件以上の実例から導き出された鉄則は:「まず証拠を集める→削除と並行して→Googleに復旧申請」です。
1. サイト全体をバックアップ:誤削除を防ぐ
特にバックアップすべきフォルダ:
/wp-content/uploads/
(画像ファイル内にPHPコードが埋め込まれていないか確認)/wp-includes/js/
(jquery-migrate.min.jsなどが改ざんされていないかチェック)
おすすめのツール:
- 宝塔面板(BTパネル)でワンクリックフルバックアップ(データベース含む)
- Duplicatorプラグインでサイト全体をパッケージ化(キャッシュファイルは自動スキップ)
2. 悪意のあるコードを手動で削除する(高リスクの特徴付き)
以下のキーワードを全体検索してください:
eval(base64_decode('暗号化文字列'));
$k="ハッカーのパスワード";error_reporting(0);
<iframe src="http://悪意のあるドメイン" style="visibility: hidden;">
優先的にチェックすべきファイル:
.htaccess
(例:RewriteRule ^.*$ http://ギャンブルサイト [R=301,L]
が挿入されていないか確認)header.php
/footer.php
(不審なJS呼び出しがないか確認。例:document.write("
)")
補助ツール:
Dシールド(D_Safe)を使ってサーバーをスキャンすれば、system()
、passthru()
などの危険な関数を含むファイルを自動でマークしてくれます。
3. 侵入経路を遮断:再感染を防ぐ
- 管理画面のログインURLを変更(WordPress):
WPS Hide Login プラグインをインストールして、/wp-admin/
をカスタムパス(例:/mylogin-2024/
)に変更します。 - 脆弱性の緊急修正:
- すべてのプラグインを最新版にアップデート(WPScan で既知の脆弱プラグインをチェック)
- 使っていないテーマやプラグインを削除(特に名前が怪しいもの、例:
wp-seo-optimize
)
- サーバーの権限を強化:bashコピー
# アップロードディレクトリでPHPの実行を禁止 find /サイトパス/wp-content/uploads/ -type f -name "*.php" -exec rm -f {} \; chmod 644 .htaccess # 書き込み権限を制限
重要なポイント:除去作業が終わったらすぐにLink Redirect Traceプラグインで全サイトをスキャンし、残留したリダイレクトコードがないか確認してください。もしデータベース(例えばwp_posts
テーブルのpost_contentフィールド)に暗号化されたコードとして隠しリンクが保存されている場合は、Adminerツールを使って以下のSQLコマンドを実行してください:
UPDATE wp_posts SET post_content = REPLACE(post_content, '悪意のあるコード部分', '');
Googleへ再審査を提出する
隠しリンクの除去は第一歩に過ぎません。48時間以内にGoogleへ有効な再審査申請を行うことが順位回復の核心です。
90%のサイト管理者が「証拠不十分」や「誤った言い回し」で再審査に失敗し、さらに二次の手動審査が発生(回復まで3〜6か月延長)してしまいます。
私はすぐに使える英語の申請テンプレートと、合格率を80%アップさせる「強力な証拠パッケージ」を提供しています。
1. Search Consoleで「手動対応」再審査を申請する
操作手順:
「セキュリティと手動対応」→「手動対応」→「再審査リクエスト」をクリック。
英語の申請テンプレート(赤字部分は置き換えてください):
We have removed all spammy backlinks injected by hackers:
1. Deleted malicious codes in .htaccess and footer.php (see screenshot_1.png).
2. Blocked 142 suspicious IPs from Vietnam/Ukraine (access.log attached).
3. Fixed the vulnerability via updating plugins (e.g. Elementor from 3.6 to 3.19).
Request to revoke the manual penalty.
必須添付資料:
- 除去前後のコード比較スクリーンショット(WinMergeでファイル比較)
- サーバーの悪意あるIPブロックログ(時間、IP、攻撃経路を含む)
- Screaming Frogでの全サイト外部リンクスキャンレポート(PDF出力)
2. 「セキュリティ問題」レポートも同時に処理する
「セキュリティ問題」→感染したページをすべてチェック→「修正済みとしてマーク」をクリック。
クロール促進テクニック:
URL検査ツールで感染したURLを入力→「インデックス登録をリクエスト」をクリック(1日最大50件まで)。
3. 再審査失敗を防ぐ隠れたテクニック
- 「We apologize」などの謝罪表現は避ける(Googleは責任回避と見なします)。事実ベースで説明しましょう。
- 第三者のセキュリティレポートを添付する(例えばSucuriやSiteCheckのスキャン結果)で、サイトが安全であることを証明します。
サイトコンテンツを継続的に更新する:
再審査申請後24時間以内にオリジナル記事を2本投稿してください(Googleは「積極的な管理」のシグナルとみなします)。
重要なポイント:7日経ってもGoogleから返答がなければ、「検索の見え方 → クロール最適化」機能でsitemap.xmlを再提出し、注釈欄に「Malware cleaned up, please recrawl critical pages like /contact-us/ and /blog/」と強調してください。
手動対応警告が解除されない場合は、28日後に同じ証拠で再提出してください(スパム検知の回避のため)。
低コスト防御設定チェックリスト
「防御にコストがかかる」というのは最大の誤解です。80%のハッカー攻撃は、更新されていないプラグイン、弱いパスワード、デフォルトの管理者パスなどの基本的な脆弱性を狙っています。
私たちは年間500元以下の予算で、顧客のサイトを2万回以上の悪意あるスキャンから防御した実績があります。
基本的なサーバー操作ができれば、1時間以内にサイト全体の強化が可能です。
1. 基本防御3点セット(無料)
リアルタイムファイル監視:
- 宝塔パネルの「ファイル改ざん防止」機能を使い(無料)、
wp-config.php
や.htaccess
などの重要ファイルをロック。変更があればSMSで通知。
ブルートフォース攻撃防止:
- Wordfence(無料版)をインストールし、「リアルタイムトラフィック監視」を有効に。15分間に5回以上ログイン失敗したIPを自動でブロック。
自動クラウドバックアップ:
- UpdraftPlusでGoogleドライブに毎日バックアップを設定(7日分保存)。侵入されたらすぐにクリーンなバージョンに戻せます。
2. 必ず変更すべきサーバーの危険な設定
危険なPHP関数を無効化する:
php.ini
ファイルを編集し、disable_functions
の後に以下を追加してください:
system,exec,passthru,shell_exec,proc_open,curl_multi_exec
アップロードディレクトリの権限を制限する:
# /uploads/でのPHP実行を禁止
find /サイトパス/wp-content/uploads/ -type f -name "*.php" -delete
chmod -R 755 /サイトパス/wp-content/uploads/
サーバー情報を隠す:
.htaccess
の先頭に以下を追加してください:
ServerSignature Off
Header unset X-Powered-By
3. ファイアウォールルール(月額コスト ≤ $20)
Cloudflare無料プランの設定:
- ルール1:
/wp-admin/
またはxmlrpc.php
を含むアクセスに対してチャレンジ(ホワイトリストIP除く) - ルール2:User-Agentに
sqlmap
やnmap
を含むリクエストをブロック
リスクの高い国のIP範囲をブロック:
宝塔パネルの「ファイアウォール」で以下の拒否ルールを追加してください:
ベトナム:14.224.0.0/11
ロシア:46.161.0.0/18
ウクライナ:37.52.0.0/14
重要なヒント:四半期ごとにWPScanで脆弱性スキャンを実行しましょう(コマンド:wpscan --url あなたのドメイン --api-token あなたのトークン
)。
リスクレベルが中〜高のプラグインを優先して対応してください。
Nginxサーバーを使っている場合は、設定に以下を必ず追加してください:
location ~* ^/(uploads|wp-content)/.*\.(php|php5|phtml)$ {
deny all;
}
(画像ファイルを介したPHPコードの実行を完全に防ぎます)
「ワンクリック修復プラグイン」に頼らないでください — 人気のセキュリティプラグイン13種類を分析したところ、9種類で過剰な権限や誤削除の問題が見つかりました。
手動での防御設定(.htaccessルールやサーバー権限の設定)が唯一の確実な方法です。