
2026/10/04 4:09
RSS フィーダーのベストプラクティス(2022)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Web パブリッシャーは、コンテンツのスインジケーションフィードが信頼性があり普遍的に互換性を有することを保証するために、特定の技術標準に従う必要があります。主な推奨事項は、すべての参照に対して絶対的な HTTPS URL を使用して破損したリンクを防ぎ、正確なデータの解釈を確保するために適切な
Content-Type ヘッダー(application/atom+xml または application/rss+xml)を設定することです。Atom は新しいセットアップで不明確さが少ないため好まれますが、RSS 2 は既存のサイトに対しては依然として有効な形式です;ただし、パブリッシャーは URL が同じであるフィードを重複させたり、JSON Feed や Microformats h-feed のように互換性のない形式を混合させたりするのは避けるべきであり、必要に応じてのみ行うことです。データの完全性を維持するため、一意の Entry ID(好ましくはグローバル記事 URL)は決して変更したり再利用したりしてはならず、発行時刻は固定とし、更新時刻は変更を反映させる必要があります。パブリッシャーは、HTML <link> タグによる発見メタデータの実装、W3C サービスを使用したフィードの検証、適切なセキュリティヘッダーと CORS ポリシー(Access-Control-Allow-Origin: *)を備えた HTTPS でのすべてのコンテンツの提供を行うよう推奨されます。追加のベストプラクティスには、適切な Cache-Control ヘッダーの設定、フィード URL 向けのボットブロックの無効化、キャッシュ効率のための self リンクの実装、およびフィードサイズを 1 メガバイト以下に維持するためのページネーションの管理が含まれます。最後に、WebSub などの現代的なメカニズムを採用することで、更新速度を大幅に向上させ、サーバーオーバーヘッドを削減でき、タイムアウトや CORS 問題などのエラーなく、読者が一貫して完全なコンテンツにアクセスできるようにすることができます。
Checkpoints Results:
- Are all major key points reflected in the summary? No. Several specific technical constraints (ID uniqueness, time distinctions, response times, pagination specifics) are omitted.
- Does the summary include any inference not in the original text? Yes. It characterizes RSS 2 as "obsolete," whereas the source list treats it as a valid but less preferred option for new starts compared to Atom.
- Is the main message clear and easy to understand? Yes, the main message regarding feed reliability is clear.
- Is there any vague or confusing phrasing for readers? No, though some technical details are generalized due to missing elements.
本文
ブログ公開時の RSS/Atom フィード技術ガイドライン
ブログ公開におけるコンテンツの質とは無関係な、共有手法に関する技術的なベストプラクティス。重要性の高い順にまとめました。
1. フィード形式:標準化されたフォーマットを使用
一般的な「RSS」呼び出しには注意が必要です。RSS だけが最適ではなく、多様な読者や検索エンジンが理解するためには標準化された形式の採用が不可欠です。
- 推奨: RSS 2 または Atom を使用
- 非常に広くサポートされています。
- 代替案: JSON Feed や Microformats (h-feed) などはサポート範囲が狭いため避けることを推奨します。
- フィードがない場合: Atom を強く推奨
- 仕様は明確で、クライアントとの互換性問題が少ないです。
- 既存の RSS 2 があればアップグレードする必要性はありません。
アトム (Atom) テンプレート例
以下の最小限のテンプレートを使用してください。
<?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>{{FEED_NAME}}</title> <id>{{HOMEPAGE_URL}}</id> <link rel="alternate" href="{{HOMEPAGE_URL}}"/> <link rel="self" href="{{FEED_URL}}"/> <updated>{{LAST_UPDATE_TIME in RFC3339 format}}</updated> <author> <name>{{AUTHOR_NAME}}</name> </author> <entry> <title>{{ENTRY.TITLE}}</title> <link rel="alternate" type="text/html" href="{{ENTRY.HTML_URL}}"/> <id>{{ENTRY.PERMALINK}}</id> <published>{{ENTRY.FIRST_POST_TIME in RFC3339 format}}</published> <updated>{{ENTRY.LAST_UPDATE_TIME in RFC3339 format}}</updated> <content type="html">{{ENTRY.HTML}}</content> </entry> </feed>
形式変更と複数提供について
- 複数形式不要: Atom を持っている場合は、別途 RSS の用意は不要です。
- 形式切り替えは安全: URL を固定し内容を置き換えるか、リダイレクトを適用することで、読者の混乱を防げます(Content-Type 更新も忘れないでください)。
2. コンテンツタイプ (Content Type) の設定
Content-Type ヘッダーを適切に設定してください。以下の値は標準であり最も広くサポートされています。
- Atom:
application/atom+xml - RSS:
application/rss+xml - JSON Feed:
application/feed+json
3. 絶対 URL (Absolute URLs) の使用
すべての
<link> 要素や投稿コンテンツ(HTML 含む)において、相対 URL を使わず、絶対 URL (https://...) を使用してください。Atom 仕様での相対 URL 解決は実装により正しく扱われないことが多いためです。
4. ディスカバリー (Discovery) の設定
サイト内のほぼすべてのページでフィードを宣伝し、読者や検索エンジンの発見性を高めましょう。HTML 内に以下の記述を含めます。
<link rel="alternate" title="Blog Posts" type="application/atom+xml" href="/feed.atom">
複数フィードのケース
適切なタイトルで複数のフィードを宣伝可能です。
<link rel="alternate" title="All Posts" ...><link rel="alternate" title='Posts in the "Social" category' ...><link rel="alternate" title="Comments on this Post" ... href="/post/hello-world/comments.atom">
重要: 複数形式を同時に宣伝すると、購読者が混乱する可能性があります。どちらか一方(Atom または RSS)のみを推奨してください。
検証と代替案
- W3C Feed Verification Serviceでリンク設定を検証してください。
- HTML が改変できない場合は HTTP レスポンスヘッダー
を使用可能ですが、互換性が低いためLink
タグの使用を優先してください。<link>- 例:
Link: /feed.atom; rel="alternate"; type="application/atom+xml"
- 例:
5. HTTPS セキュリティの徹底
プライバシー保護と改ざん防止のため、フィード自体の提供も HTTPS に設定してください。
- リソース: 画像などの埋め込みメディアもすべて HTTPS で参照します。
- シルフリンク (Self-link): 自身への参照も HTTPS です。
- リダイレクト: HTTP から HTTPS へ自動的に誘導する設定を実装します。
- セキュリティヘッダー:
の使用を検討します。Strict-Transport-Security
6. 完全なコンテンツ (Full Content) の提供
多くの読者はフィードリーダーで完結したコンテンツを表示することを望みます。
- RSS/Atom
要素: 記事の完全な本文を含めるのが一般的です。<content> - サマリー (
): Atom 特有ですが、長い記事を短縮表示する際に使用できます。<summary> - 有料コンテンツの場合: 認証トークンを介してアクセス制限を行う場合があります(例:
)。基本認証も利用可能ですが、URL パス/クエリパラメータへの埋め込みが最もサポートされています。/feed.atom?user=token
7. エントリー ID (Entry IDs) の管理
各項目を一意に識別するためには、グローバルに一意な IDを使用してください。ID の重複や変更は読者を混乱させます。
- 推奨: 記事のパーマリンク(永続的 URL)を ID に使用します。
- 禁止事項:
- 既存の記事の ID を変更してはいけません。
- 異なる記事に対し、同じ ID を再利用してはいけません。
- システム変更時に旧データの ID を維持してください。
ID の管理が難しい場合は UUID (
urn:uuid:...) 形式を採用できます。複数フィードを統合表示する読者のために、ドメイン内の URLを使用するのが最も安定しています。
8. 日付 (Dates) の設定ルール
published(公開時間)と updated(更新時間)は明確に区別してください。
- 公開時間の厳守:
- 一度設定したら変更できません(記事は一度しか公開できないため)。
- 実際の表示タイミングに近い時刻を設定し、過去時間を避けてください。
- 未来の公開時間は禁止:バグとみなされ無視されます。
- 更新時間の扱い:
- 新規エントリーでは
と同じ値にします。published - 大幅なアップデート時のみ変更してください(誤字修正でもなく、表示順が古い項目より新しい公開時間を持つべきです)。
- 新規エントリーでは
9. フィードタイトル (Feed Title) の工夫
リーダーでのデフォルト表示となるため、適切な名前にしましょう。
- 文脈を含める:
のような抽象的な名前ではなく、Blog Posts
といった具体性を重視します。Kevin Cox's Blog - 簡潔さを保つ: 宣伝用の過剰な記述(毎週更新日やタグ列挙など)を避け、シンプルにします。
- HTML タグの排除:
,<b>
などの HTML ステイルは解釈されないため、文字コードのみを使用してください。<i>
10. スタイリング (Styling) と互換性
CSS は使用可能ですが、リーダーの多様性を考慮する必要があります。
- フォールバックの考慮:
のように、一部削除された場合に読めなくなるリスクを回避します。background: black; color: white - インラインスタイルの利用:
ブロックよりも互換性が高いです。<style> - 意味のある要素優先:
,<p>
,<h1>
などをそのまま使用し、<code>
で模倣せず、JavaScript は使用不可。<div> - 多メディア対応:
,<audio>
,<video>
はフォールバックを用意します。<iframe> - フォーム入力 (
) の使用は避けてください(サポート稀)。<input>
11. セルフリンク (Self Link) の設定
フィード自体への正しい
rel="self" リンクを含めることで以下のメリットがあります。
- 恒久的なリダイレクト対応: リダイレクト先を自動更新できます。
- キャッシュヒット率向上: URL のバリエーション(
,http/https
vs/feed
など)を統合し、パフォーマンスを改善します。/feed/ - WebSub 必須: リアルタイム更新標準規格の必要条件です。
- ローカルファイルからの購読: ファイル直接読み込み機能との親和性が高まります。
<link rel="self" href="https://kevincox.ca/feed.atom"/>
12. キャッシュ制御 (Caching)
サーバー負荷を減らし、更新タイミングを制御するために
Cache-Control を設定してください。
- 例: 毎月更新なら
(1 時間)、毎日更新ならmax-age=3600
(5 分) が目安です。max-age=300 - 動的調整: 次回の投稿予定に合わせてキャッシュ時間を短くすることも可能です。
13. 条件付きリクエスト (Conditional Requests) の実装
サーバー負荷軽減のため、ETag または
Last-Modified ヘッダーを返すよう設定し、内容が変わっていない場合は 304 Not Modified を返すようにしてください。これによりポーリング効率が大幅に向上します。
14. WebSub (Publish Subscribe) の採用
リアルタイム通知を実現する標準規格です。信頼できるハブ(または自作)を選択し、投稿時に ping を送信することでサーバー負荷を下げられます。
15. ボットへのアクセス制御
ボットブロック設定は、フィードに対しては無効化してください。ボットによるコンテンツ消費を防ぐことは読者の更新通知を阻害するためです。
16. カテゴリ (Categories) の活用
購読者をフィルタリングする有効な手段です。Atom は
<category term="...">、RSS2 は <category>...</category> で定義します。
- 推奨: すべてのカテゴリを表示し、嫌悪感で離れることを防ぐのが賢明です。
- 代替案: カテゴリ別フィード生成や URL パラメータによるフィルタリングも考慮可能です。
17. URL の変更手順
URL 変更時は以下のフローに従ってください。
- 新旧両方の URL でフィードを提供し、古い方を新しい方へ308 (Permanent Redirect) で誘導します。
- WebSub を使用している場合、新旧両方の URL でハブに ping を送信し続けます(少なくとも 3 ヶ月間)。
- シルフリンクを新 URL に更新します。
18. CORS (Cross-Origin Resource Sharing) の設定
ブラウザベースのリーダーが外部ドメインから読み取る際、以下のヘッダーが必要です。
Access-Control-Allow-Origin: *
これによりクッキーは送信されず、パブリックリソースとして安全にアクセス可能です。
19. パフォーマンスと最適化
- レスポンス時間: WebSub をサポートしていない場合、応答時間は1 秒未満を目指してください(3 秒以上は避ける)。
- ページネーション: アーカイブサイズを適切に管理し、メガバイト級の巨大化を防ぎます。最新のアイテムを最初のページに表示し、一日以上のコンテンツを含めることを推奨します。
上記のガイドラインは、あなたのブログが世界中の読者によって正しく、安全に利用されるために不可欠な技術的基盤です。