Developer Guide
WordPress以外の自作サイト(PHP / Node.js / Next.js)に、AIが読める形で店舗情報を埋め込み、中央更新で常に最新に保つための導入キットです。制作会社さま向け。組み込みは1か所だけ。
連携キットをダウンロード(.zip)これを理解しないと、入れても効きません。
AIクローラー(GPTBot / ClaudeBot / PerplexityBot 等)は JavaScriptを実行しません。ブラウザで後から挿入するタグ(<script src="…/tag.js"> や GTM経由)で入れた構造化データは、AIからは見えません。
そこで本キットは、サーバーがHTMLを生成する時点で JSON-LD を埋め込みます。ブラウザの「ページのソースを表示(view-source)」に application/ld+json が出る=AIが読める状態になります。
⚠️ 重要
クライアント側の tag.js(1行JSタグ)は設置確認には使えますが、AEO目的では無効です。必ず本キット(サーバー側)を使ってください。
店のサーバー ──(描画のたび / 10分キャッシュ)──▶ Nurevo /api/tag/config?k=サイトキー
│ │
│ ◀────────── ruleset反映済みの JSON-LD ─────────┘
▼
生HTMLの <head> に <script type="application/ld+json"> を埋めて返す
Nurevo中央の「脳(ruleset)」が更新されると、各サイトは次回取得時(最大10分)に自動で最新化。API障害時は直近キャッシュを使うので、店のページは絶対に壊れません(フェイルオープン)。
nrv_xxxxxxxx を控える。application/ld+json が出るか確認)同梱の php/nurevo-aeo.php をサーバーに置き、各ページの <head> 内・</head> の直前で呼ぶ:
<?php require __DIR__ . '/nurevo-aeo.php'; nurevo_render_jsonld('nrv_xxxxxxxx'); ?>同梱の node/nurevo-aeo.js を置き:
const { nurevoJsonLdTag } = require('./nurevo-aeo'); app.get('/', async (req, res) => { const ld = await nurevoJsonLdTag('nrv_xxxxxxxx'); res.send(`<!doctype html><html><head>${ld}</head><body>...</body></html>`); });
テンプレートエンジン派は nurevoMiddleware('nrv_xxxxxxxx') を使い、ビューで res.locals.nurevoJsonLd を <head> に出力。
同梱の nextjs/nurevo.ts を lib/ 等に置き、app/layout.tsx(Server Component)で:
import { getNurevoJsonLd } from '@/lib/nurevo'; const ld = await getNurevoJsonLd('nrv_xxxxxxxx'); // <head> 内で: {ld && <script type="application/ld+json" dangerouslySetInnerHTML={{__html: JSON.stringify(ld).replace(/</g,'\\u003c')}} />}
同梱の static/robots.txt をドメイン直下に配置(既存があれば User-agent ブロックを追記)。
CDN(Cloudflare等)側で「AIボットをブロック」が入っていると、robots.txtで許可してもエッジで止まります。CDN設定も必ず確認してください。
これが通れば「AIに読まれる状態」になっています。
ブラウザで店のページを開き「ページのソースを表示」→ application/ld+json を検索。JSON-LDが生HTMLに出ていればOK(DevToolsのElementsで見えるだけ=JS注入はNG)。
# 生HTMLにJSON-LDが含まれるか curl -s https://あなたの店.jp/ | grep -o 'application/ld+json' | head # AIボットのふりをしても返るか(エッジブロックの検出) curl -s -A "GPTBot" https://あなたの店.jp/ | grep -o 'application/ld+json' | head
どちらも1行返れば合格。①で出て②で出ない場合はCDNがAIボットを弾いています。
| 方式 | AIが読める | 常に最新 | 用途 |
|---|---|---|---|
| WordPressプラグイン | ○ | ○ | WordPressサイト |
| 本キット(サーバー側連携) | ○ | ○ | 自作サイト(本ページ) |
| ホスト型ページ /s/ | ○ | ○ | サイトを持たない店(GBPに紐付け) |
| tag.js(1行JSタグ) | × | ○ | 設置確認のみ(AEO無効) |
| 静的JSON-LD手貼り | ○ | × | 更新しない固定情報 |
cacheTtl で短縮も可能。GET https://nurevo.jp/api/tag/config?k=<siteKey> → { "ok": true, "jsonld": {…}, "crawlerAllowed": bool }。本キットは cfg.jsonld をそのまま <script type="application/ld+json"> に出力します。