テストとデバッグ
概要
このドキュメントでは、サイト上でのRecommendのデバッグおよびユーザー受け入れテストに役立つ方法をいくつか紹介します。
このガイドのデバッグセクションは、読者が以下の内容を理解していることを前提としています:
-
経験豊富なWebまたはアプリケーション開発者であること
-
FireBugまたは同等のWeb開発ツールに精通していること
-
XMLおよびJavaScript、そしてデバッグに精通していること
このガイドのユーザー受け入れテストセクションは、読者が以下の内容を理解していることを前提としています:
-
マーチャントの製品カタログおよび高レベルなマーチャンダイジングガイドラインに精通していること
-
小売業界に関する背景知識を有していること
はじめに
レコメンデーションの仕組み
enRICHパーソナライゼーションエンジンは、アンサンブル学習を使用して多くの独立したアルゴリズム(レコメンデーションタイプ)間での競争を促進し、それぞれが異なるユーザー行動および製品カタログデータを活用します。enRICHエンジンはリアルタイムで、特定の顧客のニーズに最も適したアルゴリズムを判断します。
どのページをテストすべきか?
お客様のサイトには、以下に挙げるページタイプまたは製品のいずれか、または複数が含まれている可能性があります。Algonomyのクライアントソリューションエンジニアまたはリレーションシップマネージャーに相談すると、テスト対象ページのマトリクスを提供してもらえます。
ページタイプ:
-
ホーム
-
検索
-
カテゴリ
-
商品
-
エラー
-
カート
-
カートに追加
-
チェックアウト完了
レコメンデーションの表示方法
Listenモード以前にレコメンデーションを表示するには—JavaScriptインストルメンテーションコードが本番環境にデプロイされる前で、レコメンデーションモデルが構築される前に—ブラウザのURLに「r3_useDummyData=true」を追加します。例:
http://yoursite.com/category?id=123&r3_useDummyData=true
「ダミーデータ」モデルは、カタログからランダムな商品を返すだけで、ページ上の配置場所が正しく設定されているかを確認できます。
Listenモード中にレコメンデーションを表示するには、ブラウザのURLに「r3_forceDisplay=true」を追加します。例:
http://yoursite.com/category?id=123&r3_forceDisplay=true
レコメンデーションモデルはまだ成熟していない可能性があることに注意してください。Recommendは、関連性を高める行動データを収集するためにListenモードを使用します。
デバッグ
Firebugを使用してページタイプを確認する
Firebugとは?
Firebugは、開発者が任意のWebページ上でHTML、CSS、JavaScriptをライブで編集・デバッグ・テストできるツールです。FirebugはFirefoxブラウザのアドオンです。まずFirefoxブラウザ(firefox.com)をダウンロードする必要があります。
パラメータの表示方法
Firebug/netタブを有効にした後、{rr} に渡されるパラメータの確認を開始できます:
-
インストルメントされたページを読み込みます。
-
ツールバーで「JS」をクリックし、JavaScript以外の要素をフィルタリングします。
-
リスト内に「p13n_generated.js」という名前のファイルを探します。
-
「GET p13n_generated.js?」の横にある「+」記号を押します。
-
「Params」タブを押して、{rr} に渡されているパラメータを確認します。
リスト内にp13n_generated.jsが表示されない場合は、ページがインストルメントされていないか、正しく動作していません。
レビューの開始
各ページタイプには、ページが正しく機能するために必要な変数のセットが異なります。一部の変数はオプションです。サイトの要件によっては、追加のパラメータが渡されている場合があります。オプションの値は灰色の背景で示されます。
注意:
-
“pt” は常に存在するわけではありませんが、レコメンデーションがリクエストされている場合には必須です。
-
“u” は必須ではありませんが、すべてのページで指定することが強く推奨されます。
-
セッションIDは、ショッピング体験全体を通して一貫性を保つ必要があります。
-
ユーザーIDは、訪問ごとに一貫している必要があります。
-
{rr} に渡されるすべてのカテゴリID、アイテムID、ブランド、および絞り込み条件は、フィードで提供されたものと完全に一致している必要があります。大文字小文字の区別や末尾のスペースに注意してください。
ページタイプ
ホームページ
パラメーター |
値 |
定義 |
---|---|---|
a |
|
APIキー |
l |
1 |
すべての成功したリクエストに存在 |
pt |
|home_page |
ページタイプと配置リクエスト。
値の例: |page_type.placement1|page_type.placement2|page_type.placement3 |
pte |
T |
レコメンデーションがリクエストされなかったことを示す。レコメンデーションが表示されているページには存在しない。すべてのページに存在する可能性がある。 |
s |
|
セッション |
u |
|
ユーザーID |
ssl |
T |
SSL暗号化、すべてのページに存在する可能性がある |
pref |
|
参照元ページのURL、すべてのページに存在する可能性がある |
ctp |
| |
レコメンデーションからクリックされた製品のURLに追加される文字列、すべてのページに存在する可能性がある |
cts |
|
レコメンデーションから製品がクリックされた際に使用されるドメイン名、すべてのページに存在する可能性がある |
ts |
1235465879413 |
タイムスタンプ |
カテゴリーページ
パラメーター |
値 |
定義 |
---|---|---|
a |
|
APIキー |
l |
1 |
すべての成功したリクエストに存在 |
pt |
|category_page |
ページタイプと配置リクエスト。
値の例: |page_type.placement1|page_type.placement2|page_type.placement3 |
pte |
T |
レコメンデーションがリクエストされなかったことを示す。レコメンデーションが表示されているページには存在しない。 |
s |
|
セッション |
u |
|
ユーザーID |
c |
|
現在表示中のカテゴリのID |
cn |
|
現在表示中のカテゴリ名(ユーザーに表示される準備ができている) |
pref |
|
参照元ページのURL |
ts |
1235465879413 |
タイムスタンプ |
商品ページ
パラメーター |
値 |
定義 |
---|---|---|
a |
|
APIキー |
l |
1 |
すべての成功したリクエストに存在 |
pt |
|item_page |
ページタイプと配置リクエスト。
値の例: |page_type.placement1|page_type.placement2|page_type.placement3 |
pte |
T |
レコメンデーションがリクエストされなかったことを示す。レコメンデーションが表示されているページには存在しない。 |
s |
|
セッション |
u |
|
ユーザーID |
p |
|
現在表示されている商品のID |
re |
|
True/False – 現在の商品をレコメンド可能に設定するかどうか |
cs |
|
ユーザーがこの商品に遷移したカテゴリのIDと名前。
例: 10178:Shoes |
fpb |
|
現在のページに表示されている商品のブランド。カテゴリページにも使用可能。 |
pref |
|
参照元ページのURL |
ts |
1235465879413 |
タイムスタンプ |
検索ページ
パラメーター |
値 |
定義 |
---|---|---|
a |
|
APIキー |
l |
1 |
すべての成功したリクエストに存在 |
pt |
|search_page |
ページタイプと配置リクエスト。
値の例: |page_type.placement1|page_type.placement2|page_type.placement3 |
s |
|
セッション |
u |
|
ユーザーID |
st |
| |
ユーザーが検索した語句 |
p |
|| |
検索によって返された最大15件の製品ID。パイプで区切る |
rfm |
|: |
ユーザーがページに追加した1つ以上の絞り込み条件。name:valueのペアで、パイプで区切る
例: |color:blue|metal:gold |
pref |
|
参照元ページのURL |
ts |
1235465879413 |
タイムスタンプ |
カートに追加ページ
パラメーター |
値 |
定義 |
---|---|---|
a |
|
APIキー |
l |
1 |
すべての成功したリクエストに存在 |
pt |
|add_to_cart_page |
ページタイプと配置リクエスト。
値の例: |page_type.placement1|page_type.placement2|page_type.placement3 |
s |
|
セッション |
u |
|
ユーザーID |
atcid |
|| |
カートに追加された製品ID。パイプで区切る |
rfm |
|: |
ユーザーがページに追加した1つ以上の絞り込み条件。name:valueのペアで、パイプで区切る
例: |color:blue|metal:gold |
pref |
|
参照元ページのURL |
ts |
1235465879413 |
タイムスタンプ |
カートページ
パラメーター |
値 |
定義 |
---|---|---|
a |
|
APIキー |
l |
1 |
すべての成功したリクエストに存在 |
pt |
|cart_page |
ページタイプと配置リクエスト。
例: |page_type.placement1|page_type.placement2|page_type.placement3 |
s |
|
セッション |
u |
|
ユーザーID |
p |
|| |
カートに現在入っている商品ID(パイプで区切る) |
pref |
|
参照元ページのURL |
ts |
1235465879413 |
タイムスタンプ |
購入完了ページ
パラメーター |
値 |
定義 |
---|---|---|
a |
|
APIキー |
l |
1 |
すべての成功したリクエストに存在 |
pt |
|purchase_complete_page |
ページタイプと配置リクエスト。
例: |page_type.placement1|page_type.placement2|page_type.placement3 |
s |
|
セッション |
u |
|
ユーザーID |
o |
|
注文ID |
p |
|| |
購入された商品のID(パイプで区切る) |
pp |
|| |
購入された商品の単価(パイプで区切る) |
q |
|| |
各購入商品の数量(パイプで区切る) |
pref |
|
参照元ページのURL |
ts |
1235465879413 |
タイムスタンプ |
JavaScript 統合の検証
ページ上に JavaScript エラーはありますか?
しばしば、複数の JavaScript コードが同じ <script> ブロックに挿入されています。Algonomy コードより前にあるコードがエラーを引き起こすと、その <script> の残りの内容が実行されなくなる場合があります。
ページにレコメンデーションが表示されない場合は、まずページに JavaScript エラーがあるかを確認してください。エラーの行番号を確認します。エラーが p13n.js(Algonomy ライブラリ)や p13n_generated.js(レコメンデーションデータを含む Algonomy の応答)に関係しているか、それとも他のソースによるものかをチェックします。
エラーが Algonomy コード内にある場合は、クライアントソリューションエンジニアまたはリレーションシップマネージャーにエスカレーションしてください。使用しているブラウザ、表示している URL、エラーの内容と行番号など、再現方法の詳細も提供してください。
それ以外の場合で、<script> タグ内で r3() 関数が呼び出される前にエラーが発生している場合(これは Algonomy のメイン関数で、Omnichannel Personalization サーバーにリクエストを送信し、応答を待機します)、問題の原因はレコメンデーション統合コード以外にある可能性が高く、そのコードを管理している担当者にエスカレーションする必要があります。
p13n.js ライブラリは R3_COMMON セクションの前に呼び出されていますか?
p13n.js ライブラリファイルは通常、<body> タグのすぐ後、または <head> タグ内、または </body> タグの前に呼び出されます。このライブラリは統合コードより前に呼び出される必要があります。統合コード内の変数は p13n.js ライブラリの関数に依存しているためです。
p13n.js が存在する場合は、p13n.js へのフルパスをコピーし、新しいブラウザウィンドウに貼り付けて正しく機能するか確認してください。
r3() 関数はページで呼び出されていますか?
r3() 関数は、R3_COMMON、R3_ITEM、R3_HOME などの変数がページ上で定義された後に呼び出される必要があります。通常、以下のような形式になります:
<script>
var R3_COMMON = new r3_common();
R3_COMMON.setApiKey(‘YOURAPIKEY’);
R3_COMMON.setBaseUrl(‘http://recs.RichRelevance.com/rrserver’);
R3_COMMON.setUserId(‘A_USER_ID’);
R3_COMMON.setSessionId(‘A_SESSION_ID’);
R3_COMMON.addPlacementType(‘home_page.content’);
r3();
</script>
p13n_generated.js ファイルは 300 バイトを超えていますか?
p13n_generated.js が 300 バイトを超えていない場合は、レコメンデーションが返されなかったことを意味します。
以下を確認してください:
-
Firefox で Firebug を使用し、Net → JS をチェックして p13n_generated が返されているか確認します
-
R3_COMMON.addPlacementType() で設定した page_area 名と、r3_placement() で呼び出された名前が一致しているか?スペルミスはありませんか?
-
同じページタイプの他のページ(例えば、他の商品ページ)では p13n_generated.js が 300 バイト以上返されていますか?
このページに表示する推奨商品がない可能性もあります。理由としては、ページ情報が新しい(まだ認識されていないカテゴリ)、レコメンデーションを抑制するマーチャンダイジングルールが設定されている(アカウントマネージャーに確認)、またはダッシュボード内のページエリア名に設定ミスがある(クライアントソリューションエンジニアに確認)などが考えられます。
最後の r3_placement() の後に rr_flush_onload(); が呼び出されていますか?
rr_flush_onload() 関数は、document.ready フックを待たずにレコメンデーションが表示可能であることをブラウザに伝えます。この関数は、最後の r3_placement() 呼び出しの後に常に含めるべきです。そうすることで、DOM の読み込みを待たずにすぐにレコメンデーションが表示されるようになります。
HTTPS ページでレコメンデーションが表示されませんか?
HTTPS ページでは、p13n.js ファイルやその他の補助ファイルのリンクが正しい HTTPS プロトコルでリクエストされているか確認してください。そうでない場合、ファイルが読み込まれず、レコメンデーションも返されません。JavaScript でページのプロトコルをチェックするのが良い方法です:
if(location.protocol == “https:”){
rrLink = ‘https://’
}else{
rrLink = ‘http://’
}
var R3_COMMON = new r3_common();
R3_COMMON.setApiKey(‘YOUR_API_KEY’);
R3_COMMON.setBaseUrl(rrLink + ‘recs.RichRelevance.com/rrserver/’);
Onload イベントを書き換える技術を使用していますか?
onload イベントにフックする一部の技術は、onload イベントを望ましくない方法で書き換える可能性があります。たとえば、SLI は onload 関数を再定義して検索コードをトリガーするようにしており、その結果、onload に依存する処理が呼び出されなくなります。
レコメンデーションが常に読み込まれるようにするには、rr_flush_onload() イベントを最後の r3_placement() 呼び出しの後に必ず含めるようにしてください。
見た目と表示
レコメンデーションは正しく表示されていますか?
最近、サイトの CSS ファイルに変更はありましたか?レコメンデーションのレイアウトに予期しない表示がある場合は、CSS や HTML の変更により、クラスが適切にスタイルを継承できていない可能性があります。
Firebug を使用してレコメンデーションの各要素を調査し、該当する要素に正しい CSS が適用されているかを確認してください。
CSS ファイルへのパスは HTML ソースに存在しますか?
ページ上で使用するスタイルを適用するには、CSS ファイルが正しく含まれており、順序も正しいことを確認してください(特にページタイプごとに継承や上書きが行われる場合)。
パスが正しく解決されることを確認するには、該当する CSS ファイルのパスをコピーして、新しいブラウザウィンドウで開いてください。開発/テスト環境にはあるが本番環境にはチェックインされていない CSS 変更が原因だったケースがいくつも報告されています。
CSS クラスは CSS ファイル内でレコメンデーションに適用されていますか?
Firebug を使用してレコメンデーションの要素を検査し、右側のカラムで該当の要素に CSS がどのように適用されているか(継承されているか)を確認してください。
フィードに含まれる不正な XML のテスト
XML 要素がパースされる際、そのタグ内のすべてのテキストも解析対象になります。これは、そのテキスト内に別の XML 要素が含まれる可能性が非常に高いためです。そのため、XML パーサーによって誤って解釈されてしまう特定の文字が不正とされます。XML パーサーのエラーを避けるためには、次の 2 つの方法が推奨されます:
エンティティ参照
文字を対応するエンティティ参照に置き換えてください:
不正な文字 |
エンティティ参照 |
説明 |
---|---|---|
< |
< |
より小さい |
> |
> |
より大きい |
& |
& |
アンパサンド |
‘ |
' |
アポストロフィ |
“ |
" |
引用符 |
CDATA セクション
タグの値を CDATA セクションで囲みます。CDATA セクションは “<![CDATA[” で始まり、“]]>” で終了します:
条件 |
例 |
---|---|
CDATA なし |
<example>this is the value</example> |
CDATA あり |
<example><![CDATA[this is the value]]></example> |
XML フィード構築時のテスト
XML フィードが当社プラットフォームで正しく解析されることを確認するために、送信前に XML エラーをテストすることをお勧めします。以下のような様々なライブラリやオンラインツールを使用できます:
ユーザー受け入れテスト
以下は、レコメンデーションがコンテキストに関連しており、本番環境で使用可能であることを確認するための手順です。
レコメンデーションは現在のページに関連するコンテンツを含んでいますか?
サイトで「ジャンル」を使用していますか?これは、販売業者が「部門」または「バーティカル」と呼ぶ上位カテゴリに相当します。その場合、現在のジャンル外の商品が含まれていないか確認してください。「ベビーカテゴリ」のレコメンド内に「自動車カテゴリ」の商品が表示されるべきではありません(例:「この商品を見た人は、こちらも見ています」)。ただし、「最近閲覧した商品」などのユーザー固有の戦略は例外です。
レコメンデーション戦略はコンテキストに合っていますか?
リレーションシップマネージャーがページタイプごとにベストプラクティスのレコメンデーション戦略セットを有効にします。レコメンデーションエンジンは、トラフィックの一部でこれらの戦略をテストし、上位のパフォーマンスを示すものをより目立つ位置に表示します。
有効になっている戦略を確認し、特定の状況に合っているかを確認します。ページを複数回リフレッシュして、選択された戦略による違和感のあるレコメンデーションがないかを確認してください。たとえば、カテゴリページに全体のトップセラー戦略が表示されていませんか?「この商品を見た人は〜」という戦略が「カート追加」や「カート」ページで表示されていませんか?このような確認には、販売者の視点に立って、顧客の購買方法を考える必要があります。
プレースメント数は正しいですか?
デザイン段階で、各ページに表示されるレコメンデーションの数は決定されています。特定のページ(例:商品ページ)で期待されるプレースメントが表示されていない場合は、他の同じタイプのページを確認してください。この商品に対する閲覧履歴が少なく、十分なレコメンドが生成できていない可能性があります。このようなプレースメントの抑制はエラーではなく、エンジンが正しく機能している証です。
ただし、レコメンデーションが表示されるはずの箇所に空のカルーセルやコンテナが表示されるべきではありません。そのような場合は、リレーションシップマネージャーに連絡してください。
IMPORTANT: レコメンデーションエンジンがページに適した推奨を特定できない場合、レコメンデーションは表示されません。
文字化けなどの表示不具合はありませんか?
商品名に登録商標、外国語などが含まれる商品を確認し、それらの文字が正しく表示されているかを確認してください。
戦略メッセージが多くの行に折り返されていませんか?
戦略メッセージは意味が通じており、顧客を惹きつけていますか?
一部のページ(例:商品ページ)では、現在表示されている商品名が戦略メッセージ内で使われることがあります。商品名が長すぎると、メッセージが複数行に折り返される可能性があります。サイトのデザインにもよりますが、2行程度が適切で、3行以上にはならないようにしてください。
縦方向のプレースメントでは、過剰な折り返しを避けるために商品名を含めないようにするのが一般的です。この点についてはリレーションシップマネージャーに調整を依頼できます。
レコメンデーションは魅力的で関心を引くものですか?
ベストプラクティスを意識してください。お客様はレコメンデーションを見て、どのような行動を取るべきかが理解できていますか?ボタンやリンクは適切に作られていますか?サイトのスタイルガイドに従っていますか?戦略メッセージは魅力的で、一貫したトーンになっていますか?
複数の商品を選び、表示されたデータが正しいことを確認する
クリックスルーリンクが正しく機能していること、表示される商品属性(価格、説明、画像など)が期待通りであることを確認してください。