1 円で購入した xyz ドメインにオマケでついていたレンタルサーバー機能を使って自作のブログシステムで運営している当サイトだが、ついに 1 人目のお客様がご来店されたようなのでやる気が出てきた。
しかし、せっかく記事を読んでもらえてもたまたまたどり着いたその記事だけで終わってしまうのは惜しいので WordPress などでおなじみの「関連する記事」を表示させて色々な記事を読んでもらおうという作戦。
どういう仕組みなのか?
関連する記事を表示するには元になる記事と関連性のある記事を何らかの形で引っ張ってこないといけないわけだが、その方法には以下のようなものがあるようだ。
- 手動で設定
- ランダムで取得
- 同じカテゴリのものを取得
- 同じタグ (タグクラウド) を含むものを取得
- ユーザーの行動を分析して関連性が高いものを取得
- タイトルや内容を分析して関連性が高いものを取得
同じカテゴリの中からランダムで取得したり、手動設定とランダム取得を組み合わせたり、複数の条件から点数を付けて関連性を評価したりして関連記事を抽出するというのが一般的らしい。
MySQL でレコードをランダムに取得する
ユーザーの行動を分析したり内容を分析したりするにはそれなりに負荷がかかるので、そこまでの正確性が必要ない場合は同じカテゴリの中からランダムで取得する方式で十分だろう。
SQLSELECT * FROM `articles` ORDER BY RAND() LIMIT 6;
こんな感じで記事をランダムに 6 つ取得することができる。
あとは「元の記事と同じカテゴリ」という条件と「元の記事を除く」という条件を付け加えてやれば簡単に実装できる。
考察
同じカテゴリの中からランダムで取得する方式のメリットとしては、閲覧数が少ない記事も表示されることになるので過去の眠っている記事を読んでもらえる機会ができる点か。
デメリットとしては別のカテゴリの記事はたとえ関連性があったとしても表示されないという点と、同じカテゴリならば内容に関連性がなくても表示されてしまうという点だろう。
カテゴリではなくタグを使って関連性を評価するようにすれば、カテゴリを超えて関連する記事を取得することができそうだが、そもそもこのブログシステムにタグの機能自体が存在しない。
ブログシステムにタグの機能を搭載することは可能だが、カテゴリの分類すら面倒くさくてやりたくないのに、タグを考える作業なんてもっとやりたくない。
ユーザーの行動や記事の内容から関連する記事を取得する方式だと全自動でカテゴリを超えて関連性の高い記事が表示されそうだからいいなーとは思うけど、方式によってユーザーの滞在時間と回遊率にどれほど違いが出てくるのかは謎。
そんなわけで、同じカテゴリの中からランダムで取得する方式で実装したものがこの記事の最後に表示されているはず。
結論
ユーザー数 1 人という当サイトではそもそもそんなの関係ない。