SSL化(https://)でアマゾン・アソシエイトの再審査は必要か?

このほど、うちで使っているレンタルサーバーのミニバードがスターサーバーに一本化するにあたって、独自SSLを無料で提供するという連絡がきました。

SEO的にもSSL化が必須な昨今なのでhttps://に変えようかと思ったのですが、サイトを複数運用していると気になることが出てきます。

アフィリエイトをやっていてURLが変わると再審査が常ですが、バリューコマースとアマゾン・アソシエイトはどうなのか調べてみました。

まずアマゾン・アソシエイトに問い合わせたところ、再審査の必要はないそうです。
—————————————————————
「http://」から「https://」へのご変更の場合、ご連絡は不要です。
なお、「http://」「https://」以降のドメインが変更となる場合は、別途審査が必要となりますので、その際はご連絡ください。
—————————————————————

次にバリューコマースですが、サイトのQA(サイト名・URLを変更できますか?)にも載っているとおり、内容が変わらなければURLとサイト名が変更になっても構わないとのことなので、再審査の必要はないとのことです。

スターサーバーのSSL無料でいちいち更新しなくてもいいというのはスゴいですね。

ミニバードはスピードが遅いのでさくらインターネットに変えたばかりなのですが、スターサーバーに移行するとスピードも早くなると言っているので元に戻そうかと考え中です。

ちなみにさくらインターネットでSSL化すると1,620円かかるようです。

続・Amazonアソシエイトの審査に通らない。不合格から合格への道

以前登録していたURLを変更したいと、前に申請して通過したダミーブログでそのまま再申請したところ、見事に否決されました。
理由は書かれていませんでした。

ちなみにアマゾン・アソシエイトはURLが変わると再審査となります。

ちょっとググると、最近のアマゾン・アソシエイトは審査が厳しく、Google Adsenseは通ってもアマゾン・アソシエイトは拒否られると書かれています。

確かに・・・。

記事は7コ以上とか、10コ以上とかいろいろと情報が入り乱れていますが、結論としては、ダミーだと分からない程度に本気に見えるように作っておきなさい、ということだと思います。

ダミーブログは3ファイルくらいしかないページで、記事は5つあり、それぞれ500字程度はありました。

しかしページタイトルは以前のサイト名が残ったままでしたし、各記事ページも作らずインデックスページしかなかったのでファイル数が少なく、一部リンク切れを起こしていました。

早速修正してファイル数はそのまま、記事を7つまで増やして再申請。
そして否決。

すると、以前より少し親切になっていて、理由が書かれていました。

——————————————————-
作成されたものをすぐに申請されるのではなく、十分な期間運用いただく・コンテンツを十分拡充いただく等の上で申請いただきますようお願いいたします。
——————————————————-

というわけで、以下のように修正を加えました。

・ページ数が足りない対策として、各記事ページを作ってトップページからリンクを張り、いわゆる普通のブログの体裁にした。

・記事を2つ追加し全部で13コに、ファイル数は16コまで増やした。

・2ヶ月前からブログを開始して、1週間に一度更新したように日付を追加。

・自己紹介ページにメルアドを追加し、記事の内容についてちょっと自分の考えを述べておいた。

これで無事通過しました。

ちなみに申請は1日ごとに行って、日に何度もしていません。
メルアドは一貫してGmailを使っていました。
アカウントは普段買い物に使っているアカウントを一貫して使っています。
記事はすべてオリジナルで、申請するたびに追加しておきました。
画像はページデザイン部分以外は一切なし、アフィリエイトリンクも一切なしです。

 
以前は記事3つくらいで通っていたのですが、随分と厳しくなったと思います。
否決を何度も経験してきた自分がアマゾン・アソシエイトに通る秘訣をまとめると、

・手抜きしたサイトを作らない、デザインはきちんとしておく

・サイト名、タイトル名がサイトの内容に沿うように

・リンク切れが一箇所でもあると通らない

・記事数だけではなくてファイル数もカウントされる

・1記事最低500字

・記事の内容もしっかり見られている
 別のサイトから転載してもググられてしっかりバレます。。。

・アカウントは本人確認も兼ねているので必ず購入履歴、使用歴がある程度あること

 
Amazonの中の人に実際のところを聞いたブログもありますので、一生懸命ググって探してみてください。

要はデザイン・レイアウトが手抜きでサイトが未完成だったり、内容が薄かったり、記事が少なかったりすることが要因だそうです。

以前はそこまで見なかったのですが、あまりにも杜撰なサイトが多いので、チェックが入るようになったのではないでしょうか。

それといろいろなブログで正しくない情報が流れているのでまとめておきます。

・フリーメール(Gmailなど)はダメ

自分は一貫してGmailなので絶対にあり得ません。
要はアマゾンは本人確認をしたがっているのです。
だからフリーメールなら登録アカウントの購入履歴を調べるでしょうし、本人確認さえ取れれば問題ないと思われます。

・アフィリエイトリンクは一切ダメ

アフィリエイトリンクがあっても問題はないのですが、アフィリエイトリンクだけのサイトってあるじゃないですか(自分もそういうサイトですが・・・)
それはダメです。

つまりサイトの内容がユーザーにとって有益かが問題なので、リンクだらけにするなら自分のようにダミーの記事を“自分で”書くことです。

・最低記事数について

具体的な数字は関係ないと思います。
記事数が多くても文字量が少なければNGですし、文字量が多くてある程度コンテンツが豊富なら記事数は少なくてもいいように感じます。

要は中身のあるサイトかどうかが問題なのです。

アマゾンの審査はその時々で方針に違いが見られると個人的には感じています。
以前は不正使用が多くて本人確認に重点を置いていた時期もありましたが、今現在はコンテンツの内容をしっかりと見ているような気がします。

アマゾン アソシエイト(AWS)が10月10日から使えなくなってしまった場合

2015年10月1日付でAmazon.co.jp アソシエイト・プログラムから「【重要なお知らせ】Product Advertising APIについて」というメールが届いています。

——————————————————————————
※「https://〜」で始まるURLにAPIのリクエストを送信している場合のみ対象となります。
該当しない方は、本メールをご覧いただく必要はございません。

先般Google社やMicrosoft社といったブラウザベンダや業界団体(Certificate Authorities)が、SSL/TLS認証時のSHA1のサポートを停止することを発表いたしました。
これに伴い、Product Advertising APIはSSL/TLS通信時に用いる署名アルゴリズムで、SHA1を利用することを2015年10月09日をもって終了し、SHA256による署名アルゴリズムに変更いたします。
——————————————————————————

うちではリクエストURLに
http://ecs.amazonaws.jp/onca/xml
を使っているのでとくに何もしなくて問題ありません。

リクエストURLに
https://aws.amazonaws.jp/onca/xml
を使っている方が対象となるようなのですが、アマゾンのサイトからコピってきたコードを書いておけば、とくに何もしなくても大丈夫なはずです。

もし2015年10月10日以降にAWSが使えなくなってしまった場合は、APIテスト実行ツールからPHPをコピペすればよいかと。
詳しくはこちらで解説しています。
PHP:アマゾンAPI (AWS)で検索結果を表示 〜APIテスト実行ツールの使い方

PHP:アマゾンAPI (AWS)で検索結果を表示

前回の続きです。
取得したXMLから画像、商品名、価格など必要な情報を取り出していきます。

前回のリクエストURLからパラメータを少しいじりました。
下のコードをゴソっとコピペし、Access Key ID、Secret Access Key、AssociateTag辺りをチョチョっと書き換えて実行してみてください。

<?php
$aws_access_key_id = '自分のAccess Key ID';
$aws_secret_key = '自分のSecret Key ID';
$AssociateTag='自分のトラッキングID';

//URL生成
$endpoint = 'webservices.amazon.co.jp';
$uri = '/onca/xml';

for($i=1; $i<=2; $i++){//2ページ取得、ItemSearchの最大値は10まで
	//パラメータ群
	$params = array(
		'Service' => 'AWSECommerceService',
		'Operation' => 'ItemSearch',
		'AWSAccessKeyId' => $aws_access_key_id,
		'AssociateTag' => $AssociateTag,
		'SearchIndex' => 'Books',
		'ResponseGroup' => 'Medium',
		'Keywords' => '進撃の巨人',
		'ItemPage' => $i
	);

	//timestamp
	if (!isset($params['Timestamp'])) {
		$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
	}

	//パラメータをソート
	ksort($params);

	$pairs = array();
	foreach ($params as $key => $value) {
		array_push($pairs, rawurlencode($key).'='.rawurlencode($value));
	}

	//リクエストURLを生成
	$canonical_query_string = join('&', $pairs);
	$string_to_sign = "GET\n".$endpoint."\n".$uri."\n".$canonical_query_string;
	$signature = base64_encode(hash_hmac('sha256', $string_to_sign, $aws_secret_key, true));
	$request_url = 'http://'.$endpoint.$uri.'?'.$canonical_query_string.'&Signature='.rawurlencode($signature);

	$amazon_xml=simplexml_load_string(@file_get_contents($request_url));//@はエラー回避

	foreach($amazon_xml->Items->Item as $item_a=>$item){
		$detailURL=$item->DetailPageURL;//商品のURL
		$image=$item->MediumImage->URL;//画像のURL
		$title=$item->ItemAttributes->Title;//商品名
		$author=$item->ItemAttributes->Author;//著者名
		$price=$item->ItemAttributes->ListPrice->Amount;//価格

		print '<div style="clear:both; margin-bottom:20px;"><a href="'.$detailURL.'" target="_blank"><img src="'.$image.'" align="left"></a><br>
タイトル:<a href="'.$detailURL.'" target="_blank">'.$title.'</a><br>
著者:'.$author.'<br>
価格:'.$price.'<br>
URL:'.$detailURL.'</div>';
		print PHP_EOL;
	}

	//1秒おく
	sleep(1);
}
?>

実際にはパラメータ部分をいじって自分の欲しい情報をゲットします。

上のコードの実行結果はこんな↓感じです。
XML取得結果

以前は価格が出なかったのですが、さすがに修正したようですね。

相変わらず著者名の入り方が一ヶ所だったり、分かれていたり、無料だと価格が空になったりしているので、そこら辺は適宜手を加えてあげてください。

アマゾン側のバグなので修正されているとは思うのですが、いまだにforeach()の部分でエラーを起こすようなら(object)を入れて回避してください。
エラーメッセージは、

Warning: Invalid argument supplied for foreach()

以前は検索結果がオブジェクト形式で入っていないことが多々あり、値が存在しない場合や、プレーンのテキストになっているとエラーを起こしていました。

「objectで取得してね(simplexml_load_string)」と言っているのに、中身がそうでないからエラーになるという。。。

その場合は該当箇所を強制的にオブジェクトにしてしまえば回避できます。

foreach($amazon_xml->Items->Item as $item_a=>$item){

この部分を

foreach((object) $amazon_xml->Items->Item as $item_a=>$item){//(object) を追加

にすれば直ると思います。

もし一般向け商品を前提としているのにアダルト商品が混ざるようでしたら、下記辺りからアダルト商品を探して弾くといいです。

ItemAttributes->Format //「アダルト」の文字がないか
ItemAttributes->IsAdultProduct //アダルトなら「1」が入力されるかも

 
ちなみにKeywordsでOR検索をしたい時はPHPと同様「|」を入れます。

ワード1|ワード2|ワード3

AND検索は一応「,」で区切るらしいですが、全角スペースを入れても同様の結果になってました。

ワード1,ワード2,ワード3
ワード1 ワード2 ワード3

PHP:アマゾンAPI (AWS)で検索結果を表示 〜APIテスト実行ツールの使い方

前回の続きです。

アマゾンAPIからXMLを取得には、APIテスト実行ツールからPHPのコードをコピペして、リクエストURLを生成するのが早いです。
始める前に「-22」で終わる自分のアソシエイトIDを確認しておいてください。
それと、あらかじめ「Access Key ID」と「Secret Access Key」を取得しておく必要があります。

■アソシエイトIDの確認
アソシエイト・セントラルはこちら
※トラッキングIDで大丈夫です。

■「Access Key ID」と「Secret Access Key」の取得
AWS セキュリティ認証情報(ログインが必要)

AWS セキュリティ認証情報
Secret Access Keyを忘れたら確認することは出来ません。
「新しいアクセスキーの作成」をクリックして新たにアクセスキーを作る必要があります。
忘れるとどんどん増えていってしまうので、「Access Key ID」と「Secret Access Key」は確認だけではなくてダウンロードしておいたほうがいいです。

 
APIテスト実行ツール
(1)仮で、左メニューの「ItemSearch」をクリックしてみます。
APIテスト実行ツール
(2)「Marketplace」右枠をクリックするとプルダウンになっているので日本を選択します。
APIテスト実行ツール
URLが日本になります。

(2)「Associate Tag」右枠に「-22」で終わる自分のアソシエイトIDを入力します。
トラッキングIDでも大丈夫です。

(3)あらかじめ取得しておいた「Access Key ID」と「Secret Access Key」を入力します。

(4)「ItemSearch」は商品検索なのでキーワードに仮テキスト「進撃の巨人」と入れてみます。
APIテスト実行ツール

「+」をクリックすると、テキストボックスが現れるので「進撃の巨人」と入力します。
APIテスト実行ツール

「SearchIndex」を「All」にすると「Sortは出来ないよ」と叱られるので、Sort左の「×」をクリックしてSort枠を消去し、「Run request」ボタンをクリックします。

APIテスト実行ツール
てな感じで表示され、その下にPHPのコードも表示されるのでコピっちゃいましょう。
便利になりましたね〜、というかやっと他のAPIに近づいただけかw

で、このコードをそのままPHPファイルにコピペして実行しても長ったらしいURLが表示されるだけです。
aws_7
これが所謂リクエストURLなので、URLだけをコピーしてブラウザのURL欄に入れてみましょう。

XMLが落ちてきます(わかりにくければ右クリックしてソースを表示してみてください)。
で、次回はこのXMLから画像、商品名、価格などを取り出してみます。