# 敵対的検証の依頼：pixelstomotors.com の計測と、2026-11-12 の分析の結論

あなたの役目は、Claude が出した結論と計測の作りの**穴を探すこと**です。「合っている」と確かめるのではなく、「どこが間違っている可能性があるか」「どの結論が根拠より強く言い過ぎているか」を見つけてください。

このフォルダの中身：
- `code/` … 計測のコードの写し（p2m-site の HEAD は `code/HEAD.txt`）。`index.js`（Cloudflare Worker 本体。/api/ev・/api/cr-stats・/api/ev-stats・クローラーの記録）、`kpi.js`（3つの数字の日ごとの集計）、`mcp.js`（Claude が使う計測ツールと「読み方」の説明）、`SiteMeasure.astro`（ブラウザ側の記録）、`wrangler.jsonc`、`measurement_git_log.txt`（10/20 以降の関係する変更）
- `data_snapshot.md` … 計測ツールから写した数字と、Claude が行った確認

読むだけです。書いてよいのは報告ファイルだけ。ネットにはつながらない前提で、コードと数字だけで判断してください（実際のサイトや Cloudflare の設定は見られません。見られないことで判断できない点は「判断できない」と書く）。

---

## サイトと計測の前提

- pixelstomotors.com は個人の研究記録サイト（Astro の静的ページ + Cloudflare Worker）。人の来訪は1日20〜30表示ほど、機械（クローラー）は1日300〜400表示
- 計測は2系統
  - **ev**：ページの中の JS（SiteMeasure.astro）が、ページが隠れたときに /api/ev へ送る。人の操作（pointermove・pointerdown・touchstart・wheel・keydown）が1回でもあれば `u=1`。Worker の `evKind` が b（機械）／h（人の操作あり）／x（操作なし）に分ける。R2 の `ev/{日付}/` に残る
  - **cr**：Worker がページ・テキストを返すとき、名乗り（User-Agent）が一覧（CRAWLERS）に当たれば R2 の `cr/{日付}/` に残す
- 見る数字は3つ（kpi.js）：AI の依頼読み（ChatGPT-User・Claude-User など）／AI のリンクから来た人（人の操作ありの表示だけ）／サイト名の検索（Search Console を手で記録）
- エイイチ自身の閲覧は `?p2m-notrack=1`（localStorage）で外している

---

## 検証してほしい結論（Claude が 2026-11-12 に出したもの）

### 結論1：11/11 からの人の表示の急減（1日20〜30 → 3・2）は計測の故障ではなく、来訪が本当に減った
根拠：計測のコードは 11/6 以降変わっていない／Playwright で PC・スマホから送った記録が 204 で受け付けられた／機械の表示と AI の依頼読みは普段どおり／サーバーからでもチャレンジは出なかった。

攻めてほしい点：
- 1a. 人の表示だけが落ち、機械の表示は落ちていない。**計測の故障で、人の分だけが落ちる経路**はないか。コードから考えられるものを全部挙げる。例：
  - `sameSite()` が Origin・Sec-Fetch-Site で弾く条件（Origin が `null` になるブラウザ・設定、sendBeacon の Origin、Safari・アプリ内ブラウザ）
  - `evKind` の `request.cf.verifiedBotCategory` や `botManagement.verifiedBot` が、人のブラウザで真になることはあるか
  - `EV_BOT_UA` / `AUTO_UA` に、普通のブラウザやアプリ内ブラウザ（LinkedIn・X・Google アプリなど）の名乗りが当たることはないか（`preview`・`bot;` など）
  - 流量制限（`guarded` の ratelimits）が、人のほうだけを弾く形になりうるか
  - `u`（人の操作）が付かず x になる読み方（スマホで触れずに読む、PC でキーもマウスも動かさない）
- 1b. 11/11〜11/12 の全部の表示 645件のうち、スマホ幅が 0% だった。これは結論1と矛盾しないか。人の表示が5件しかないことで説明がつくか、それとも別の故障を示しているか
- 1c. Playwright（Chromium、クラウドの IP）で 204 が返ったことは、実際の人（日本の家庭・携帯回線、Safari、アプリ内ブラウザ）で記録が届くことの根拠としてどこまで足りるか。足りないなら、何を確かめれば足りるか
- 1d. コードの外（Cloudflare の設定：Bot Fight Mode、WAF、チャレンジ、キャッシュ、Workers のルート）が 11/11 に変わって、人だけが弾かれた・ページは見えたが JS が動かなかった、という可能性を、data_snapshot の数字はどこまで否定できるか

### 結論2：減ったのは主に「直接・不明」（1日約10 → ほぼ0）で、Google から（1日約5、11/10 は約11）も減った
- 2a. 11/2〜11/8 と 11/9〜11/12 の数の比べ方（期間の長さ・曜日・途中の日）に誤りはないか
- 2b. 「直接・不明」と Google が同じ日に落ちたことから、何が言えて、何が言えないか

### 結論3：11/3 以降の Claude-User の読みのうち、エイイチ・Claude の試しは 11/3 の12件だけで、残り7回（10ページ）は外の人
根拠：11/3 の分はチャットの出典と一致。11/8 に Claude Code のセッションが WebFetch でページを読んだのに、その日の Claude-User は0件だったので、Claude の作業のセッションは Claude-User に入らないとした。エイイチは「自分ならもっと多く読む」と言っている。
- 3a. 11/8 の1回の観察から「Claude Code の WebFetch は Claude-User に入らない」と一般化してよいか。その WebFetch が別の名乗りで来て記録されなかった／キャッシュから返った／別のドメインを読んだ、などの可能性
- 3b. Claude-User は Cloudflare が本物かを確かめていない（`ok` が 0）。名乗りを偽った機械が混ざる可能性と、その見分け方
- 3c. 名乗りの当て方（`crawlerOf` が CRAWLERS を順に `includes` で見る）で、Claude-User・ChatGPT-User・Perplexity-User が別の名前に化ける、または逆に別のものがこれらに化けることはないか

### 結論4：AI の依頼読みは横ばい（週 55 → 61 → 今週4日で24）
- 4a. kpi.js の数え方（robots.txt を外す、ChatGPT-User の未確認を外す、1ページ1件）で、同じ1回の依頼が何ページも読むと数が膨らむ。「横ばい」の判断にこれがどう効くか
- 4b. 日ごとの集計を一度作ると残す作り（`kpi/{日付}.json`）で、作ったあとに届いた記録が抜ける・二重に数える、ということはないか（日付をまたいで送り直された ev、5分ごとの scheduled の時刻）

---

## 計測の作りとして見てほしいこと

- 5a. 人の数（h）の決め方は、「人が読んだ」を数えるのに足りているか。過小・過大のどちらに偏るか
- 5b. ev の送り直し（同じ v で n を増やす）の重ね方（kpi.js は n が最大の1件、index.js の evStats はどうか）が、両方で同じか
- 5c. `/api/cr-stats` の打ち切り（40ページ×1000件）と、今回 `bot` を指定したときに足した `hits`（新しい順に200件）の作り（index.js の crStats）に誤りはないか
- 5d. ここまでで「計測の故障」と疑わしいもの、または今後の分析を誤らせるものがあれば、優先度順に

---

## 報告の形

`codex_report_20261112.md` としてこのフォルダに書く。

各項目（1a〜5d）に：
- ✅ OK（結論・作りのとおりでよい）
- ⚠️ 要注意（言い過ぎ、または確かめが足りない。何をどう確かめれば決着するか）
- ❌ NG（誤り。該当するファイルと行番号、直し方）

最後のサマリ：
1. 結論1〜4のうち、このまま言ってよいもの／言い方を弱めるべきもの／撤回すべきもの
2. 11/11 の急減の原因を決着させるために、次にいちばん先にやるべき確認（3つまで、優先順）
3. 計測のコードで直すべきもの（あれば、優先順）
