おはようございます、YASUです。
昨日、Zennに記事をpushしたのに、なぜか記事ページが404。コードもfrontmatterも間違っていないはずなのに公開されない。一晩かけて犯人を探した結果、思ってもみなかった相手にたどり着いたので、今日はその顛末をシェアします。
結論
原因は記事の中身でもコードのミスでもなく、Zenn側の「投稿数の上限(レートリミット)」というスパム対策の仕組みでした。pushもコミットも成功しているのに、記事だけがひっそりデプロイをスキップされる、というなかなか気づきにくい仕様です。
事件発生:pushは成功しているのに404
いつも通りClaude Codeで記事を書いて、コミット・push。ターミナルには成功のログが並んでいます。ところが、いざ公開ページを開いてみると
404 Not Found
「あれ?」と思って、前回書いた記事のURLも確認してみると、そちらは普通に表示される。つまり、GitHub連携の仕組み自体は生きている。おかしいのは今回の記事だけ、という状況でした。
第一の容疑者:frontmatterを疑う
まず疑ったのは、記事の先頭に書く設定情報(frontmatter)です。
title: "記事タイトル"
type: "idea"
topics: ["AWS", "AIF", "資格", "初学者"]
published: true
他の記事と見比べてみると、topicsの表記が大文字(“AWS”)になっていました。Zennのトピックタグは小文字が基本らしいので、これが原因かと思い、急いで小文字(“aws”)に修正してpush。しかし、しばらく待っても状況は変わらず。この時点で「あれ、ここじゃないのか」と少し焦りました。
真犯人発覚:ダッシュボードの片隅に潜んでいた
諦めかけたところで、Zennの管理画面(ダッシュボード → GitHub連携)の「最近のデプロイ」欄を覗いてみると、そこにオレンジ色の「1件のお知らせ」という控えめな表示が。クリックして開いてみると、こう書いてありました。
次の記事は投稿数の上限に達したためデプロイされませんでした:
aif-exam-precision-recall
詳細はよくある質問ページをご確認ください: https://zenn.dev/faq#rate-limit
犯人、まさかの「投稿しすぎ」でした。コードは一切悪くなかったという。
Zenn公式FAQで判明した仕組み
公式のFAQを確認すると、この制限についてこう説明されていました。
- コンテンツの粗製乱造を防止する観点から、一定時間あたりの投稿数に上限が設けられている
- 上限のロジックは不正防止のため非公開
- 記事は直近24時間以内の投稿数(投稿予約中を含む)で判定される
- 上限に達しても、一定時間が経過すれば再び投稿できるようになる
ポイントは「今日・昨日」というカレンダー基準ではなく、「push した瞬間から遡って24時間以内」という判定だということ。前日の記事とほぼ同じ時間帯にpushしていたので、ギリギリその枠に引っかかってしまったようです。
解決編:焦らず待つが正解
再pushしても意味がないと分かっていたので、丸一日待ってから、念のため軽微な表記修正(vsと、の表記ゆれを統一)を加えて再push。数分後、ダッシュボードを確認すると、無事「デプロイ成功」に変わり、記事も公開されていました。結局のところ、時間が解決してくれる系のトラブルでした。
まとめ
- Zennにはスパム対策の投稿数制限(レートリミット)があり、直近24時間の投稿数で判定される
- 制限にかかっても、pushやコミットは「成功」と表示されるので気づきにくい。ダッシュボードのお知らせ欄を確認するのが唯一の手がかり
- 再pushでは解決せず、時間を置くしかない
- 毎日投稿すること自体は問題ないが、前回の投稿からの間隔には少し余裕を持たせておくと安心
コードを一生懸命見直していた数時間を返してほしい気持ちもありますが、良い学びになりました。記事が急に公開されなくなって困っている方は、まずダッシュボードのお知らせ欄をチェックしてみてください。それでは、また明日!

コメント