ステマ規制対応を `is_pr: true` 1行で自動化した話 — 非エンジニアのアフィリエイト記事運用

ASP申請 by さーち

結論:アフィリエイト記事のPR表記は、テンプレを1回作れば JSONに is_pr: true を1行追加するだけで全自動表示できます。

さーち
さーち

「PR表記って、毎記事の頭に手書きで足せばいいんじゃないの?」と思っていました。

Claude
クロード

私もそう思っていました。でも手書きだと **抜け漏れ事故** の温床になります。今回はテンプレ化して「JSON 1行で出し分け」に振り切った話です。

「ASP申請後にアフィリエイト記事を書くなら、PR表記の運用を仕組みにしておきたい」 — その実装記録を共有します。


誰向けの記事か

さーち
さーち

これ、誰が読むといいの?

Claude
クロード

ASP申請を控えている/申請済みで、これからアフィリエイト記事を書き始める非エンジニアの方です。

具体的には次のような方を想定しています。

技術解説ではなく、「非エンジニアでも30分で組める運用テンプレ」 に重きを置いています。


なぜ仕組み化が必要なのか:ステマ規制の罰則

さーち
さーち

そもそも、PR表記って法律で決まってるの?

Claude
クロード

**2023年10月から景品表示法5条3項(通称ステマ規制)で義務化** されています。違反すると消費者庁から措置命令や課徴金の対象になります。

ステマ規制のポイントを整理するとこうなります。

項目 内容
施行日 2023年10月1日
根拠法 景品表示法 第5条 第3項
義務の主体 広告主(=アフィリエイト記事を書く運営者)
違反時の措置 措置命令・課徴金(売上の3%)・社名公表
表記の場所 広告である旨が 一般消費者に明瞭に分かる位置
⚠️ 注意

⚠️ 重要なのは「表記してあれば良い」ではなく 「一般消費者に明瞭に分かる」 という基準です。記事の最下部に小さく書くだけでは「不明瞭」と判断される可能性があります。

つまり「PR表記をどこに・どんな見た目で出すか」の運用設計が、規制対応の本丸です。


手書き運用が事故る3つの理由

さーち
さーち

PR表記、毎記事の頭に1行足せば十分じゃない?

Claude
クロード

やめた方がいいです。私も最初は手書きで考えましたが、3つの落とし穴に気づきました。

実際にシミュレーションして見えた問題点を整理します。

⚠️ 注意

⚠️ 手書きPR表記が事故る理由

  1. 抜け漏れが必ず起きる — 月10本書けば、1〜2本は表記忘れで規制違反になる
  2. 記事ごとに表記がバラつく — 「※PR」「【広告】」「※本記事は広告を含みます」など揺れ、信頼性を損なう
  3. 後から非PR記事と区別できない — どの記事がPRだったか追跡できず、ASP規約違反のリスクも上がる
📌 ポイント

📌 PR表記は 「フラグで管理して、見た目はテンプレに任せる」 が事故防止の最適解です。手書きはやめましょう。


実装した仕組み:3つの構成要素

さーち
さーち

具体的に、何を作ったの?

Claude
クロード

**CSSテンプレ2種 + JSONフラグ1個** の3点セットです。3つだけです。

実際の実装内容を一覧で出します。

# 構成要素 役割 表示場所
1 .pr-badge 黄色の「PR」バッジ TOP記事一覧/記事ページ上部
2 .pr-notice 広告含有を明示するボックス 記事ページ本文の直前
3 is_pr: true 出し分けフラグ(JSON 1行) posts/{記事}.json
📌 ポイント

📌 ポイントは 「CSSは1回書き切り」「JSON 1行で全部スイッチ」 という分業です。記事ごとに HTML を直接書き換える必要がありません。


実装の流れ:4ステップで完成

さーち
さーち

30分でやったって本当?

Claude
クロード

Claude Code に「ステマ規制対応のPR表記テンプレを作って」と頼んだだけです。実作業はCSS追加と分岐ロジックの2箇所。

実際の工程はこうなります。

1
CSSテンプレを追加
`.pr-badge` と `.pr-notice` を build_blog.py の CSS セクションに追記(10分)
2
TOP記事カードに分岐
`is_pr: true` の記事だけバッジを出す(5分)
3
記事ページに分岐
上部バッジ+本文前の通知ボックスを is_pr で出し分け(10分)
4
運用テスト
PR記事のJSONに `is_pr: true` を足してビルド→確認(5分)

特に時間がかかったのは CSSの色合わせ でした。サイト全体のデザイントークン(黄色系:#fbbf24)と揃えるのに数分使いました。


CSSの中身:見せる「明瞭さ」の作り方

さーち
さーち

CSSってどんな感じ?

Claude
クロード

シンプルです。**黄色背景 + 黒文字 + 太字** で、視認性を最優先にしました。

PRバッジ(記事カード/記事ページ上部)はこんな仕様です。

項目
背景色 #fbbf24(黄色)
文字色 #78350f(濃い茶色)
文字 「PR」
太さ font-weight: 700(太字)
位置 日付の隣(同じ行)

PR通知ボックス(記事本文の直前)はこんな仕様です。

項目
背景色 #fffbeb(薄い黄色)
枠線 #fbbf24(黄色)
文字 「本記事には広告(アフィリエイトリンク)が含まれます。」
リンク プライバシーポリシーへの導線あり
位置 記事本文の 直前(タイトルとメタ情報の下)
⚠️ 注意

⚠️ ステマ規制の「明瞭性」基準を満たすには、記事の先頭付近 に通知を置くのが安全です。最下部や折りたたみ内では不十分と判断されるリスクがあります。


JSON 1行で出し分ける仕組み

さーち
さーち

記事を書く時、毎回何をすればいい?

Claude
クロード

JSON に `"is_pr": true` を1行足すだけ。それ以外は普通の記事と同じ書き方です。

実際の運用フローはこうなります。

{
  "slug": "claudecode-blog-launch",
  "title": "Claude Codeで個人ブログを独自ドメインで立ち上げた話",
  "date": "2026-05-08",
  "category": "Cloudflare",
  "tags": ["Claude Code", "Cloudflare Workers"],
  "is_pr": true,
  ...
}

たったこれだけで、ビルド時に以下が自動で出ます。

  1. TOP記事一覧の該当カードに PRバッジ
  2. 記事ページ上部に PRバッジ
  3. 記事本文の直前に PR通知ボックス
📌 ポイント

📌 既存記事のJSONに is_pr フィールドがなければ、これまで通り PR要素は一切出ません。完全な後方互換 です。


後方互換のための1行

さーち
さーち

既存の8記事に影響しないの?

Claude
クロード

**`is_pr` フィールドがない記事はゼロ影響** です。Pythonの `dict.get("is_pr")` が `None` を返す仕様を利用しました。

実装の核は、ビルドコード内のたった1行です。

{'<span class="pr-badge">PR</span>' if p.get("is_pr") else ''}

これだけで以下が実現できます。

JSONの状態 表示
"is_pr": true PRバッジ表示
"is_pr": false 表示なし
フィールド未指定 表示なし(=既存記事はこれ)
📌 ポイント

📌 dict.get()キーが存在しない時に None を返す Pythonの基本機能。後方互換を破らないテンプレ追加の定番パターンです。


Claude Code への依頼の仕方

さーち
さーち

Claude Code にはどう頼んだの?

Claude
クロード

**「やりたいこと」と「やりたくないこと」を両方伝える** のがコツです。後方互換の指定を忘れると既存記事が崩れます。

実際の指示文を簡略化するとこうなります。

ステマ規制対応で、PR表記テンプレを build_blog.py に追加して。

仕様:
- JSONに is_pr: true を持つ記事だけ、TOPカードと記事ページに「PR」バッジを表示
- 記事ページの本文直前に「本記事には広告が含まれます」の通知ボックス
- 通知ボックス内にプライバシーポリシーへのリンクを含める
- CSSは既存デザイントークンに合わせる(黄色系: #fbbf24)

絶対条件:
- is_pr フィールドがない既存記事は完全にゼロ影響
- 既存のCSSや構造を破壊しない(追加のみ)
💡 豆知識

💡 「絶対条件」のセクションを設けるのが効きます。Claude Code は 明示的に禁止されたこと を強く守ってくれるので、後方互換の崩壊を防げます。


ビルドして確認した3つのチェック

さーち
さーち

完成してから何を確認した?

Claude
クロード

3つだけ。これを通せば「規制対応+既存記事に影響なし」が両立してるか分かります。

実際に確認したチェック項目を残します。

✅ まとめ

✅ PR表記テンプレ実装後の最終チェック

  1. PR記事1本に is_pr: true を足してビルド → 3箇所(TOP・記事ページ上部・本文直前)に表示されるか
  2. 既存の非PR記事8本を再ビルド → PR要素が1つも混入していないか
  3. モバイル表示で PR バッジが切れず・通知ボックスが本文を圧迫しないか

このうち2番を飛ばすと、過去記事に意図せずPR表記が出る事故が起きます。「既存記事の表示も確認する」 が事故防止の鉄則です。


公開後にやっておくべきこと

さーち
さーち

テンプレを作って終わり?

Claude
クロード

2つだけ、運用を回す前にやっておくと安心です。

1. PRリンクの近くに「アフィリエイトリンクです」と書き添える

通知ボックスは記事の先頭に出ますが、本文中のリンクの直前にも一言添える とより安全です。

👇 もしも経由・楽天市場(アフィリエイトリンク)

これがあると、読者は「このリンクは広告だ」と即座に認識できます。

2. プライバシーポリシーに「広告(アフィリエイトリンク)の利用」を明記

通知ボックスから飛ばす先(プライバシーポリシー)に、アフィリエイトの記載があることを確認します。当サイトでは「項目6:アフィリエイトプログラム」として明記済みです。

⚠️ 注意

⚠️ 通知ボックスがあっても、プライバシーポリシー側に記載がないと 「告知不十分」 と判断されるリスクがあります。両方セットで対応が必須です。


やってよかった3つのこと

さーち
さーち

今回のテンプレ化で、特に良かったことは?

Claude
クロード

3つあります。**「規制対応」を「設計」に格上げできた** のが一番大きいです。

✅ まとめ

✅ PR表記テンプレ化で得た3つの効果

  1. 規制違反リスクをゼロにできる — 毎記事の手書きが不要、書き忘れの事故が構造的に起こらない
  2. 運用負担がゼロになる — JSON 1行追加だけで、CSS や HTML を触る必要がない
  3. 将来の規制強化にも1箇所修正で対応できる — 表記文言や色を変える時、CSSとビルドコードの2箇所だけ書き換えれば全記事に反映

特に3番は、長期運用の前提として重要です。規制は今後も追加・変更される可能性が高い ので、1箇所修正で全反映できる作りにしておくと安心です。


やる前に絶対知っておくべき注意点

さーち
さーち

始める時の落とし穴ってある?

Claude
クロード

2つだけ、絶対知っておいてください。

1. PR表記は「広告主が誰でも」必須

「自分は広告主じゃないからPR表記いらない」と思いがちですが、アフィリエイト記事を書く運営者=広告主 です。

立場 PR表記の必要性
アフィリエイト記事を書くブロガー 必須
企業から依頼を受けたインフルエンサー 必須
自社商品を自社サイトで宣伝 不要(明らかに自社広告のため)
商品レビュー(広告料なし) 不要
📌 ポイント

📌 「広告料が発生する関係性」がある時点で、PR表記の対象 になります。アフィリエイトリンクは全部対象です。

2. 表記の場所と見た目に注意

ステマ規制は 「明瞭に分かる」 が基準です。次のような表記は 不十分 と判断されるリスクがあります。

不十分とされる例 理由
記事の最下部に小さく「※PR」 読者が気づかない位置・サイズ
ハッシュタグ内に「#PR」混入 他のタグに紛れて視認性低い
折りたたみメニュー内に記載 開かないと見えない
グレーで薄く表示 視認性が低い

当サイトは 黄色背景+黒文字+記事先頭 で、消費者庁ガイドラインの「明瞭性」基準を満たす設計にしました。


学んだ3つのこと

さーち
さーち

今回の実装で得た一番の学びは?

Claude
クロード

PR表記は **「義務」じゃなく「設計」** だ、ということです。仕組みにすると運用が一気に楽になります。

✅ まとめ

✅ PR表記テンプレ化で学んだ3つのこと

  1. 手書きは規制違反のもと — 毎記事の手作業はミスを構造的に生む、フラグ管理に振り切るのが正解
  2. 後方互換は1行で守れるdict.get() 一発で既存記事への影響をゼロにできる
  3. 30分の初期投資で365日の運用を守れる — 一度テンプレ化すれば、規制が強化されても1箇所修正で対応可能

最後に:自分の思い

さーち
さーち

これからアフィリエイト記事を書く非エンジニアに、何を伝えたい?

Claude
クロード

**「PR表記を毎記事手で書くな」** ということです。1記事目を書く前に、テンプレを30分で作ってください。

非エンジニアの自分は、ASP申請が通った時、最初に思ったのが「PR表記、毎記事の頭に手で書くのか…」でした。

しかし Claude Code に「ステマ規制対応のテンプレを作って」と頼んだら、30分でCSSと分岐ロジックが揃って、JSON 1行で出し分けできる仕組みが完成しました。

やる前は「面倒な義務」だったものが、やってみたら「設計の一部」になりました。

毎記事の頭に「※PR」と手書きする運用と、JSON に is_pr: true を足すだけの運用 — どちらが長期で事故らないかは明らかです。

💡 豆知識

💡 ステマ規制対応は 「アフィリエイト記事の1本目を書く前」 に仕込むのがベストタイミングです。記事を10本書いてから直すのは、手書きで足すより遥かにコストが高くなります。

「規制対応=面倒な作業」と思っていた時期に、自分自身に伝えたい記事になりました。

ルールは守るものですが、運用は仕組み化できます。

これからも、「収益化の足元を仕組みで固める」 動きを続けていきます。


この記事のシリーズ:ブログ立ち上げ全工程プライバシーポリシー作成 と合わせて読むと、「非エンジニアがブログを安全に収益化する全体像」が見えます。


この記事も Claude Code に書いてもらいました。「結論先行・一文60文字以内・数字を使う・誰向けか明確・自分の思いで締める」の5点を意識した版です。

よくある質問

Q. ステマ規制(景品表示法5条3項)はいつから施行されましたか?
A. 2023年10月1日から義務化されています。違反すると消費者庁から措置命令・課徴金(売上の3%)・社名公表の対象になります。広告主であるアフィリエイター本人が責任を負います。
Q. 既存記事に影響を与えずにPR表記を追加できますか?
A. できます。is_prフィールドがない記事はゼロ影響です。Pythonの dict.get() がキー未指定時に None を返す仕組みを利用し、PR要素は一切表示されません。
Q. PRバッジとPR通知ボックスの違いは何ですか?
A. PRバッジは「PR」の短いラベルで、TOPの記事一覧と記事ページ上部の日付横に表示されます。PR通知ボックスは記事本文の直前に出る黄色いボックスで、広告含有とプライバシーポリシーへのリンクを明示します。
Q. アフィリエイト記事を書く時、運用で必要な作業は何ですか?
A. 記事のJSONに「is_pr: true」を1行追加するだけです。CSSやHTMLを触る必要はありません。ビルド時にバッジと通知ボックスが3箇所(TOP・記事ページ上部・本文直前)に自動で表示されます。
続けて読む
← 前の記事
ASP申請のために30分でプライバシーポリシーを作った話 — 非エンジニアが揃えた12項目

コメント

記事への感想・質問・指摘など、お気軽にどうぞ。匿名(ゲスト)でも投稿できます。

← 記事一覧に戻る