サーバーはすでに2種類の訪問者を区別している。AIエージェントがAccept: text/markdownでページをリクエストすると、ナビゲーションやスクリプトのないクリーンなMarkdownを受け取る。人間がブラウザでリクエストすると、レイアウト、画像、スタイルを含む完全なHTMLを受け取る。同じURL、同じコンテンツの2つの異なるバージョン。

これは機能する。しかし明らかな限界がある:すべての人間を同じタイプの読者として扱っている。Dev.toから来るデベロッパーはコードを見たい。Dribbbleから来るデザイナーはUXの判断を見たい。Indie Hackersから来るファウンダーはビジネスへの影響を見たい。3人とも全く同じものを受け取る。

誰もリアルなコードでドキュメント化していないことを実験することにした:パーソナライゼーションフレームワークなし、トラッキングCookieなし、機械学習なしで、リクエストで利用可能なシグナルに基づいて適応するコンテンツ。PHPがブラウザがすでに伝えていることを読むだけ。

実験:コンテキストによる折りたたみ可能なセクション

記事のコンテンツは変えていない。変えたのは、どのセクションが展開されて表示され、どれが折りたたまれるか。JavaScriptなしで動作するHTMLのdetailsタグを使用した。

ロジックはシンプルだ。リファラーにdev.to、github.com、stackoverflow.comが含まれていれば、コードブロックを含むセクションが展開され、ナラティブセクションが折りたたまれる。medium.com、linkedin.comが含まれていれば、ナラティブが展開されコードが折りたたまれる。リファラーがないか直接アクセスなら、すべてがいつも通り展開される。

function getReaderProfile(): string {
    $referer = $_SERVER['HTTP_REFERER'] ?? '';
    $devSources = ['dev.to', 'github.com', 'stackoverflow.com', 'hashnode.com', 'qiita.com'];
    $generalSources = ['medium.com', 'linkedin.com', 'twitter.com', 'facebook.com'];
    
    foreach ($devSources as $source) {
        if (stripos($referer, $source) !== false) return 'developer';
    }
    foreach ($generalSources as $source) {
        if (stripos($referer, $source) !== false) return 'general';
    }
    return 'default';
}

コンテンツは同一。ビジュアルヒエラルキーが変わる。デベロッパーはコードを最初に見る。一般読者はナラティブを最初に見る。誰も情報を失わない。違いは何が優先として提示されるかだ。

この実験から学んだこと

このシステムを2週間稼働させた後の3つの観察。

第1:開発プラットフォームからの訪問者のページ滞在時間が12%増加した。コードが最初に展開されて表示されることで、記事が自分に関連があるかどうかの判断の摩擦が減る。

第2:どのグループでもバウンス率は大きく変わらなかった。セクションを折りたたむことがコンテンツの欠如として認識されないことを確認。

第3:完全な実装に45分かかった。ライブラリ、フレームワーク、外部サービスは不要だった。20行の関数とテンプレート調整だけのバニラPHP。

最も価値のあるコンテンツは静的ではない。適応するインフラストラクチャだ。そしてそれを行う最も誠実な方法は、訪問者がすでに送っているシグナルを使うこと。侵入的なトラッキングなし、Cookieなし、強制的なログインなし。ブラウザがすでに言っていることを読むだけ。