ブログサイトのレコメンド備忘録

ブログサイトのレコメンドについて考える機会があったのでそのメモ。頭にあることをダンプしたかっただけなので、実用性あるのかとか、どう実装するのかとかはあまり考えていない。

概要

自社で運用するブログサイトの直帰率が高いことが気になった。つまり、オーガニック検索(Google検索とか、Yahoo!検索とか)からサイトのある記事に流入してくる。記事を読んでいただけた後に他の記事は読まれずに元のページに戻ったり、ページを閉じられたりしている。どうせならもっと他の記事も読んでもらってサイトのファンになってほしい。そして有用な情報があることを理解いただけれえば、サイトをブックマークしていただけたり、RSS フィードを購読していただけたりすればもっとファンになってくれるのではないかと思う。その取っ掛かりとして他の記事をレコメンドして直帰率を下げ、回遊率を上げたい。

パターン1:最新記事のレコメンド

概要

一番簡単な実装。記事の終わりとか、サイドバーとかに当サイトのいくつかの最新記事へのリンクを表示する。最新記事は読者が欲しい最新の情報がある可能性が高く、読者は気になってクリックしてくれる可能性がある。

実装方法

データストアから執筆日時、更新日時などでソートして Top ◯件の記事データを取得する。

デメリット

  • 最新記事が読者が興味のある記事とは限らない。興味のない記事をレコメンドしても意味がない。
  • 古い記事をレコメンドできない。

パターン2:カテゴリベースの最新記事のレコメンド

概要

興味のない記事をレコメンドすることを対応した実装。同一カテゴリの最新記事へのリンクを表示する。

実装方法

データストアからカテゴリを表すフィールドを閲覧している記事と同一のカテゴリでフィルタして記事データを取得する。

デメリット

  • カテゴリとなるデータのメンテナンスが重要
    • 執筆者がカテゴリを付与することを意識する
    • カテゴリの粒度によって本来読者に読ませたい記事を読ませれない
  • 古い記事をレコメンドできないことは解決されない

パターン3:類似記事のレコメンド

概要

古い記事をレコメンドできないことを対応し、カテゴリデータのメンテナンスが不要な実装。記事レベルで他記事と類似度を算出し、類似度が高い記事を表示する。

実装方法

Elasticsearch の more like this クエリなどを利用する。

デメリット

  • 新しいデータソースが出てきた
  • 閲覧している記事から別のカテゴリに広がらない

パターン4:読者の閲覧履歴に基づく類似記事のレコメンド

概要

閲覧している記事だけでなく、読者がサイトで閲覧した履歴から総合的に類似記事を表示する。

実装方法

読者に Cookie を払い出してトラッキングする。アクセスログなどに Cookie を出力して読者が他にどの記事を読んだのか情報として残す。過去に同一読者が読んだ記事全体からパターン3同様に類似記事を取得する。他にも同サイトでの検索履歴から全文検索のスコアリングで取得するのも良さそう。

デメリット

  • 読んだ記事が全て同列で扱われる
    • 興味ある記事、興味ない記事がある気がする

パターン5:読者の検索履歴に基づく類似記事のレコメンド

概要

閲覧した記事が必ずしも興味のあることとは限らない。検索したキーワードは興味のあることである可能性が高い。読者がサイトで検索した履歴から関連記事を表示する。

実装方法

読者に Cookie を払い出してトラッキングする。アクセスログなどに Cookie を出力して読者が他にどの記事を読んだのか情報として残す。過去に同一読者が読んだ記事全体からパターン3同様に類似記事を取得する。他にも同サイトでの検索履歴から全文検索のスコアリングで取得するのも良さそう。

デメリット

  • サイト内で検索したことがある読者に限られる

パターン6:読者と類似する読者の閲覧履歴に基づくレコメンド

概要

Amazon などでもある「よく一緒に購入されている商品」。読者の閲覧履歴と似ている履歴を持つ読者を探し、類似読者が読んでいて、対象読者が読んでいない記事を表示する。

実装方法

上記と同様である程度できそう

デメリット

  • 実装のハードルが高そう