アフィリエイト基盤の全面改修 — PA-API 非依存の3ボタンカードと FANZA サイドバー実験

  • #Affiliate
  • #Amazon
  • #Rakuten
  • #DMM
  • #FANZA
  • #Cocoon
  • #WordPress
  • #REST API
  • #Automation
アフィリエイト基盤の全面改修 — PA-API 非依存の3ボタンカードと FANZA サイドバー実験

Amazon に締め出された日

2026年4月10日、とあるまとめ媒体のアフィリエイトブロックを手書き HTML から Cocoon 純正の [amazon asin="X"] ショートコードへ移行しようとした。書籍1冊あたり15行が1行になる。見た目はきれいだった。

そこで AssociateNotEligible に当たった。

Your account does not currently meet the eligibility requirements
to access the Product Advertising API.

Amazon の PA-API は、アクセス維持に 180日以内の成約3件以上 を要求する。75クリックでは成約が足りなかった。ショートコードは管理者にだけ見えるエラーカードとして描画され、読者向けの商品表示は素のテキストリンクに退化した。

復旧を待つ選択肢はゼロ。 Amazon の機嫌に依存しない仕組みを作るしかない。

3ボタンカードのアーキテクチャ

API 依存ゼロで動く手書き HTML カードを設計した。

┌─────────────────────────────────────┐
│ [書影画像]          タイトル         │
│                     著者            │
│  [Amazon] [楽天] [DMM]              │
└─────────────────────────────────────┘

画像ソース(API 不要)

ストア画像ソース認証
Amazonm.media-amazon.com/images/P/{ASIN}.jpg不要
楽天thumbnail.image.rakuten.co.jp/...?_ex=400x400App ID(検索時のみ)
DMMpics.dmm.com/mono/hobby/{cid}/{cid}pl.jpg不要

Amazon の画像 CDN(m.media-amazon.com/images/P/{ASIN}.jpg)は、有効な ASIN なら認証なしで書影を返す。これが PA-API フリー構成の土台になる。

アフィリエイトリンクの形式

ストアURL パターントラッキング
Amazonamazon.co.jp/dp/{ASIN}/?tag=netouyo01-22✅ アソシエイトタグ
楽天hb.afl.rakuten.co.jp/hgc/{AFF_ID}/?pc={target}✅ アフィリエイト ID
DMMal.dmm.com/?lurl={target}&af_id=netouyo-990✅ アフィリエイト ID

楽天ブックス API による書籍キュレーション

手入力の ASIN は信用しない。実際、6記事中2記事で ASIN が間違っていた(4101104409 は「石油の世紀」ではなく「不毛地帯」だった)。以後は楽天の BooksTotal Search API で選書する。

url = f'https://app.rakuten.co.jp/services/api/BooksTotal/Search/20170404'
     f'?format=json&keyword={topic}&applicationId={APP_ID}&hits=3&sort=sales'

これで(タイトル・著者・ISBN・書影)の検証済みタプルが手に入る。ASIN の当てずっぽうは終わり。

DMM 検索 URL 形式の発見

DMM の検索 URL は自明でない。5パターン試した。

パターン結果
book.dmm.com/search/?keyword=X❌ トップへリダイレクト
book.dmm.com/list/?search_keyword=X❌ トップへリダイレクト
www.dmm.com/search/-/list/?searchstr=X❌ 404
www.dmm.com/search/=/searchstr=X/✅ 200 OK
book.dmm.com/search/index/?k=X❌ リダイレクト

正解は -/list/? ではなく =/。どこにもまともに文書化されていない DMM 独自の URL スキーマだ。

REST API の一括処理

その媒体の既存6記事を、WordPress REST API の一括処理で更新した。

  1. 取得: 各投稿の生コンテンツを取得(?context=edit
  2. 抽出: 旧アフィリエイトブロックを抽出(正規表現による境界検出)
  3. 再構築: 新しい3ボタンカード HTML で組み直す
  4. 書き戻し: 更新後のコンテンツを POST

リクエスト間隔 0.3 秒で、6記事のバッチ全体が約8秒で完了した。

ブランド表記の正規化(おまけ)

全記事を開いたついでに、ブランド表記の置換も走らせた。

  • 全公開記事で NT MediaNT編集部
  • REST API 経由の str.replace() 一括パスで適用

FANZA サイドバーウィジェット(A-lite MVP)

収益実験として、300×300 の商品カードを2枚縦積みした追従サイドバーウィジェットを設置した。

  • 上段: DMM.com のホビー/フィギュア(美少女フィギュア、mono/hobby API)
  • 下段: FANZA videoa ランキング1位(digital/videoa API)

DMM API 画像の罠

DMM の mono/hobby エンドポイントが返す imageURL には listsmall しかなく、large キーがない。だが URL の {cid}ps.jpg{cid}pl.jpg 置換で 600px 画像が取れる。API ドキュメントには書かれていない。

設置方法

ウィジェット HTML は Cocoon の「サイドバースクロール追従」ウィジェットエリア(カスタム HTML ウィジェット)へ手貼りした。ウィジェット管理用の REST API はなく、Cocoon のウィジェットエリアは WP REST から素直には触れない。

Cocoon ショートコードを使えなかった理由

Cocoon の [amazon asin="X"] ショートコードはエレガントだ。1行で商品データを自動取得し、Amazon+楽天+DMM ボタン付きの美しいカードを描画する。

だが PA-API アクセスが前提になる。資格がないと——

  • カードは product-item-error の div として描画される
  • 管理者には「AssociateNotEligible」エラーが見える
  • 読者には素の「Amazonで詳細を見る」テキストリンクしか出ない

教訓:収益に直結する UI を、サードパーティ API の稼働状況に依存させない。 CDN 画像を使った手書き HTML は不格好だが、壊れない。

結果

指標BeforeAfter
動作するアフィリエイトリンク2/8 記事8/8 記事
1冊あたりのストア数1(Amazon のみ)3(Amazon+楽天+DMM)
書影画像0記事あたり3枚
PA-API 依存ありなし
FANZA サイドバーなし追従ウィジェット(2商品)
ブランド表記混在NT編集部に統一

今後

  1. PA-API の復活: Amazon の成約が3件に達すれば PA-API は自動で再有効化される。その時点で Cocoon ショートコードへ戻す選択肢もあるが、手書きシステムは恒久フォールバックとして十分機能する
  2. 楽天アフィリエイトの計測確認: 現在は hb.afl.rakuten.co.jp ラッパーを使用。クリックが楽天のダッシュボードに正しく計上されているか要確認
  3. FANZA サイドバーのローテーション: 現在は静的(手動選定)。Phase 2 では cron+DMM API で週次自動ローテーション
  4. --humanize リントモード: validate_mdx.py に AI 臭検出(冷徹、浮き彫りにする、紐解く 等)を追加する

追記(2026-07-19): 立ち上げ期に英語で書いていた記事を、内容そのままに日本語へ改稿した。