Amazon アソシエイトで、商品画像だけ表示する方法

ネットサーフィン(死語?)をしていたある日、アマゾンアソシエイトにリンクしている商品画像で、ほかの余分な情報が一切なく、画像だけでリンクしているものがあった。今まで私はアマゾン・アソシエイトのサイト内にあるリンク作成の機能を使ってそこから生成される HTML のインラインフレーム (iframe) を自サイトに貼り付けていたのだが、これだとデザイン上の自由度があまりなかった。たとえば純粋に商品画像だけ表示する場合である(以下参照)。 実際に両画像をクリックして比べてみていただければわかるのだが、アソシエイトで作成した左側のデフォルトのものはアマゾンであまりなじみのないページに飛ばされる。その一方で、右側の画像をクリックすると、いつものアマゾンのページにアクセスできる。この違いは何なんだ? 右側のようにする仕様は amazon.com の、Amazon Web Services (AWS) のどこに書いてあるのか教えて欲しいくらい(AWS のサイト、まじでわかりづらいと思いませんか???→答えはここです。)なのだが、世にあるいろいろなサイトの例を見ていて、右側の方は以下のようにすればいいことがわかった。右側の方が画像が大きく表示できるので、商品画像だけを表示したい場合は以下のようにすればよいだろう。 href="https://www.amazon.co.jp/exec/obidos/ASIN/4774122955/twinklexxx-22/ref=nosim" target="_blank"> 4774122955.09.MZZZZZZZ.jpg" alt="Web+DB press (特別総集編)" border="0" width="113" height="160" /> 青字の部分が変更する部分である。ASIN とは、アマゾンが独自に割り振っている商品コードのことで、上の例でいうと赤字の 4774122955 の部分がそれにあたる。ここはそれぞれの商品ごとに変える部分である。 その他、twinklexxx-22 の部分は、自分のアソシエイト ID に変更して欲しい。 ちなみに、 が、より一般化された URL ということになるだろう。最後に ref=nosim とすると、紹介料率が 3% から 5% にアップするらしい。
ネットサーフィン(死語?)をしていたある日、アマゾンアソシエイトにリンクしている商品画像で、ほかの余分な情報が一切なく、画像だけでリンクしているものがあった。今まで私はアマゾン・アソシエイトのサイト内にあるリンク作成の機能を使ってそこから生成される HTML のインラインフレーム (iframe) を自サイトに貼り付けていたのだが、これだとデザイン上の自由度があまりなかった。たとえば純粋に商品画像だけ表示する場合である(以下参照)。 実際に両画像をクリックして比べてみていただければわかるのだが、アソシエイトで作成した左側のデフォルトのものはアマゾンであまりなじみのないページに飛ばされる。その一方で、右側の画像をクリックすると、いつものアマゾンのページにアクセスできる。この違いは何なんだ? 右側のようにする仕様は amazon.com の、Amazon Web Services (AWS) のどこに書いてあるのか教えて欲しいくらい(AWS のサイト、まじでわかりづらいと思いませんか???→答えはここです。)なのだが、世にあるいろいろなサイトの例を見ていて、右側の方は以下のようにすればいいことがわかった。右側の方が画像が大きく表示できるので、商品画像だけを表示したい場合は以下のようにすればよいだろう。 href="https://www.amazon.co.jp/exec/obidos/ASIN/4774122955/twinklexxx-22/ref=nosim" target="_blank"> 4774122955.09.MZZZZZZZ.jpg" alt="Web+DB press (特別総集編)" border="0" width="113" height="160" /> 青字の部分が変更する部分である。ASIN とは、アマゾンが独自に割り振っている商品コードのことで、上の例でいうと赤字の 4774122955 の部分がそれにあたる。ここはそれぞれの商品ごとに変える部分である。 その他、twinklexxx-22 の部分は、自分のアソシエイト ID に変更して欲しい。 ちなみに、 が、より一般化された URL ということになるだろう。最後に ref=nosim とすると、紹介料率が 3% から 5% にアップするらしい。

RSS で Favicon を表示させる方法

RSS 1.0 (index.rdf など) の場合は、以下の行を RSS のテンプレートに追加すればよい。
<image:favicon rdf:about="Favicon までのパス/favicon.ico" image:size="small">
<dc:title>HP のタイトル</dc:title>
</image:favicon>
または、Movable Type 3.2 以上であれば、Atom (atom.xml) や RSS 2.0 (index.xml) のテンプレートの最初の方に、
<link rel="icon" href="<$MTBlogHost$><$MTBlogRelativeURL$>favicon.ico"
type="image/x-icon" />
<link rel="shortcut icon" href="<$MTBlogHost$><$MTBlogRelativeURL$>favicon.ico"
type="image/x-icon" />
の 2つのタグを追加してもよい。
RSS 1.0 (index.rdf など) の場合は、以下の行を RSS のテンプレートに追加すればよい。
<image:favicon rdf:about="Favicon までのパス/favicon.ico" image:size="small">
<dc:title>HP のタイトル</dc:title>
</image:favicon>
または、Movable Type 3.2 以上であれば、Atom (atom.xml) や RSS 2.0 (index.xml) のテンプレートの最初の方に、
<link rel="icon" href="<$MTBlogHost$><$MTBlogRelativeURL$>favicon.ico"
type="image/x-icon" />
<link rel="shortcut icon" href="<$MTBlogHost$><$MTBlogRelativeURL$>favicon.ico"
type="image/x-icon" />
の 2つのタグを追加してもよい。

Movable Type で、Google の SEO 対策をする。

このサイトはほとんどは Google の検索結果をたどって来る方が多い。ここでは、このサイトで実際に施している SEO 対策を紹介しよう。最初に断っておくが、SEO といっても、対象となる検索エンジンは Google オンリーである。
  1. 3日おきに定期的に更新を目標。 本来なら 「1日ごとに更新」 とした方が格好がいいに決まっているが、どんなに技術に詳しい人でもそんなにたくさん Tips が次から次に書けるわけでもないのは最初から目に見えている。毎日更新するためには Tips を 1年で 365個用意しなければならないことを考えてみて欲しい。それを職業にするなら別の話だが、私の場合は自分の無理のない範囲で最大限の目標値とした。この目標は今のところ守っている。それが守れているのは、その日に公開するエントリーをその日に書いて公開するような自転車操業的なものではなく、ある程度エントリーを書き溜めておいて、Movable Type の 「投稿日」 - 「指定日」 として公開されるようにスケジューリングしているからだと思う。この方法は SEO 対策というよりは、モチベーションを維持する上で自分にとってはうまくいっている。 Google が一番好むのは良質なサイトから多数のリンクが貼られている(自サイトから貼っているではない)サイトだ。これはブログのエントリーの内容の質を高めることでリンクの数の増やすことができるだろうが、多数の一般サイトからリンクが貼られていればいいというわけでもなく、おそらく Yahoo! から 1つリンクが貼られるだけでそのサイトの価値が高まるだろう。自分の希望通りに価値の高いサイトにリンクが貼ってもらえるとは限らず、こればかりは粛々と良質なエントリーを書いて自サイトの価値を高めるしかない。本当に価値のあるサイトなら向こうからリンクを貼らせて欲しいと依頼やトラックバックが来るだろう。 では自分にできることは他にはないのだろうか?それは、コツコツ更新することであろう。このサイトはある時点から、エントリーが 100 になるまでは 3日 1回更新することに決めた。今はこのペースを守っている。実際には Google がそれを評価してくれているのかはわからないが、Google の出している特許を読む限りは、放置されているサイトよりは頻繁に更新するサイトの方が評価されるのは確かだろう。
  2. コンテンツを増やす。 上の 「100 エントリーまでは 3日置きに更新」 と関係するのだが、このサイトは Tips のサイトであるし、もともとウェブサイトはコンテンツが豊富な方が優良なサイトである。Google のサイトにもそう書いてある。従って 100 の Tips 以上にすることを目指した。
  3. サブドメインでアクセスできるようにした。 当初、このサイトの URL は https://twinkle.cc/perltips/ であったが、https://perltips.twinkle.cc/ に変えた。Google は、ディレクトリが 1 階層深くなるごとにそのページを重要でないとみなしていくからである。また、ドメイン名(この場合はサブドメイン名)が perltips... で始まり、サブドメイン名に perl という重要なキーワードが含まれているため、これも検索キーワードとして重要なポジションになっていると思う。
  4. ディレクト名にキーワードを含めた。 [続きを読む]
  5. デフォルトのエントリー・ファイル名は使わない。 個々のエントリーのパーマリンク (Permalink) の名前は必ず自分で考えてつける。Google は URL に含まれる文字列(英単語)もキーワードとして考える。Movable Type は、タイトルに含まれる英数字を拾って自動的にエントリー・ファイル名をつけるが、タイトルがすべて日本語だったりすると 「post」 「post_2」 などという、そっけないファイル名をつけてしまう。このサイトは技術的内容を扱うので、例えタイトルが日本語オンリーであっても、できれば検索されやすい英単語を含めたエントリー・ファイル名をつけるようにしている。 このエントリーの URL は 「https://perltips.twinkle.cc/movable_type/seo.php」 であるはずだ。URL の中に perl ・tips・movable_type・seo というキーワードが含まれていることに注目して欲しい(徹底的に気合を入れるなら、まずはドメイン名を考えるべきだ)。実際 Google で検索してこれらのキーワードがヒットした部分は、Google によって太字にされているはずだ。
  6. Google Sitemap に対応させる。 [続きを読む]
  7. 無駄なディレクトリ(archives)は省いた。 Movable Type では、デフォルトの 「アーカイブ」 の場所は archives というディレクトリになっている。しかし Google は長い URL を好まない。archives なるディレクトリを作る目的は、強いていえばサイト運営者がバックアップを取るときに管理しやすいとか、その程度のものであろう。一方、サイトに訪れる人たちは archives というディレクトリがあったとしてもそれは何の意味も成し得ない。このような理由から、archives というディレクトリは省略して、相対パスのルートにアーカイブファイルも置いてしまおう。どうせカテゴリ別にディレクトリが作成されるのだから、archives のディレクトリがある積極的な理由はみつからない。
  8. 個々のエントリーのタイトルは タグにした。 Google は、見出しダグの 、 、 …で囲まれている文字列を、重要なキーワードとして重み付けする。その法則に従って、このブログの見出しもテンプレートの中ですべて にした。Movable Type のデフォルトのテンプレートの見出しは < h3> タグである。見出しの重み付けなど、あくまでもページ内の相対的なものでしかないような気がするので、この方法が有効なのかは実はよくわからない。
  9. タイトルは 「×××で、」 という形で(例えばこのエントリーなら「Movable Type で、Google の SEO 対策をする。」)、重要なキーワードを含めるようにした。 エントリーのタイトルが h1 タグならば、ここには重要なキーワードが当然入らないと意味がないわけで、そのためにタイトルにはカテゴリを表すキーワードを入れた。たとえばこのエントリーであれば、「Movable Type で、…」 といった書き出しである(特にこのエントリーの内容の場合は Movable Type でなくてもいいのだが、そういうことである)。
  10. できるだけ指示語を使わないでエントリーを書く。 Google はエントリー中のキーワードを拾う。エントリー中にはそのテーマに関連するキーワードが多ければ多いほど Google はそのエントリーの言いたいことを解釈するという。このことからつまり Google は指示語が苦手なのではという推測が成り立つ。文章をスムーズにするために 「こそあど言葉」 があるのだが、これだとせっかくの キーワードを指示語で置き換えてしまうことになってしまう。従って指示語はなるべく使わず、多少エントリーの文章がしつこくなっても指示語が指す言葉をあえて使うようにしている。
  11. AdSense だけでなくアマゾンのアフィリエイトも貼った。 Google はそのサイトが表示している広告の質も判断しているらしい。良質なスポンサーと見なすのだろう。そうすると当然 AdSense は貼るべきだが、それは何も考えずに別の実験としてすでにこのサイトには貼ってあった。しかし「広告の質も判断する」 と聞いてアマゾンのアフィリエイトも貼った次第である。ちなみに、このサイトで紹介している Perl の参考書で、実際にクリックして買った方がいたのには驚いた(いやはや、まったく期待していなかったものですから)。アマゾン恐るべし。
  12. ルートディレクトリに robots.txt を置いた。 Google Sitemap を使っていると、「robots.txt にアクセスできなかった」 といちいちエラーを返す。 仕方がないので以下の内容で robots.txt をルートディレクトリに置いた。 User-Agent: * Disallow: /images/
  13. サイト内のリンクを増やした。 Google の SEO で肝となるのは優良サイトからのリンクだ。これは外部からのリンクだが、内部でのリンクもポイントになるという。このサイトでも(というか Movable Type のデフォルトのテンプレートだが)ページの最初のタイトル 「Perl Tips」 をクリックすればどのページからでもトップページに戻れるようになっているが、これは Google にとってはトップページが重要となることを意味する。従って一見マスターベーションのような気もするが、内部のリンクも増やした方がよいだろう。 内部のリンクとはすなわち、エントリーを書いたら関連しそうな過去のエントリーに対してトラックバックを送るということに他ならない。もちろん、外部のサイトで関連しそうな内容のブログのエントリーがあったらトラックバックを送ると、自動的にそのサイトに自分のサイトへのリンクが貼られるわけだから、これも積極的に行った方がよいだろう。しかしこの方法は時間と手間がかかるので、まずは内部のリンクを増やすことから始めてはどうだろうか、ということだ。
このサイトはほとんどは Google の検索結果をたどって来る方が多い。ここでは、このサイトで実際に施している SEO 対策を紹介しよう。最初に断っておくが、SEO といっても、対象となる検索エンジンは Google オンリーである。
  1. 3日おきに定期的に更新を目標。 本来なら 「1日ごとに更新」 とした方が格好がいいに決まっているが、どんなに技術に詳しい人でもそんなにたくさん Tips が次から次に書けるわけでもないのは最初から目に見えている。毎日更新するためには Tips を 1年で 365個用意しなければならないことを考えてみて欲しい。それを職業にするなら別の話だが、私の場合は自分の無理のない範囲で最大限の目標値とした。この目標は今のところ守っている。それが守れているのは、その日に公開するエントリーをその日に書いて公開するような自転車操業的なものではなく、ある程度エントリーを書き溜めておいて、Movable Type の 「投稿日」 - 「指定日」 として公開されるようにスケジューリングしているからだと思う。この方法は SEO 対策というよりは、モチベーションを維持する上で自分にとってはうまくいっている。 Google が一番好むのは良質なサイトから多数のリンクが貼られている(自サイトから貼っているではない)サイトだ。これはブログのエントリーの内容の質を高めることでリンクの数の増やすことができるだろうが、多数の一般サイトからリンクが貼られていればいいというわけでもなく、おそらく Yahoo! から 1つリンクが貼られるだけでそのサイトの価値が高まるだろう。自分の希望通りに価値の高いサイトにリンクが貼ってもらえるとは限らず、こればかりは粛々と良質なエントリーを書いて自サイトの価値を高めるしかない。本当に価値のあるサイトなら向こうからリンクを貼らせて欲しいと依頼やトラックバックが来るだろう。 では自分にできることは他にはないのだろうか?それは、コツコツ更新することであろう。このサイトはある時点から、エントリーが 100 になるまでは 3日 1回更新することに決めた。今はこのペースを守っている。実際には Google がそれを評価してくれているのかはわからないが、Google の出している特許を読む限りは、放置されているサイトよりは頻繁に更新するサイトの方が評価されるのは確かだろう。
  2. コンテンツを増やす。 上の 「100 エントリーまでは 3日置きに更新」 と関係するのだが、このサイトは Tips のサイトであるし、もともとウェブサイトはコンテンツが豊富な方が優良なサイトである。Google のサイトにもそう書いてある。従って 100 の Tips 以上にすることを目指した。
  3. サブドメインでアクセスできるようにした。 当初、このサイトの URL は https://twinkle.cc/perltips/ であったが、https://perltips.twinkle.cc/ に変えた。Google は、ディレクトリが 1 階層深くなるごとにそのページを重要でないとみなしていくからである。また、ドメイン名(この場合はサブドメイン名)が perltips... で始まり、サブドメイン名に perl という重要なキーワードが含まれているため、これも検索キーワードとして重要なポジションになっていると思う。
  4. ディレクト名にキーワードを含めた。 [続きを読む]
  5. デフォルトのエントリー・ファイル名は使わない。 個々のエントリーのパーマリンク (Permalink) の名前は必ず自分で考えてつける。Google は URL に含まれる文字列(英単語)もキーワードとして考える。Movable Type は、タイトルに含まれる英数字を拾って自動的にエントリー・ファイル名をつけるが、タイトルがすべて日本語だったりすると 「post」 「post_2」 などという、そっけないファイル名をつけてしまう。このサイトは技術的内容を扱うので、例えタイトルが日本語オンリーであっても、できれば検索されやすい英単語を含めたエントリー・ファイル名をつけるようにしている。 このエントリーの URL は 「https://perltips.twinkle.cc/movable_type/seo.php」 であるはずだ。URL の中に perl ・tips・movable_type・seo というキーワードが含まれていることに注目して欲しい(徹底的に気合を入れるなら、まずはドメイン名を考えるべきだ)。実際 Google で検索してこれらのキーワードがヒットした部分は、Google によって太字にされているはずだ。
  6. Google Sitemap に対応させる。 [続きを読む]
  7. 無駄なディレクトリ(archives)は省いた。 Movable Type では、デフォルトの 「アーカイブ」 の場所は archives というディレクトリになっている。しかし Google は長い URL を好まない。archives なるディレクトリを作る目的は、強いていえばサイト運営者がバックアップを取るときに管理しやすいとか、その程度のものであろう。一方、サイトに訪れる人たちは archives というディレクトリがあったとしてもそれは何の意味も成し得ない。このような理由から、archives というディレクトリは省略して、相対パスのルートにアーカイブファイルも置いてしまおう。どうせカテゴリ別にディレクトリが作成されるのだから、archives のディレクトリがある積極的な理由はみつからない。
  8. 個々のエントリーのタイトルは タグにした。 Google は、見出しダグの 、 、 …で囲まれている文字列を、重要なキーワードとして重み付けする。その法則に従って、このブログの見出しもテンプレートの中ですべて にした。Movable Type のデフォルトのテンプレートの見出しは < h3> タグである。見出しの重み付けなど、あくまでもページ内の相対的なものでしかないような気がするので、この方法が有効なのかは実はよくわからない。
  9. タイトルは 「×××で、」 という形で(例えばこのエントリーなら「Movable Type で、Google の SEO 対策をする。」)、重要なキーワードを含めるようにした。 エントリーのタイトルが h1 タグならば、ここには重要なキーワードが当然入らないと意味がないわけで、そのためにタイトルにはカテゴリを表すキーワードを入れた。たとえばこのエントリーであれば、「Movable Type で、…」 といった書き出しである(特にこのエントリーの内容の場合は Movable Type でなくてもいいのだが、そういうことである)。
  10. できるだけ指示語を使わないでエントリーを書く。 Google はエントリー中のキーワードを拾う。エントリー中にはそのテーマに関連するキーワードが多ければ多いほど Google はそのエントリーの言いたいことを解釈するという。このことからつまり Google は指示語が苦手なのではという推測が成り立つ。文章をスムーズにするために 「こそあど言葉」 があるのだが、これだとせっかくの キーワードを指示語で置き換えてしまうことになってしまう。従って指示語はなるべく使わず、多少エントリーの文章がしつこくなっても指示語が指す言葉をあえて使うようにしている。
  11. AdSense だけでなくアマゾンのアフィリエイトも貼った。 Google はそのサイトが表示している広告の質も判断しているらしい。良質なスポンサーと見なすのだろう。そうすると当然 AdSense は貼るべきだが、それは何も考えずに別の実験としてすでにこのサイトには貼ってあった。しかし「広告の質も判断する」 と聞いてアマゾンのアフィリエイトも貼った次第である。ちなみに、このサイトで紹介している Perl の参考書で、実際にクリックして買った方がいたのには驚いた(いやはや、まったく期待していなかったものですから)。アマゾン恐るべし。
  12. ルートディレクトリに robots.txt を置いた。 Google Sitemap を使っていると、「robots.txt にアクセスできなかった」 といちいちエラーを返す。 仕方がないので以下の内容で robots.txt をルートディレクトリに置いた。 User-Agent: * Disallow: /images/
  13. サイト内のリンクを増やした。 Google の SEO で肝となるのは優良サイトからのリンクだ。これは外部からのリンクだが、内部でのリンクもポイントになるという。このサイトでも(というか Movable Type のデフォルトのテンプレートだが)ページの最初のタイトル 「Perl Tips」 をクリックすればどのページからでもトップページに戻れるようになっているが、これは Google にとってはトップページが重要となることを意味する。従って一見マスターベーションのような気もするが、内部のリンクも増やした方がよいだろう。 内部のリンクとはすなわち、エントリーを書いたら関連しそうな過去のエントリーに対してトラックバックを送るということに他ならない。もちろん、外部のサイトで関連しそうな内容のブログのエントリーがあったらトラックバックを送ると、自動的にそのサイトに自分のサイトへのリンクが貼られるわけだから、これも積極的に行った方がよいだろう。しかしこの方法は時間と手間がかかるので、まずは内部のリンクを増やすことから始めてはどうだろうか、ということだ。

MySQL で、重複レコードを抽出する方法

MySQL (まぁ、単なる SQL)で、データベース中の重複レコードを除いて検索するには distinct を使うのが定石だが、その逆に重複レコードのみ抽出・取得したい場合はどのようにしたらよいのだろう?結論は、以下のようにすればよい。
select * from テーブルA
where 列A in
(select 列A from テーブルA group by 列A
having count(*) > 1);
MySQL (まぁ、単なる SQL)で、データベース中の重複レコードを除いて検索するには distinct を使うのが定石だが、その逆に重複レコードのみ抽出・取得したい場合はどのようにしたらよいのだろう?結論は、以下のようにすればよい。
select * from テーブルA
where 列A in
(select 列A from テーブルA group by 列A
having count(*) > 1);