diff --git a/src/pages/record/[slug].astro b/src/pages/record/[slug].astro
index be1a5f6..40fe86e 100644
--- a/src/pages/record/[slug].astro
+++ b/src/pages/record/[slug].astro
@@ -113,8 +113,15 @@ const nowCard = seriesNow || siteNow;
// 前回選んだ AI を見た人のブラウザに覚え(p2m-site-ai)、次から一番上に出す。押した数は /api/ev-stats(場所 ai)で見る
const mdUrl = `${SITE}${fullTextPath(r.slug)}`;
// 全文ページの住所に ?via=(どの AI から来たか)を付ける。AI が読みに来たとき、ボタン経由だと worker/index.js が分けて数える(/api/cr-stats の「AIで読む経由」)
+// Gemini のアプリはテキストのファイル(.md)を読まず HTML だけ読むので、Gemini には記事ページ(HTML)を読ませる(2026-11-03)
const aiPromptFor = (via) => {
const md = `${mdUrl}?via=${via}`;
+ if (via === 'gemini') {
+ const page = `${url}?via=${via}`;
+ return isEnglish
+ ? `Please read this article and answer my questions.\nArticle: ${page}\n\nFirst, briefly summarize what was done and what was found. Then tell me what I should check to reproduce it in my own environment.`
+ : `この記事を読んで、質問に答えてください。\n記事: ${page}\n\nまず、何をして何が分かったのかを短くまとめてください。そのあと、私が同じことを自分の環境で試すときに、確かめることを教えてください。`;
+ }
return isEnglish
? `Please read this article and answer my questions.\nArticle: ${url}\nFull text (including code and logs): ${md}\n\nFirst, briefly summarize what was done and what was found. Then tell me what I should check to reproduce it in my own environment.`
: `この記事を読んで、質問に答えてください。\n記事: ${url}\n全文(コード・実行ログを含む): ${md}\n\nまず、何をして何が分かったのかを短くまとめてください。そのあと、私が同じことを自分の環境で試すときに、確かめることを教えてください。`;
diff --git a/worker/index.js b/worker/index.js
index 3eb8a53..97496c6 100644
--- a/worker/index.js
+++ b/worker/index.js
@@ -49,7 +49,8 @@ export default {
// 検索エンジン・AI のクローラーが読みに来たか(記録の失敗でページを止めない)
// 記事の「AIで読む」から来た全文ページ(?via=chatgpt など)は、名乗りが一覧にない読み手(Gemini など)も「その他」として残す(2026-11-01)
try {
- const via = /^\/record\/[^/]+\.md$/.test(url.pathname) && AI_VIA.has(url.searchParams.get('via') || '') ? url.searchParams.get('via') : '';
+ // TOP の「このサイトの楽しみ方」から来た /llms.txt?via=… も同じく数える(2026-11-03)
+ const via = (/^\/record\/[^/]+\.md$/.test(url.pathname) || (/^\/record\/[^/.]+$/.test(url.pathname) && url.searchParams.get('via') === 'gemini') || url.pathname === '/llms.txt' || url.pathname === '/llms' || url.pathname === '/llms.html') && AI_VIA.has(url.searchParams.get('via') || '') ? url.searchParams.get('via') : '';
const bot = crawlerOf(request, url) || (via ? 'その他' : null);
if (bot) ctx.waitUntil(crRecord(request, env, url, bot, res.status, via).catch(() => {}));
} catch { /* 数え損ねてもページは返す */ }