2026年5月20日

2026年5月20日

WordPressのRSSフィードに文字化けが出る場合の解決方法

はじめに

RSSリーダーでWordPressのフィードを登録したら文字化けする、フィードURLを開くと「XMLのパースエラー」が出る、記事タイトルや本文が豆腐文字(□□□)になる。RSSフィードの文字化けはWordPressのXML出力前に余分な文字が混入することで起こります。

症状・原因

This page contains the following errors:
error on line 1 at column 1: Document is empty

RSSフィードが壊れる主な原因:

  • BOM(Byte Order Mark)の混入:PHPファイルがUTF-8 with BOMで保存されている
  • functions.phpの余分な出力:ファイル末尾の空白・改行がXMLの前に出力される
  • プラグインの不正出力echoprintでヘッダー前に文字を出力しているプラグイン
  • テーマのheader.php:閉じタグ?>の後ろに空行がある

解決手順

ステップ1:フィードのURLを直接確認する

# curlでフィードの先頭バイトを確認
curl -s https://yoursite.com/feed/ | xxd | head -5

# 正常な場合:最初に <?xml が来る
# 文字化けの場合:EF BB BF(UTF-8 BOM)や空白が先頭に来る

ブラウザでhttps://yoursite.com/feed/を開き、XMLパースエラーが出たらどのファイルが原因か特定します。

ステップ2:BOMを除去する

PHPファイルのBOMを確認・除去します。

# BOMがあるファイルを検索
grep -rl $'\xef\xbb\xbf' /path/to/wordpress/

# sedでBOMを除去(Linuxサーバー上)
sed -i '1s/^\xEF\xBB\xBF//' wp-content/themes/your-theme/functions.php

エディタで修正する場合:

  • VS Code:右下の「UTF-8 with BOM」→「UTF-8」に変更して保存
  • Notepad++:エンコード → 「BOMなしUTF-8」で保存

ステップ3:functions.phpの末尾を確認する

// 悪い例:閉じタグの後ろに空行がある
function my_function() {
    // ...
}
?>
← ここに空行があるとXMLに混入する

// 良い例:PHPファイルは閉じタグ自体を省略する
function my_function() {
    // ...
}
// ファイルの末尾 — ?> は書かない

ステップ4:出力バッファリングでフィードをクリーンにする

// functions.php — フィード出力前に余分な出力をクリア
add_action('do_feed', function() {
    ob_clean();
}, 1);

add_action('do_feed_rss2', function() {
    ob_clean();
}, 1);

ステップ5:フィード出力のエンコーディングを明示する

// functions.php — フィードのcharsetを明示
add_filter('feed_content_type', function($content_type, $type) {
    return 'application/rss+xml; charset=UTF-8';
}, 10, 2);

ステップ6:プラグインの切り分け

# WP-CLIで全プラグインを無効化してフィードを確認
wp plugin deactivate --all
curl -s https://yoursite.com/feed/ | head -3

# プラグインを一つずつ有効化して原因を特定
wp plugin activate plugin-name

ステップ7:Yoast SEOのOG/RSSタグが重複している場合

// Yoast SEOとほかのSEOプラグインが競合してフィードが壊れる場合
// 片方を無効化するか、フィルターで制御する
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'feed_links_extra', 3);

注意事項

  • BOM除去前には必ずファイルのバックアップを取ってください。
  • ob_clean()はフィードアクション専用で使用し、通常のページには適用しないでください。
  • フィードキャッシュが残っている場合はキャッシュプラグインでクリアが必要です。

まとめ

RSSフィードの文字化けはBOMの除去とfunctions.phpの閉じタグ削除で解決するケースがほとんどです。ob_clean()での出力クリアも効果的な対処法です。関連記事:WordPressのXMLエラー対処文字化け全般の解決方法

お気軽にご相談ください

お見積りへ お問い合わせへ