複数のページに渡ってリコメンデーションを表示したり、Feedのように、1ページで無限スクロールを使ってリコメンデーションを表示する場合があります。
事例
下記にこのような事例について説明します。
- 無限スクロールのページへのリコメンデーションの表示は、Feedなどの使用でよく見られます。ここでは、既存のバッチで読み込まれたリコメンデーションがすべてスクロールされると、新たなバッチでリコメンデーションを読み込みます。これは、単独のページで動作するアプリケーションのドキュメントにある記事の無限スクロール表示とは異なります。
- 複数のページに渡ってリコメンデーションを表示する場合、ユーザはページの番号をクリックすることで、特定のページに移動することができます。単独ページへの組み込みで、すべてのページは同じDOMエレメントの一部になる場合。
- 複数のページに渡ってリコメンデーションを表示する場合、ユーザはページの番号をクリックすることで、特定のページに移動することができます。各ページが個別のHTMLとして存在する場合。
懸念点
LiftIgniterのクエリを使って複数のページに渡ってリコメンデーションを表示する場合は、下記の点にご注意ください:
- 適切なトラッキングを行う: LiftIgniterが、どのページにリコメンデーションが表示されたか、そしてページで可視(Visible)状態にあるアイテムのみを含んだ記録のデータを送ること。
- リコメンデーションの一貫性(いくつかのコンテキストに該当します): ユーザが同じページに戻ってきたときに同じリコメンデーションを表示する。
- 重複するリコメンデーションの削除: 異なるページに同じリコメンデーションが表示されないようにする。
適切なトラッキングを行う
それぞれのリコメンデーションのページに対してトラッキングの関数をコールしてください。
複数のページに渡ってリコメンデーションを表示する場合に、リコメンデーションのトラッキングを行う際は、主に2つの変更を行ってください。
- 複数のリコメンデーションのページが一つのDOMエレメントにある場合(無限スクロールのページにリコメンデーションを表示する場合など)、トラックする際にエレメントを指定するセレクタが、そのページに表示されたリコメンデーションだけに一致するようにしてください。
- 我々のシステムが、そのページが何番目のページなのかをを正しく認識するためには、$p("track",...)の関数にopts: {page: "page number"}を含めるようにしてください。
ここにトラッキングのコールがどのようになるかを示します:
$p('track', {
opts: {page: 2}, // ここに該当するページ番号を示します。このoptsを含むことで、同じウィジェット名を使用していても、それぞれのページを個別にトラックすることができます。
elements: document.querySelectorAll('selector that matches ONLY the recommendations on that page'), // 複数のリコメンデーションのページが同じDOMにある場合(Feedのように無限スクロールでリコメンデーションを表示する場合など)は、セレクタの干渉に注意してください。
name: 'your widget name', // ウィジェット名は複数のページで同じものを使用できます
source: 'LI' // またはLI以外のソースからのリコメンデーションに対しては`base`を使用します。
});
リコメンデーションの一貫性
ケースによっては、複数のページに渡ってリコメンデーションを表示している場合に、ユーザが同じページに戻ってきたときに同じリコメンデーションを表示して、リコメンデーションの一貫性を保ちたい場合があります。
無限スクロールのページや、単独のページで動作するアプリケーションにおいて、すでに表示した(already-visited)リコメンデーションをDOMにストアしている場合は、自動的に一貫性が保たれます。
その他のケースでは、既に表示されたリコメンデーションをクライアントのローカルストレージにalready-visitedとしてストアしておく必要があります。そしてユーザが同じページを再訪問したときは、リコメンデーションをそのストレージから呼び出すことで一貫性が保たれます。
重複するリコメンデーションの削除
様々なケースにおいて、異なるページに表示するリコメンデーションはそれぞれ違うものを見せたい場合がほとんどであると考えます。
リコメンデーションの重複を削除するには2つの方法があります。
- 黙示的リコメンデーション重複削除(LiftIgniter側で処理する重複削除): LiftIgniterは、JavaScipt SDKに含まれているpageviewIdのフィールドを使って、複数のページに渡って表示されるリコメンデーションの重複を自動的に削除します。しかしながら、このリコメンデーション重複削除は、LiftIgniterからリコメンデーションを返すごとに行われます。これは、ユーザが複数のページを行き来してからそのページに戻ってきた場合は、正しく処理しない場合があります(我々はサーバ側の記録として、現在のページの情報だけを保持しています)。APIの組み込みを行う場合は、それぞれのウィジェットリクエストに対して[pageviewId]を含めることで、正確に情報を蓄積することができます。
- 明示的リコメンデーション重複削除(お客様側で設定する重複削除): すでに表示されたリコメンデーションを、除外するアイテムのリスト[excludeItems]としてクエリに含めることで、リコメンデーションの重複を削除します。