RSSフィードの改善:RSS Validatorでの警告解消とMySQLによる属性削除

RSSフィードの改善:RSS Validatorでの警告解消とMySQLによる属性削除

以前の記事では W3C Feed Validator を使って WordPress の RSS フィードを検証しました。その際は XML としての整形式性を確認でき、基本的なチェックをクリアしました。 しかし実際には、RSS リーダーやアプリによっては余分な属性が原因で正しく表示されない問題が残っていました。そこで今回は RSS Advisory Board の公式 Validator を使って、より厳密にフィードをチェックしました。

目次

RSS Validatorでのチェック

Validator で確認したところ、以下のような Gutenberg やプラグイン由来の属性が多数残っていることが分かりました。

  • data-start, data-end
  • data-spread
  • data-col-size
  • data-pm-slice

ブラウザ表示には影響しない属性ですが、RSS フィードでは不要とされ、互換性を下げる要因になります。

MySQLでの一括削除

記事本文はwp_postsテーブルのpost_content カラムに保存されています。そこで、直接 MySQL にアクセスして不要な属性を削除しました。

-- data-start を削除
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'[[:space:]]data-start="[^"]*"',
''
)
WHERE post_content REGEXP 'data-start=';

-- data-end を削除
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'[[:space:]]data-end="[^"]*"',
''
)
WHERE post_content REGEXP 'data-end=';

-- data-spread を削除
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'[[:space:]]data-spread="[^"]*"',
''
)
WHERE post_content REGEXP 'data-spread=';

-- data-col-size を削除
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'[[:space:]]data-col-size="[^"]*"',
''
)
WHERE post_content REGEXP 'data-col-size=';

-- data-pm-slice を削除
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'[[:space:]]data-pm-slice="[^"]*"',
''
)
WHERE post_content REGEXP 'data-pm-slice=';

-- data-is-only-node を削除
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'[[:space:]]data-is-only-node="[^"]*"',
''
)
WHERE post_content REGEXP 'data-is-only-node=';

-- data-is-last-node を削除
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'[[:space:]]data-is-last-node="[^"]*"',
''
)
WHERE post_content REGEXP 'data-is-last-node=';

-- data-blogcard を削除
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'[[:space:]]data-blogcard="[^"]*"',
''
)
WHERE post_content REGEXP 'data-blogcard=';

-- data-attributes を削除
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'[[:space:]]data-attributes="[^"]*"',
''
)
WHERE post_content REGEXP 'data-attributes=';
 

ここでは [[:space:]] を使って、スペースだけでなく改行やタブが入っていても確実に削除できるようにしました。MySQL 5.x 系では REGEXP_REPLACE が使えないため、REPLACE を属性ごとに繰り返す必要があります。


確認


SQL 実行後に再度 RSS Validator でチェックしたところ、これらの属性に関する警告は消えました。フィードリーダーでも記事が正常に表示できることを確認しました。


今後の課題


まだ fetchpriority / decoding / sizes といった画像タグ由来の属性については警告が残っています。これらは WordPress が自動で付与するため、functions.php でフィード出力時のみ削除するフィルタを追加するのが安全です。 次回はこれらの属性を除去し、Validator の警告をさらに減らす方法をまとめたいと思います。

サーバ&テクノロジ

Posted by 納戸 工房