Cookieなしで記事ごとのPVを数えるには、閲覧時にページのパスとCMSの記事IDを計測先へ送ります。genko.meでは受付ドメインを登録し、ReactならPageView、ほかの構成ならsendPageViewを設置すると、管理画面で記事別の閲覧数を確認できます。同じ端末による同じページの閲覧は30分に1回として数えるため、毎回のリロード数とは異なります。
本記事はgenko.meの運営側が執筆しています。2026年10月時点のgenko.meのPV仕様を説明し、GA4、Cloudflare Web Analytics、Plausibleとの使い分けも整理します。
CookieなしのPV計測で分かること
genkoのPVは、「どの記事が読まれているか」を編集画面から確認するための機能です。サイトのパス別とCMSの記事別に日ごとの回数を保存します。ユーザーの行動を追い続ける解析とは目的が異なります。
確認したいこと | genko PVで扱うか |
|---|---|
ページのパス別閲覧数 | 扱います |
CMS記事IDごとの閲覧数 | 扱います |
よく読まれる記事の一覧 | 累計閲覧数で並べられます |
参照元、国、デバイスの分析 | 保存しません |
訪問者の継続的な追跡 | 行いません |
URLを変えても、同じ記事IDを送れば集計を継続できます。一方で、記事IDはワークスペース内で共通の集計キーです。異なるAPIに同じIDがあれば閲覧数を共有するため、独立して数えたい記事には別のIDを付けます。
1. 計測するドメインを登録する
ワークスペースの「PV」を開き、計測を受け付けるドメインを登録します。登録・変更はオーナーまたはメンテナーが行います。サブドメインは別登録で、登録外のドメインとlocalhostからの閲覧は数えません。
実際に配信するドメインを登録します。
サイトに計測処理を設置します。
登録済みドメインを通常のブラウザで開きます。
管理画面で受信状況とグラフを確認します。
APIキーは不要です。公開記事を取得する配信APIの認証と、PVの送信は別の仕組みです。自動操作ブラウザは計測対象外なので、E2Eテストで数字が増えなくても設定ミスとは限りません。
2. Next.jsにPageViewを設置する
Next.js App Routerでは@genko-me/react/nextから読み込みます。以下のパッケージを追加してから、app/layout.tsxにパス計測用の部品を1つ置きます。
npm install @genko-me/react @genko-me/coreimport type { ReactNode } from 'react';import { PageView } from '@genko-me/react/next';
export default function RootLayout({ children }: { children: ReactNode }) { return ( <html lang="ja"> <body> {children} <PageView workspace="your-workspace" /> </body> </html> );}workspaceはワークスペースのスラッグへ置き換えます。PageViewは画面に何も描画しません。Next.js版はusePathname()に追従するため、App Router内の画面遷移でもパスを送信します。
記事ページでは、取得済み記事のIDを別に送ります。次はサーバーコンポーネントとして利用する記事用の表示部品です。
import { PageView, ViewCount } from '@genko-me/react/next';
export function ArticleViews({ entry }: { entry: { id: string } }) { return ( <> <PageView workspace="your-workspace" entryId={entry.id} /> <ViewCount workspace="your-workspace" entryId={entry.id} /> </> );}レイアウトの送信はパス、記事側の送信は記事の閲覧数を加算します。記事側にentryIdを付けたことでパスが二重に加算されることはありません。ViewCountは累計を表示するだけで、閲覧数を増やしません。
Next.js以外のReactでは@genko-me/reactからimportします。独自ルーターでは現在のパスをpathに渡し、SPAの画面遷移でも更新されるようにしてください。
素のJavaScriptや静的サイトでPVを数える
Reactを使わないサイトでは、ブラウザ向けの関数を使います。次はnpmパッケージを解決できるバンドラーのブラウザ用エントリーファイルに置く例です。Node.js側で実行しても閲覧は送信されません。
import { sendPageView } from '@genko-me/core/browser';
sendPageView({ workspace: 'your-workspace', path: location.pathname });sendPageView({ workspace: 'your-workspace', entryId: 'abcDEF123456' });2行目は記事ページで、実際に取得した記事IDへ差し替えて使います。記事以外のページなら最初の送信だけで十分です。SPAでは初回表示だけでなく、ルーターの遷移後にも送信します。
2026年10月時点で、Vue・Svelte・Web Components専用のPV部品は未対応です。この関数を使えば、表示部分のフレームワークとは分けて組み込めます。静的HTMLのお知らせ実装と組み合わせる場合も、スクリプトの読み込み方法を揃えてください。
累計を自分で取得する場合は、次の関数が使えます。
import { fetchViewCounts } from '@genko-me/core';
const counts = await fetchViewCounts({ workspace: 'your-workspace', entryIds: ['abcDEF123456'], paths: ['/blog/hello'],});console.log(counts.entries.abcDEF123456, counts.paths['/blog/hello']);取得失敗は表示側で扱います。累計表示は最大約5分キャッシュされます。キャッシュと重複判定は分けて確認します。
人気記事をPVの多い順に並べる
一覧取得でorders: '-views'を指定すると、累計閲覧数が多い順になります。orders: 'views'は少ない順で、未計測の記事は0として扱います。次はSDKの設定を含む取得例です。
import { createGenko, listApi } from '@genko-me/sdk';
const genko = createGenko({ workspace: 'your-workspace', apiKey: process.env.GENKO_API_KEY!, apis: { blog: listApi() },});const popular = await genko.apis.blog.list({ orders: '-views', limit: 4 });console.log(popular.contents);@genko-me/sdkをインストールし、サーバーで配信APIキーを設定して使います。ReactのListでもorders="-views"を指定できます。この並び順は累計なので、「今週の人気記事」と表示しないでください。期間別の集計が必要なら、SDKの取得仕様にあるviews({ ids, days })などを使い、対象期間と順位の定義を別途設計します。
どんな情報を保存し、何を保存しませんか
PVの仕様では、IPアドレスとUser-Agentから日ごとに変わるソルト付きハッシュを作り、一時的な重複判定に使います。IPアドレスとUser-Agentそのものは保存しません。
保存する閲覧データはパス別・記事別の日ごとの回数です。クエリ文字列とハッシュは取り除き、連続スラッシュと末尾スラッシュも正規化します。Cookie、参照元、デバイス、国、訪問者の追跡情報は保存しません。ボットや自動操作ブラウザは除外し、IPごとのレート制限もあります。
したがって、ページに名前などを含むURLを設計しないことも大切です。クエリが除かれてもパスは送信されます。プライバシーポリシーへは、パスをgenkoへ送る仕組みとして説明すると、実際の処理と案内を揃えられます。
GA4・Cloudflare・Plausibleとはどう使い分けますか
2026年10月20日に各社公式資料で確認した違いです。単なるPVの数だけでなく、編集者が何を知りたいかで選びます。
サービス | Cookieや計測の特徴 | 選ぶ場面 |
|---|---|---|
genko PV | Cookieなし。パスと記事IDの日別回数 | CMSで記事の読まれ方を確認したい |
GA4 | 通常のタグはファーストパーティCookieでユーザーとセッションを区別。Cookieなしの送信も可能 | ユーザー・セッションを含む解析を設計したい |
Cloudflare Web Analytics | CookieやlocalStorageを計測に使わない。ページ表示やパフォーマンスを扱う | サイト全体の表示体験も見たい |
Plausible | Cookieなし。参照元や国、ブラウザ等も扱う | 流入元などを含むサイト解析をしたい |
GA4は「Cookieがなければ一切送信できない」わけではありません。Googleの説明も、その点を明記しています。Cloudflareは端末側の状態を使わない計測、Plausibleは日替わりの識別子とより広い解析項目を説明しています。genkoで記事の反応を見つつ、別の解析ツールを併用する選択もできます。
2026年10月時点でgenkoのPV計測は現在無料ですが、将来の無料枠と従量料金は未定です。CMS本体のプランは料金と上限と公式サイトで確認してください。
よくある質問
リロードしてもPVが増えないのはなぜですか?
同じ端末の同じページは30分に1回として数えます。累計表示のキャッシュ、受付ドメイン、ボット除外も確認してください。
localhostでPVの動作確認はできますか?
localhostからの閲覧は計測しません。登録したドメインのページを、通常のブラウザで開いて確認します。
ViewCountを置くだけで計測できますか?
できません。ViewCountは表示用です。送信にはPageViewかsendPageViewが必要です。
GA4とPVの数字が一致しなくても問題ありませんか?
重複除外やボット判定、計測の定義が異なるため、同じ数字になるとは限りません。運用の判断には同じサービスの同じ定義で推移を比較します。
出典
2026年10月20日に確認しました。
