Written by
tsuka-ryu
At
Sun Feb 01 2026
RSSフィードについて
RSSフィードを改善したのでメモ
RSSフィードの実装を改善したのでメモります。
発端
自分は普段inoreaderを使って情報収集をしています。そのため、このブログを作ったときも自然とRSSフィードの機能をつけてニヤニヤしていました。
ただ、いくつかの記事を見るうちに、見出しがうまく表示されていないことに気がつきました。原因の詳細は不明なのですが、おそらくHTMLの構造が複雑なので、inoreaderのパーサーが複雑なHTML構造を適切に処理できていないことがわかりました。
以下のようにヘッダータグ内にsvgが含まれる複雑な構造になっています。
<h2 class="flex scroll-m-28 flex-row items-center gap-2" id="tldr">
<a data-card="" href="#tldr" class="peer">tl;dr</a
><svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="lucide lucide-link size-3.5 shrink-0 text-fd-muted-foreground opacity-0 transition-opacity peer-hover:opacity-100"
aria-hidden="true"
>
<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path>
<path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
</svg>
</h2>修正その①
Claudeと相談した結果、RSS用にクエリパラメータを付与すると良いということなので、その通りに修正しました。実際の修正PR。
// 主要な部分を抜粋
const searchParams = await props.searchParams;
const isRSSView = searchParams?.view === "rss";
const components = isRSSView
? {
h1: "h1",
h2: "h2",
h3: "h3",
h4: "h4",
h5: "h5",
h6: "h6",
}
: undefined;
// クエリパラメータがある場合は、`getMDXComponents`のヘッダータグを上書き
<Mdx components={getMDXComponents(components)} />;修正その②
その後にふとした拍子に/blog/[slug]がSSGされていないことに気がつきました。searchParamsを使ってるから当然なのですが、前の修正時には気づかなかったですね。
Route (app)
┌ ○ /
├ ○ /_not-found
├ ○ /about
├ ƒ /api/search
├ ○ /blog
├ ƒ /blog/[slug]
├ ○ /blog/rss.xml
├ ● /docs/[[...slug]]
│ ├ /docs
│ └ /docs/test
├ ○ /icon.png
└ ● /og/blog/[...slug]
├ /og/blog/2025-12-30-my-blog/image.webp
├ /og/blog/2025-12-31-recap/image.webp
├ /og/blog/2026-01-11-og-image/image.webp
└ [+2 more paths]
○ (Static) prerendered as static content
● (SSG) prerendered as static HTML (uses generateStaticParams)
ƒ (Dynamic) server-rendered on demandなので、クエリパラメータをやめて、/blog/[slug]/rssというパスパラメータにすることにしました。
ビルド時にちゃんとSSGされるようになったので問題ないと思います。
Route (app)
┌ ○ /
├ ○ /_not-found
├ ○ /about
├ ƒ /api/search
├ ○ /blog
├ ● /blog/[slug]
│ ├ /blog/2025-12-30-my-blog
│ ├ /blog/2025-12-31-recap
│ ├ /blog/2026-01-11-og-image
│ └ [+2 more paths]
├ ● /blog/[slug]/rss
│ ├ /blog/2025-12-30-my-blog/rss
│ ├ /blog/2025-12-31-recap/rss
│ ├ /blog/2026-01-11-og-image/rss
│ └ [+2 more paths]
├ ○ /blog/rss.xml
├ ● /docs/[[...slug]]
│ ├ /docs
│ └ /docs/test
├ ○ /icon.png
└ ● /og/blog/[...slug]
├ /og/blog/2025-12-30-my-blog/image.webp
├ /og/blog/2025-12-31-recap/image.webp
├ /og/blog/2026-01-11-og-image/image.webp
└ [+2 more paths]
○ (Static) prerendered as static content
● (SSG) prerendered as static HTML (uses generateStaticParams)
ƒ (Dynamic) server-rendered on demandまとめ
RSSフィードの対応をしました。
App routerをちゃんと使ったことないので、こういう勘所がないということに気がつきました。
意図しない変更を避けるために、ビルド結果のsnapshotの差分を見たほうがいいかも?とも思いました。こういう気づきがあるので個人開発はいいですね。
最終更新: 2026年2月2日