- 2026.09.25
- 保守・セキュリティ
- 飯島 啓仁
「Yoastの設定ミスかと思ったら違った」— 表示に出ないデータ改ざんが、SNSシェア時だけ表面化した話
発端は「SNSでシェアすると変な文章が出る」という相談
あるお客様から、こんな連絡をいただきました。
サイトのURLをSNSでシェアすると、概要欄に英語のスパムっぽい文章が出てくる。Yoast SEOの設定がおかしいのでは?
実際に該当ページのソースを確認すると、こんなメタタグが出力されていました。
<meta property="og:description" content="An essay writing service allows you to remove lots of the issues paper writing service that go along with writ […]" />英文エッセイ代行サービスへのリンクを含む、明らかなスパムテキストです。サイト自体は日本語のコーポレートサイトで、こうした文章を意図的に設定した覚えはもちろんありません。
Yoast SEOの設定画面を見ても、該当ページの「メタディスクリプション」欄は空でした。設定ミスではなさそうです。では、この文章はどこから出てきているのか。ここから調査が始まりました。
表示は正常なのに、データベースの中身が汚染されていた
まず疑ったのは、ページ本文(post_content)でした。WP-CLIで直接中身を取得してみると——
wp post get <該当ページID> --field=post_content出てきたのは、まさにog:descriptionに表示されていたのと同じ英文スパムテキストでした。しかも、リンク先は海外の「エッセイ代行サービス」サイトです。
このページの見た目は完全に正常だったので、実際のサイト表示には一切乱れがなく、普通にWEBを閲覧しているだけでは気が付きませんでいsた。。
理由はすぐに分かりました。このサイトはページの表示内容をカスタムフィールド(ACF)で組み立てる設計になっており、WordPress標準の本文欄(post_content)は表示に一切使われていなかったのです。そこに、何者かがスパムリンクを埋め込んでいた。表示に影響しないため、誰も気づかないまま長期間放置されていた、というわけです。
いつ・どうやって埋め込まれたのか
WordPressには編集履歴(リビジョン)を自動保存する機能があります。これを遡ることで、ある程度の時期を絞り込むことができました。
wp post list --post_type=revision --post_parent=<該当ページID> --fields=ID,post_date,post_author結果、数年前の時点で保存されていた最も古い履歴では本文が空、その後に残っていた履歴では既にスパムテキストが入っていました。つまり、その間のどこかで改ざんが行われたことは分かりましたが、リビジョンは古いものから自動的に削除されていく仕様のため、それ以上の絞り込みはできませんでした。
投稿者としては、サイト運営用の正規アカウントが記録されていました。ただしこれは「誰が書いたか」の証明にはなりません。WordPressは更新時点でログインしていたアカウントを機械的に記録するだけなので、次のいずれの可能性も否定できないのです。
- 正規アカウントのパスワードが漏洩し、第三者が不正ログインして書き換えた
- 何らかの脆弱性を突かれ、正規のログイン操作を経ずにデータが直接書き換えられた
当時のサーバーアクセスログは保存期間をとうに過ぎており、どちらだったかを裏付ける記録はもう残っていません。
なぜ「今になって」表面化したのか
これも気になるところです。改ざん自体は数年前に発生していたはずなのに、なぜ今回初めて発覚したのか。
有力な仮説は、SEOプラグイン側の仕様変化です。
Yoast SEOやJetpackといったSEO/SNS連携系プラグインは、ページごとに明示的な説明文が設定されていない場合、本文やその抜粋(post_excerpt)から自動的に概要文を生成してog:descriptionに出力する仕組みを持っています。
普段はこの自動生成機能が働かない、あるいは別の値が優先される状態だったものが、プラグインのアップデートやサーバー移行といった環境変化をきっかけに、スパムテキストを拾ってしまうようになった——というのが最も筋の通る推測です。
ただし、これも確定的な証拠があるわけではありません。表示に影響しない領域の変化は、通常のログには残らないため、「いつ・何がきっかけで」までは特定しきれませんでした。
対応と教訓
対応そのものはシンプルです。
- 正しい説明文を、実際にog:description生成に使われているフィールド(このケースでは
post_excerpt)に設定する - SEOプラグイン側のキャッシュ(indexable)を再構築し、反映を確認する
- サイト全体を横断検索し、同様の汚染が他のページに広がっていないか確認する
- 該当アカウントのパスワードをリセットする
技術的な対応より、今回持ち帰るべき教訓はむしろ運用面にあると感じています。
「表示が崩れていないか」だけを見るチェックでは、この種の問題は絶対に見つかりません。 メタタグやSNSシェア時の見え方は、ソースコードやSNSプレビューを明示的に確認しない限り、誰の目にも触れないまま放置され続けます。
WordPressサイトの定期チェックには、画面表示の確認だけでなく、
<meta name="description">やog:descriptionの中身- ページ本文欄など、表示に使われていないデータ領域の内容
も含めることをおすすめします。「見た目に問題がない」ことと、「データが健全である」ことは、必ずしもイコールではありません。
本記事は、実際に弊社が対応したWordPressサイトの技術サポート事例をもとに、サイト固有の情報を含まない形で再構成したものです。
Web・AI・セキュリティのお悩みは
GIV株式会社へご相談ください
「サイトをリニューアルしたい」「業務を自動化したい」
そんな課題を、技術とデザインの力で解決します。
まずはお気軽にお問い合わせください。