「自分のサイトに、見覚えのないカジノページが大量に表示されている気がする」と不安になっていませんか?
WordPressの管理画面を開いても投稿一覧には何も増えていない。
なのに、検索結果やアクセス解析にはオランダ語や英語のカジノ記事のURLが大量に並んでいる
——そんな現象に直面したら、それはほぼ間違いなく「Japanese SEO Spam」と呼ばれるタイプのマルウェア感染です。
このタイプの感染は非常に巧妙で、サイト所有者がいくらWordPress管理画面を確認しても異常を発見できないように作られています。
本記事では実際の駆除事例をもとに、症状の見分け方・隠蔽の仕組み・完全駆除の手順までを順を追って解説します。
WordPressの復旧を多数手がけてきたよこやま良平です。わたしの現場経験をもとに、感染確認から完全駆除・再発防止まで丁寧に解説します。
- 「管理画面に表示されないのにカジノページが表示される」現象の正体
- マルウェアが投稿を隠す3つの典型的な手口
- 感染を確認するためのデータベース調査の進め方
- スパム投稿を安全に一括削除するSQL手順
- 削除後に必ずやるべき再発防止の対策
結論からお伝えすると、この種の感染はファイルとデータベースの両方を駆除しなければ完全に消えません。
そして、駆除後すぐに侵入経路を塞がなければ数日以内に同じ被害が再発します。手順を1つずつ確認していきましょう。
こんな症状が出ていたらJapanese SEO Spamマルウェア感染を疑う
まず、自分のサイトが感染しているかどうかを症状から見分けるポイントを整理します。
次のいずれか1つでも当てはまる場合は、すぐに調査を始めてください。

症状1:見覚えのないURLでカジノページや英語のスパムページが表示される
たとえば自分のサイトのURLに `/cad-5-minimum-deposit-casino-australia/` のような長い英語スラッグを付けてアクセスすると、
なぜかページが表示されてしまう、というケースです。
本来そのようなページは作っていないはずなので404エラーになるべきところ、堂々と表示されてしまうのは、
攻撃者がデータベースに直接スパム投稿を流し込んでいる証拠です。
Googleの検索結果にこういった不審なURLが大量に並んでいるのを見つけて気づくことも多くあります。
症状2:管理画面の投稿一覧には異常がない
これがJapanese SEO Spamの最も厄介な特徴です。フロント側では数千件のスパム記事が表示されているにも関わらず、
WordPress管理画面の投稿一覧には正常な記事しか表示されません。

「管理画面では何も増えていないから感染していないはず」と判断してしまうと、
Googleにスパム記事をインデックスされ続け、被害がどんどん拡大します。
フロントの表示とDBの実態を必ず両方確認することが大切です。

症状3:訪問者からカジノサイトへリダイレクトされる
感染ページに人間がアクセスすると外部のカジノサイトに自動でリダイレクトされ、
Googlebotがアクセスするとスパム記事の中身がそのまま見える、という挙動になっているケースもあります。
これは「クローキング」と呼ばれる手口で、
Japanese SEO Spamマルウェア感染はなぜ管理画面に出ないのにフロントには表示されるのか
このマルウェアの巧妙さは、管理画面とフロントエンドで「投稿が見えるかどうか」を完全に切り分けてしまう点にあります。
仕組みを理解しておくと、感染確認も駆除もスムーズに進みます。
仕組み1:存在しない投稿者IDで投稿を隠す
WordPressの管理画面の投稿一覧は、投稿者情報を表示するために `wp_posts` テーブルと `wp_users` テーブルを内部的にJOIN(結合)しています。
攻撃者はこの仕様を逆手に取り、`wp_users` に存在しない4桁の数字を `post_author` にセットしてスパム投稿をINSERTします。
その結果、管理画面のクエリでは投稿者が見つからないためスパム投稿が一覧から脱落し、見えなくなります。
一方でフロントエンドの `is_singular()` などのテンプレート関数は投稿者の存在を確認しないため、
URL直打ちすれば普通に表示できてしまうのです。
仕組み2:MUプラグインによるトラッキング配信
感染サイトには `wp-content/mu-plugins/` 配下に、正規ファイル風の名前を持つ偽プラグインが設置されています。
MUプラグイン(Must-Use Plugins)はWordPressが強制ロードする領域で、管理画面のプラグイン一覧にはほとんど表示されません。
このプラグインが、特定の数字範囲の `post_author` を持つ投稿を表示したときだけ外部C2サーバーから配信スクリプトを読み込み、ユーザーをカジノサイトへ誘導する役割を担っています。「アナリティクスっぽい」「セキュリティっぽい」名前で偽装されているため、ファイル名だけ見て安全と判断するのは危険です。
仕組み3:難読化されたバックドアによる遠隔操作
典型的な感染サイトには、base64やXOR暗号で何重にも難読化されたPHPマルウェアが複数仕込まれています。
これらは外部からHTTPリクエストでパラメータを渡すと任意のPHPコードを実行できるバックドアとして機能します。
レスポンスは常に404を返すように作られているため
、外部から見ると単なる「存在しないページ」にしか見えませんが、特定のキー文字列を知っていれば誰でも
サーバー上でコードを実行できる状態になっています。
Japanese SEO Spamマルウェア感染を確認する具体的な調査手順
感染が疑われる場合、最初にやるべきはデータベースの直接調査です。
phpMyAdminかMySQLコマンドラインからアクセスし、次の順番で確認していきます。

手順1:投稿者IDの分布を確認する
まずphpMyAdminで対象サイトのデータベースを開き、SQLタブから次のクエリを実行します。
SELECT post_author, COUNT(*) AS cnt
FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY post_author
ORDER BY cnt DESC;このクエリで投稿者ID別の投稿数が表示されます。正常なサイトであれば管理者ID(通常は1)に投稿が集中しているはずです。ところが感染サイトでは、見覚えのない4桁の番号に数千件もの投稿がぶら下がっている、という結果が返ってきます。
手順2:その投稿者IDが実在するか確認する
次に、見つかった投稿者IDが本当にユーザーとして登録されているかを確認します。
SELECT * FROM wp_users WHERE ID = (確認したいID);
SELECT * FROM wp_usermeta WHERE user_id = (確認したいID);両方とも0件(行数0)が返ってきたら、その投稿者IDは存在しない偽IDだという証拠です。これで「管理画面に表示されない理由」が確定し、さらに「該当する投稿はすべて攻撃由来である」という確証が得られます。
手順3:投稿日時の偏りを確認する
攻撃投稿はスクリプトで一括INSERTされるため、ほぼすべて同一秒の `post_date` を持っています。次のクエリで時刻ごとの投稿数を集計すると、特定の日時に異常に多くの投稿が集中していることが見えます。
SELECT post_date, COUNT(*) AS cnt
FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY post_date
HAVING cnt > 10
ORDER BY cnt DESC
LIMIT 30;同じ秒に10件以上投稿されているのは人間の手作業ではあり得ない頻度なので、ここに表示される日時が攻撃が実行されたタイミングだと判断できます。この日時はサーバーのアクセスログ調査で侵入経路を特定する際にも重要な手がかりになります。
Japanese SEO Spamマルウェア感染ファイルとデータベースの完全駆除手順
感染が確定したら駆除に入りますが、実行する順番を間違えると再感染します。原則は「ファイル側を先に処理→DB側を処理」の順です。

ステップ1:MUプラグインと不審なPHPファイルを削除する
サーバーのSSHかFTP、またはレンタルサーバーのファイルマネージャから次の場所を確認してください。
- wp-content/mu-plugins/ — 見覚えのないPHPファイルがあれば全て削除候補
- wp-content/uploads/ — 本来PHPファイルが置かれることはない領域
- wp-content/object-cache.php / advanced-cache.php / db.php — drop-insと呼ばれる隠れやすい場所
- WordPressコア直下のランダムな英数字ファイル名のPHPファイル
削除前にバックアップを取り、ファイルの中身を確認してから削除してください。`base64_decode` と `eval` の組み合わせ、`str_rot13` と `urldecode` の組み合わせ、固定の暗号鍵らしき文字列が含まれていれば、ほぼ確実に難読化されたマルウェアです。
ステップ2:データベースのバックアップを取得する
SQL削除に進む前に、必ずデータベースの完全バックアップを取得してください。
phpMyAdminの「エクスポート」タブから「実行」を押すだけでSQLファイルがダウンロードできます。
このバックアップさえあれば、万一削除条件を間違えても元の状態に戻せます。
ステップ3:トランザクション内で関連データを順に削除する
WordPressの投稿は `wp_posts` 本体だけでなく、`wp_postmeta`(メタ情報)、`wp_term_relationships`(カテゴリ・タグ紐付け)、`wp_comments`(コメント)など複数のテーブルにまたがってデータを持っています。安全に削除するには、関連テーブルから先に消していきます。
-- 偽IDをXとする(実際の値に置き換える)
START TRANSACTION;
-- 関連メタを削除
DELETE pm FROM wp_postmeta pm
INNER JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.post_author = X;
-- カテゴリ・タグ紐付けを削除
DELETE tr FROM wp_term_relationships tr
INNER JOIN wp_posts p ON tr.object_id = p.ID
WHERE p.post_author = X;
-- コメントとコメントメタを削除
DELETE c FROM wp_comments c
INNER JOIN wp_posts p ON c.comment_post_ID = p.ID
WHERE p.post_author = X;
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON cm.comment_id = c.comment_ID
WHERE c.comment_ID IS NULL;
-- 本体を削除
DELETE FROM wp_posts WHERE post_author = X;
-- 偽ユーザーメタが残っていれば掃除
DELETE FROM wp_usermeta WHERE user_id = X;
-- 件数確認
SELECT COUNT(*) FROM wp_posts WHERE post_author = X;
-- 0 が返ってくれば成功
COMMIT;各DELETEごとに「○行が影響を受けました」という結果が表示されます。
想定外に多すぎる行数が出た場合は `COMMIT` せず `ROLLBACK;` で取り消してください。
トランザクションを使うことで、何かおかしいと感じた瞬間にすべて元に戻せる安全装置になります。
ステップ4:タクソノミーのカウントを更新する
投稿削除後はカテゴリやタグの記事数カウントがズレるので、最後に補正します。
UPDATE wp_term_taxonomy tt
SET count = (
SELECT COUNT(*) FROM wp_term_relationships tr
WHERE tr.term_taxonomy_id = tt.term_taxonomy_id
);これで管理画面の各カテゴリ・タグの件数表示も正常な数値に戻ります。
Japanese SEO Spamマルウェア感染削除後に必ずやるべき再発防止対策
DBから何千件のスパム投稿を削除しても、侵入経路を塞がなければ数日で同じ被害が再発します。
駆除直後に必ず次の対策を実施してください。
対策1:wp-config.phpのソルト全更新
WordPressの公式サイト(api.wordpress.org/secret-key/1.1/salt/)でランダム生成された8つのキーを `wp-config.php` の該当箇所に上書きしてください。
これで全ユーザーのセッションが強制的に無効化され、攻撃者がCookieを盗んでいた場合もログインできなくなります。
対策2:管理者パスワードの全リセットと不審ユーザーの確認
管理者権限を持つユーザーを次のクエリで全列挙します。
SELECT u.ID, u.user_login, u.user_email, u.user_registered
FROM wp_users u
JOIN wp_usermeta m ON u.ID = m.user_id
WHERE m.meta_key = 'wp_capabilities'
AND m.meta_value LIKE '%administrator%';身に覚えのないアカウントがあれば即削除し、既存の管理者全員のパスワードをリセットしてください。攻撃者が管理者として常駐している可能性は決して低くありません。
対策3:WordPress本体・プラグイン・テーマの全更新
侵入経路の多くは古いバージョンのプラグインに含まれる脆弱性です。すべてのプラグインを最新版に更新し、
長期間更新されていないプラグインや使っていないプラグインは無効化したうえで削除してください。
対策4:アクセスログから侵入経路を特定する
確認手順3で見つけた攻撃日時の前後10分のアクセスログを取得し、
POSTリクエストを抽出します。攻撃元IPと最初に叩かれたエンドポイントが特定できれば、どのプラグインの脆弱性が突かれたか、あるいは管理画面ブルートフォースが成功したのかを判別できます。
対策5:Google Search Consoleでインデックス済みスパムを削除依頼
感染期間中にGoogleにインデックスされたスパム記事は、DBから削除してもしばらく検索結果に残ります。
Search Consoleの「URL削除ツール」から不審なURLを削除リクエストし、
「セキュリティと手動による対策」に警告が出ていれば再審査リクエストも送信してください。

Japanese SEO Spamマルウェア感染のよくある質問
Japanese SEO Spam見えないスパムは「DBの直接調査」で必ず暴けるまとめ
Japanese SEO Spam系の感染は、WordPress管理画面という「窓」を意図的にすり抜けて潜伏します。だからこそ、感染確認は管理画面に頼らず、データベースを直接見にいくしかありません。
本記事の手順を順に追えば、何千件規模のスパム投稿も安全に駆除できます。ただしSQL操作・SSH操作に不慣れな状態でいきなり実行すると、サイト全体を破壊するリスクが伴います。少しでも不安があれば、無理に自力対応せず専門の復旧サービスに相談する方が結果的に早く安く済みます。

ホームページの乗っ取りが自分で解決できない時は

ホームページの乗っ取り・マルウェア感染・不正アクセスでお困りなら、
クイックレスキューが解決します。
- ホームページが乗っ取られた・改ざんされた
- 管理画面にログインできなくなった
- 変なサイトにリダイレクトされている
- Googleに危険なサイトと表示されている
- 自分で復旧しようとしたが直らない
- WordPressを復旧・修正したい
- 万一復旧できない場合やマルウェア駆除できない場合は全額返金保証で安心
- 90日間再感染保証・動作保証で安心
- 初期費用・調査費用0円で安心
