「Google Public DNS」でプロバイダーのDNS障害に対処

OCNで通信障害 – 22時49分から断続的に通信しづらい状態

2013年8月23日発生

マイナビニュース 8月24日(土)0時5分配信より

NTTコミュニケーションは8月23日、同社が提供するインターネット接続サービス「OCN」で設備故障により通信障害が発生していることを発表した。発生日時は8月23日22時49分頃で、現在も断続的に通信しづらい状態になっているという。設備の故障による障害で、詳細は発表していない。

Googleの無料DNSサーバー「Google Public DNS」

うちもプロバイダーにOCNを使っていますが、確かに昨夜23:00頃から突然インターネットにアクセス出来なくなりました。ワイヤレスLANのアクセスポイントへはつながっていているのにインターネットのサイトは開けません。

そこで、アクセスポイントのDNS設定を切り替え「Google Public DNS」を使うようにしたら、接続可能になりました。今も、その状態で記事を書いています。

DNS(ネームサーバー) プライマリの接続先を「8.8.8.8」へ
DNS(ネームサーバー) セカンダリの接続先を「8.8.4.4」へ

これでOCNのDNSが壊れていても、Googleの無料DNSを使ってインターネットが出来ます。


昨夜23時53分にOCNへ電話して留守番電話に問い合わせたら、01時48分にOCNから返事の電話がかかってきて、トラブルが発生していると言われました。さすがにもう直っているかと思ったらまだみたいです。(2013年8月24日 10:30am)

余談ですが、OCNの故障サポートは夜中にかけると留守電になっていますが、メッセージを残すと、しばらくして向こうから、かけてきます。実は、自分がOCNに入会してからのトラブルはこれが初めてではなく、前回、夜中に電話しても数時間で返事が来ることを知りました。ただし、その時はトラブルが起きていることを認めつつも、朝になるまで修理に取りかかれないとの回答でした。

@pagesでアボセンスから復活できた!

今月最初の更新

2013年8月13日19:00現在、またファンブログ内のGoogle AdSenseが表示されなくなっているようです。うちはファンブログにはGoogle AdSenseは貼っていないのですが、貼っている方はご注意ください。

表示されていないのは、あなたのAdSenseが破棄された、いわゆるアボセンスではないと思われます。ファンブログ全体のAdSenseが非表示になっています。これは、fanblogs.jpドメインがアボセンスされたか、それに準じる処置を受けたのだと思われます。

ですから、あなたのAdSenseはファンブログに貼ったものは表示されなくても、他のサイトに貼ったものは表示されていると思います。しかし仮に、再び表示されるようになってもファンブログにAdSenseを貼るのはリスキーなので剥がした方がいいと思います。

@pagesでアボセンスから復活できた!

@pagesという無料のレンタルサーバーがあります。 1GBの大容量無料ホームページサービスです。

  • PHPが使える
  • CGI(Perl、ruby、python)が使える
  • Mysql,SQLiteが利用可能
  • FTPアップロード可能

このように無料で好条件です。PHPとMySQLでWordPressサイトも無料で作れます。ですが、画面下にこのように広告が出ます。ただし、最近規約が変わって、次の条件で下の広告が消えます。

PAGESにてGoogle AdSense広告が利用可能になりました! 収益割合はユーザ様が60%、弊社が40%となります。Google AdSense広告を掲載すると、掲載されたページ内では、弊社広告は表示されません!

Google AdSenseをお持ちの方は、@pagesに自分のAdSenseを貼れば、それ以外の広告が出なくなります。ただし、@pages内に貼ったAdSenseの収益の40%が自動的に@pagesのものになります。また、AdSenseをお持ちでない方は、@pages内でAdsenseを申請する事が出来ます。

それを紹介したかこが、AdSenseを申請したら審査に通りました。そのAdSenseを貼っているページがこちら。

TomのおかげでGadアカウント復活できた

復活という意味に関しては、ここでは語りませんが、今現在Google AdSenseをお持ちでない方は@pagesだと、審査が通る可能性があります。

予告
無料のレンタルサーバー@pagesを使ってWordPressをマスターしよう!
超初心者向けWordPress講座」近日公開に向けて準備中!

特定ブログの記事「簡易検索」方法

別にブログでなくてもいいのですが、特定サイトの中の記事検索方法です。

そのブログに「サイト内検索」などの検索バーがあれば、それを使えばいいのですが、探したい記事があるブログに「サイト内検索」が設置されていない時、Googleで特定サイトを指定して検索する方法です。

このブログから「hoge」という文字があるページを見つけ出す

このブログを例にして説明します。検索キーワードは「hoge」という文字です。

このブログのURL
http://fanblogs.jp/ayzfqir5/

このブログのURLは http://fanblogs.jp/ayzfqir5/ ですが、この http:// と、いちばん最後の / を除いた fanblogs.jp/ayzfqir5 を使います。

まず、Googleの検索ページを開き、そこに site: と打ち込みます。それに続けて、 fanblogs.jp/ayzfqir5 を入力します。

この時 site:fanblogs.jp/ayzfqir5 の間には何も入れません。スペースで間を開けてはいけません。

次に検索キーワードを入力しますが、こちらは site:fanblogs.jp/ayzfqir5 の後に半角スペースを入れます。

検索バーに入力する文字の完成形
site:fanblogs.jp/ayzfqir5 hoge

こうやって検索すると、このブログの中だけの「hoge」が抽出されます。

実際にGoogle検索した結果はこちらです。

キーワードは複数でもOK

複数のキーワードでも検索できます。その時は、キーワードとキーワードの間をスペースで区切ります。キーワードとキーワードの間のスペースは全角でも大丈夫です。

site:fanblogs.jp/ayzfqir5 hoge 例文」で検索した結果を表示。

Googleの画像検索の使い方 – あれぇ?コレッてパクリ画像?!

非常に正確にヒットするGoogleの画像検索

情報商材を扱っているこのブログ(2013年6月3日、ブログは削除されました)で、月収100万円以上の報酬を、明細表を画像で見せて証明している。すげーなー、こういう売り上げ出している人は世の中に、どれくらいいるんだろうと思って調べてみた。

そうしたら、ビックリ!データの月も、件数も、報酬額もまったく同じ記録を出している人がいた。しかも、同じASPらしく、明細表の画像もまったく同じに見える。世の中にはすごい偶然があるものだな。

そのブログには「これでも あなたはわたくしを疑いますか??」と書いてあるが、思いっきり疑います。そうやって情報商材を売ろうとしているわけだけど、こういうことにコロッと騙されるバカが多いので、この記事は拡散希望。

その記事を保存したWeb魚拓はこちらです。ブログの方は、本人が元の記事の画像を消したみたいだけど、消したのはパクってたからということなのかな。そしたら、この魚拓も本人申請で消すのかね。別の場所に消せない魚拓もとってあるけど。

追記:

ご本人から、画像を消した理由の説明をコメントでいただきました(1つ目のコメント2つ目のコメント)。魚拓を削除する理由はないみたいなので大丈夫そうです。

ということで、その明細金額が記録された画像を、Google画像検索で、検索してみた。

画像検索の仕方

まず、Googleの検索ページ(https://www.google.co.jp/)を開く。

開いた画面の一番上のメニューバーの左から3つ目に「画像」とあるので、クリックする。

メニューバー

画像検索のページが開くので、検索フォームの右端のカメラマークをクリックする。

画像検索

新しく開いた検索フォームに、調べたい画像のURLを入力して、「画像で検索」ボタンを押す。

画像検索

Webページにある画像のURLの調べ方

調べたい画像の上にマウスを乗せ、右クリックすると「画像URLをコピー」というような項目が出てくるので、そこにカーソルを合わせてから、左クリックすれば画像のURLがメモリーに保存されます。

メモリーに画像のURLが保存されている状態で、検索フォームの入力欄をクリック。またマウスを右クリックして、出てきた項目から「貼り付け」を選択すれば、検索窓にURLが貼り付けられます。

「画像で検索」ボタンを押すと、まったく同じ画像がある場合は、その画像が出てきます。

検索結果

今回は、出てきた結果の一番上の画像をクリックしました。

1回画面が変わった後で、もう一度画像をクリックすると、下のような項目が出ます。

ページを表示

この中の「ページを表示」をクリックすると、その画像があるページが開かれます。

Google画像検索によると、今回調べた画像と、見つかった画像はまったく同じものだったんですけど

と、いうことでまったく同じ明細表の画像が、別のサイトからも出てきてしまいました。どちらかが、パクっているのか?はたまた、どちらも名前が違うけど同じ人なのか?

ちなみに、その記事が公開されたのは、2013年05月31日(2013-05-31T14:19:02+09:00)。一方、Google画像検索で見つかった、同じ画像がある記事は、RSSのデータによると最終更新が4月1日(Mon, 1 Apr 2013 14:38:38 +0900)。画像検索された記事の方が、2ヵ月近く先に公開されている。

これでも あなたはわたくしを疑いますか??と書いてあるが、余計に信用できなくなったわ。

もし、よそのサイトで公開している明細表を使って、わたくしの月収は100万円以上です、と宣言されたら怪しすぎるだろう。そもそも、画像なんてものは作ろうと思えば作れるからな。

それでもって、わたくしのように稼ぎたければ、この商材を買いなさいという展開は、ないと思うぜ。

「あのブログ最近必死だな、売れてねーんだろうな」と思って見ていたけど、やっちゃったな。大体、あのブログの初期と最近では話に整合性がとれてねーから、まったく信用していないけど。それでも、信じてる奴がいるからすごいよ。

仮にニセモノだとしても「この明細表が証拠だ」といって見せられると信じるバカが多いから、看過出来なかった。キジも鳴かずば撃たれまいに。情報商材恐るべし!

これでも、あなたは情報商材屋を信じますか??


蓮見さんへの返信

彼の記事のアフィリエイト論的な部分の内容は、大筋としては間違っていません。

大部分の情報商材ブログが、楽して売ることだけしか考えていない中で
彼は、読者への対応も頑張っていたと思います。

ただ、彼の最近の記事を読んでいると、ものすごい焦りを感じました。
おそらく、全然売れていないのでしょう。

機会があれば、改めて彼の記事を読み返してみるといいですが、
収益に関して、彼は本当のことを書いていません。

売ろうとする側が、利益をあげていなければ、説得力がなく売れない。
儲かることを全面に出さないといけない。それが情報商材の宿命です。
その結果として、彼は今回の失敗を犯しました。

情報商材を扱っているブログは、多かれ少なかれ収益に関して
見栄を張って嘘をつかないといけません。

たいていの場合、儲けたくて情報商材を扱い始める。
つまり、最初の時点では、儲かっていないから情報商材を売り始める。
だけど、「自分はまだ儲かっていない」とは言えない。正直に言えば売れないから。
結局、情報商材を扱う者は、客を騙して嘘をつかないといけないのです。

彼は、間違いを犯しましたが、違うものを扱って、そして焦らずにやれば成功できたと思います。

Google検索から除外され回復するまでの2時間のリポート

昨日の夜書いた、このブログの記事ですが、公開後はGoogle検索に載っていたのに、今日の15:00頃、調べたら除外されていました。今はまた復活しています。

復活するまでにやったことを時系列に沿って書きますが、正直有効なデータとなり得るかはわかりません。というのは、前にやった作業が反映されないうちに、次の対応をした可能性もあり、回復した直前の作業が効いたのか、それ以前の処理が作用したのか判断つきかねるからです。もしかしたら、私がやったことは無関係で、一時的な現象だった可能性もあります。

ということで、今回は起こったこと、やったことを、時系列に沿って、書き残すだけにします。

昨夜書いた記事

昨夜書いた記事は「ミラクルフルーツはどこにある?」です。公開後、Googleにインデックスされているか確認して、検索したらちゃんと書いた記事が表示されました。

昨日のテレビで扱われたようですので、急いで記事にしたんですが、その時公開したのは目次にある4項目中の、最初の3つだけです。4項目めは今朝追加しました。

というのも、実はきのうまでミラクルフルーツというものを、私は知らなかったのです。知らなかったから面白くて記事にしたというのがあります。ところが、今朝わかったのですが、それは15年以上前にもブームになっていたようです。知らずに記事にしたものだから、冒頭は「今ミラクルフルーツというのがブームらしい!」という書き出しでした。

そして今朝、次の記事を見つけます

ミラクルフルーツ と 宇多田ヒカル

この記事、面白いです。ただ、それを読んではじめて15年以上も前にミラクルフルーツが流行っていた事を知ります。そうなると恥ずかしいのが昨夜の記事の冒頭「今ミラクルフルーツというのがブームらしい!」です。

「うげっ。やべぇ!」ということで、速攻で記事の冒頭を、そしらぬ顔して書き直しました。同時に目次の4項目めを追加して、記事の最後に「ミラクルフルーツ と 宇多田ヒカル」へのリンクと紹介を加えました。もちろん、以前ブームだった事を私が知らなかったのは内緒です。

その直後10時にファンブログのメンテナンスが始まる

「なんで定期メンテナンスを日中やるの!夜でしょ?」(普通は深夜)などということは、今回は無視します。10時から11時までがメンテナンスだったことだけ、ご記憶ください。

15時頃、昨夜の記事が検索出来ないことに気づく。

実は、この直前にひとつ記事を公開しました。それは「バンダイのスマートパンツを通販で買う! – 税込300円から」です。

昨夜と同じように、公開した新しい記事がGoogleに登録されているか確かめます。登録されていました。しかし、その時ついでに検索した昨夜の記事が出てきません。

ここまでが前置きで以下、行なった対処です。

インデックスされているかを確かめる

検索フォームに「site:fanblogs.jp ミラクルフルーツはどこにある?」と入れて検索した結果が次のキャプチャです。

site:fanblogs.jp/ayzfqir5の検索結果

本来、いちばん最初に来るはずの記事「ミラクルフルーツはどこにある?」が表示されません。

最初に出てきたファンブログ!![無料]は、このブログを書いているファンブログのトップページです。そこに記事のタイトルがあるのは、最新記事一覧がトップページにあるからで、昨夜「ミラクルフルーツはどこにある?」を公開したすぐ後でクロールされたようです。

2番目に「バンダイのスマートパンツを通販で買う! – 税込300円から」が表示されているので、このブログがインデックスから削除されたわけではないです。しかも、その「前の記事」で「ミラクルフルーツはどこにある?」と書いてある。タイトルにも問題はないようです。

次に検索フォームに、記事のURLだけを「http://fanblogs.jp/ayzfqir5/archive/716/0」と入力して検索しましたが、記事は出てきませんでした。

記事を再投稿した直後にメンテナンスがあった

記事を再投稿したときに更新Pingも送られたわけですが、その直後にメンテナンスがありました。メンテナンス中は管理画面だけでなく、ブログも閲覧出来なくなります。そのタイミングでクローラーが来たとしたら、エラーになります。

それが原因の可能性はないだろうか?そう思って、もう一度ファンブログの管理画面を開き、改めて記事を投稿しました。これで、更新Pingもまた撃たれました。

反映されるまで少し待ちます。メンテナンスが予定通りに終わっていたなら、ブログが見られなかったのは1時間だった。と、いうことで1時間待ってみます。

1時間後、やはり検索されなかった

1時間後、もう一度検索してみましたが表示されません。今度はGoogle ウエブマスターツールにログインします。

まず試しにサイトマップを再送信してみました。5分後確認しましたが、検索結果に表示されません。そこで、ダッシュボードの健全性にある「Fetch as Google」というのを試してみます。

実は「Fetch as Google」というのが、どういう機能なのかわからず、今まで使ったことがありませんでした。今回、対処法を検索しているうちに、「パシのSEOブログ」さんにある「Googleからインデックス削除された場合の確認手順」という記事を見つけました。この記事は非常に有用で大変な参考になります。

その記事中に次のように書いてあります。

Fetch as Googleでは、実際にそのURLにクローラーがアクセスできるのかという確認と、そのURLをインデックスしてもらえるようにお願いすることができます。

それならと思って試してみます。

Fetch as Google

これエラーが2つあるのは、私が間違えてURLをフルパスで入れたためです。フォームの左にトップディレクトリのURLが表示されていますが、記入するのはトップからの相対パスです。

「成功しました」が3つあります。3回作業を行ないました。

1回目は、なにも処理をせず、とにかくURLを打ち込んで、取得ボタンを押しました。その後、検索してみますが、結果に反映されません。

昨夜の状態に戻してみる

原因がわからないのだから、よかった時の状態に戻してみよう。ということで、今朝追加した部分を削除します。同時に「ミラクルフルーツ」というキーワードが、多すぎるのがいけないかもと思い、目次も削除します。

記事の最後と目次を削除して、ブログを保存。それで5分待ってから、検索しますが結果は変わりません。そこで、もう一度「Fetch as Google」を実行しますが、効果なし。

再び追記部分を戻す

検索結果に反映されないので削除した部分を元に戻します。そして、記事のソースを確認。実は私、よく隠れstrongというのをやります。つまり、下のようなソースです。

<strong style=”font-weight:normal;”>強調したい文章</strong>

これが嫌われたのだろうか?と思いながら、それを削除しようとしました。ソースをよく見ると、下のようになっています。タグが1個足りない。

開始タグの足りないソース

キャプチャ画面で見ると2行目に相当する場所ですが、本来は下のようにするつもりでした、その赤字の部分、開始タグがありません。

<strong style=”font-weight:bold;”>レモンとか酸っぱいものを口にすると甘くなっている</strong>そうだ。

これは今朝「今ミラクルフルーツというのがブームらしい!」という文から書き換えた場所です。普段はエディタで書いたものをコピーして投稿しているんですが、今朝は面倒だったので、管理パネルの狭いフォームで直接修正しました。その場所です。

そのHTMLを修正して、ブログに再投稿。ソースにエラーがあったのだから、試しにと思って、3回目の「Fetch as Google」を行ないます。

そして、すぐに検索。「Fetch as Google」を実行してから1分も経っていないのに、検索結果に現れました。

以上、時系列に沿った報告です。正直なところHTMLのミスが原因で検索されなくなったのかは、私自身、懐疑的です。参考になるのかどうかはわかりませんが、記録として残しておきます。

今回参考にさせていただいた記事:
パシのSEOブログ「Googleからインデックス削除された場合の確認手順

素晴らしい完成度☆Google日本語入力パタパタバージョン☆これを待っていた!

やるなGoogle!ビデオもよくできてる。

発表された4月1日は日本語変換IMEの歴史にとって記念的な日になるに違いない!

Google 日本語入力パタパタバージョン
4月2日になっても残っているかわからないので、早めにチェックを!

こういう直感的な入力ツールを僕は待ち望んでいたんだ!

そもそも、パソコンに詳しくない世代の人たちって、キーボードみたいに押すのが、たくさんあるとダメだと思うわけさ。Google 日本語入力パタパタバージョンみたいにボタンがひとつっていうのは、迷いがなくてイイヨネ。いかも、見やすいサイズ。アレくらい大きく表示してくれると、老眼でもOK!

だから、メインターゲットのパソコンに疎い世代のジイさん、バアさん。今すぐ、反射神経を鍛えねば!一回通りすぎちゃうと、もう一回来るまで大変だからね☆

Is "April Fool" by Google? – From International Space Station!

Google Analytics のリアルタイムを見ていたら、こんな表示が!

Is April Fool? Google Analyticsのリアルタイム 1

Is April Fool? Google Analyticsのリアルタイム 2

International Space Station – Control Room
アクティブ ユーザー数:41

これって国際宇宙ステーション – コントロールルーム?

しかも動いているし。ちなみに上のキャプチャが 14:36 で、下のキャプチャが 15:37 のものです。

Is April Fool? Google Analyticsのリアルタイム 3

宇宙からの閲覧、ありがとう!このブログも有名になったものです!

でも、アクティブユーザー数が41って何?もしや!

こうゆうことですか?グーグルさん?

アクティブユーザー数: 41  April,1

エイプリルフール万歳!
April Fool BANZAI!


こういうネタって西洋人がスキそうだから、タイトルを英文にしてみたり。このブログはソースコードを載せたりしている記事があるので、日本語圏外のブラウザからのアクセスも多少あったりするからテスト。

気づいていない、騙されました風の方がよかったのかな?でも、そうなると英文作れないし、ムリ。

Google翻訳にHentai扱いされた件

このブログを、Google翻訳にかけてみました。

検索ボックスに、このブログのURL「http://fanblogs.jp/ayzfqir5/」を入力。「元の言語」を「日本語」に、「翻訳する言語」を「英語」にして、ボタンをクリック。

翻訳中

「翻訳中…」と表示され、しばし待つ。そして、このブログが英語で表示されました。

翻訳結果

「すげーな、グーグル」と感心しながら眺めています。が、何か変です。

This is the top page of the blog. Hentai is here is.

Hentai is here.

This is the top page of the blog. Hentai is here is.

Hentaiとは何でしょう?この原文は「ここはブログのトップページです。総合トップページはこちらです。」なんですが。試しに「総合トップページ」だけを、Google翻訳で、翻訳してみます。

Hentai」と訳されました。

「総合トップページ」を翻訳したら「Hentai」に

「もしかしたら、Hentaiというのは、俺の知らない英単語だろうか?」そう思ってGoogle翻訳に「Hentai」と入力してみます。

エロアニメ」と訳されました。

「Hentai」を翻訳したら「エロアニメ」に

これも一種のイースターエッグなんでしょうか?そう思いたいです。

Googleの有名なイースターエッグ

Google検索で「一回転」と、入力すると…

Google検索で「斜め」と、入力すると…

ブログ移転で rel="canonical" は有効か?

Yahoo!JAPANの「カスタムサーチ」のページで「内容が重複する複数のURLをまとめるよう、検索エンジンに通知」という記事を見つけました。

サイトには、URLは異なるがウェブページの内容は変わらないというケースがあります。たとえば、URLがトラッキング用のパラメータを含んでいる場合や、URLに含まれるパラメータをもとに閲覧環境によってウェブページの表示を最適化しているような場合です。

  • http://www.example.com/products?trackingid=feed
  • http://www.example.com/products?sessionid=hgjkeor2
  • http://www.example.com/products?printable=yes&trackingid=footer

このような場合、検索エンジンのインデックスに個々のURLで登録されると、同じ内容のウェブページが検索結果に表示されたり、同じ内容のウェブページであるにもかかわらず、各URLにクローラーが巡回し、サーバーに負荷をかけてしまう、また、サイト内の巡回が効率的に行われないといった不都合が発生することがあります。このようなことを避けるため、サイト管理者がウェブページのなかで<link>タグを利用して、重複を避けるように検索エンジンに通知する方法が用意されています。

具体的にはヘッダに下の様に書いたとすると「このページはhttp://www.example.com/と同じ内容です」と宣言したことになるようです。

<link rel=”canonical” href=”http://www.example.com/”>

ということは、ここでひとつの疑問が出てきます。

別のドメインでもcanonicalは適用できるのだろうか?

その回答はGoogleの「rel=”canonical” 属性について – ウェブマスター ツール ヘルプ」にありました。

rel=”canonical” 属性を使用して、まったく別のドメイン上の URL を指定できるか

リダイレクトは簡単に設定できない場合があります。たとえば、サーバーサイドのリダイレクトを作成できないウェブ サーバーを使用しているときに、新しいドメイン名に移行する場合などです。このような場合には、rel=”canonical” リンク要素を使用して、このドメインでインデックス登録の対象になる正確な URL を指定できます。rel=”canonical” リンク要素は絶対的な指示ではなく、ヒントとしてみなされますが、Google では可能な限りこの要素を追跡します。

つまり、解釈が間違っていなければ「rel=”canonical” 属性」は、次のような使い方が出来るということでしょうか?

ブログやサイトを別ドメインに移転した。今までに作ったページも新しいドメインにコピーした。今後は新ドメインで運用するが、これまでの遺産として古いドメインにも記事を残しておきたい。しかし、そうすると後から作った新しいサイトがコピーサイトとして検索エンジンに低く扱われる可能性がある。

そうならないために、今までの(古い)サイトのHTMLに「rel=”canonical” 属性」でコピー済みの新しいサイトの記事を指定しておく。そうすることで検索エンジンには、新サイトを優先するよう要望する。

そうすると「Google では可能な限りこの要素を追跡」してくれるのでしょうか?実は最近、この条件に合致した移転ブログがあります。

パート派遣主婦のぐーたら子育て生活 (長いので以下「パー…」と省略表記)

「パー…」は最近、独自ドメインを取って「ココロデザイン」というサイトに移転しました。その移転の際のリポートを「技術のタマゴ」というブログに書いています。

ということで「技術のタマゴ」を開いたら、こんな記述が見つかりました。

※rel=”canonical”で重複記事の中で、新記事を一番だと主張する
 という案もありましたが、同一ドメイン間じゃないと
 使えないということで、却下になりました。

rel=”canonical”は使わなかったようです。しかしGoogleのページには、こう書いてあります。「リダイレクトを作成できないウェブ サーバーを使用しているときに、新しいドメイン名に移行する場合などです。このような場合には、rel=”canonical” リンク要素を使用して、このドメインでインデックス登録の対象になる正確な URL を指定できます

そうであるなら「同一ドメイン間じゃないと使えない」というのは間違いじゃないでしょうか?

追記:今ご覧いただいているこのブログの移転で試したところrel=”canonical”は適用されました。尚「技術のタマゴ」の記事は訂正されています。

しかし、rel=”canonical” で新サイトを指定できるとしても、ブログで実際にどうやればいいのかという問題があります。すべての記事のヘッダにrel=”canonical”属性で、新しいURLを書き込まないといけませんが、多くの無料ブログのテンプレートでは1記事ごとに違うURLを指定する事は出来ません。

記事の中に書いたら記事毎にURLを変えられるがどうだろうか、と思い調べてみたのですが「rel=canonicalタグによくある5つの間違い | 海外SEO情報ブログ」によると「間違い その5: <body>内のrel=”canonical”」という項目で次のように書いてありました。記事の中に書いても有効化されないようです。

rel=”canonical”はHTMLドキュメントの<head>セクションだけに出現しなければならない。またHTMLの読み取りの問題を避けるために<head>の先頭にできるだけ近いほうがいい。

<body>にrel=”canonical”が出てきたときは無視する。

ファンブログハックの記事から

ファンブログハックに「「タイトルタグの重複」をjavascriptで回避する(ファンブログ、FC2)」という記事があります。JavaScriptを使ってHTMLに書いてあるのと違うタイトルに書きかえたところ、Googleには書きかえたタイトルが反映されたという内容です。

実はこのブログ(移転前の旧ブログ)は今月1日に新しいスキンに変えているんですが、「site:fanblogs.jp/ayzfqir5」をググるとおもしろい結果が出ます。このブログのスキンには、タイトルにページ番号やカテゴリー名を表示させる機能がありません。なので、JavaScriptで書き加えているんですが、スキンを変えて数日で、検索結果に反映されるようになりました。ファンブログハックの記事の通りです。

赤枠内はスクリプトで追加したものですが、見事に反映されています。

検索結果にはJavaScriptで修正したタイトルが表示されている

ヘッダにrel=”canonical” 属性を追加するスクリプト

ということは、JavaScriptで、ヘッダにrel=”canonical” 属性を追加すれば、検索に反映されるのではないだろうか?つまり、新しいサイトを優先して表示してくれるのではないだろうか?と仮定できるのです。もし、それが出来るなら「パー…」にnoindexを指定する必要はなくなります。

とは言ったものの、ページ数がたくさんある時は大変です。ちなみにページが数ページしかない時には、下のようなスクリプトで実現できると思います。

実際にスクリプトを使った処理で rel=”canonical” が適用されるかは不明です。このブログの実際の移転では、この下の「新ドメイン側の.htaccessに旧URLを渡して、振り分ける」方法を使って適用に成功しました。

前提条件として、古い記事のURLはすべて「http://old_url.com/archive/xxx」というフォーマットになっているものとします。URLの中のxxxは数字です。この数字ごとに新しいURLをヘッダに書き加えます。新しいサイトでは、記事の内容ごとに違うブログに分けていたとしても大丈夫です。

<script type="text/javascript"><!--
var urls={
	"001":"http:\/\/hoge.example.com/page_001.html",
	"002":"http:\/\/moge.example.com/page_002.html",
	"003":"http:\/\/kome.example.com/page_003.html"
};

var key=window.location.href.match(/\/archive\/([0-9]+)/);

if(key){
	document.write('\<link rel="canonical" href="'+urls[key[1]]+'"\>');
}
//-->
</script>

これをheadタグの中で、なるべく上の方に書けばいいと思います。古い記事のURLがhttp://old_url.com/archive/001なら「http://hoge.example.com/page_001.html」というように、それぞれの新URLをヘッダに追記します。

しかし、記事が何百ページもあったら上のやり方では無理があります。

新ドメイン側の.htaccessに旧URLを渡して、振り分ける

大抵の無料ブログでは.htaccessは使えないし、だからこの記事のような困りごとになるわけですが、新しいサイトでは.htaccessが使えます。だから新サイトの.htaccessにパラメータを渡してリダイレクトさせればいいわけです。

旧ブログのヘッダには次のように書き加えます。スクリプトで追記したタグが有効に作用するとは断言出来ないので完全なURLを書き込むようにしました。

<link rel=”canonical” href=”http://new_domain.com/url_converter.php?old_url={記事のURLを書き出すタグ}“>

{記事のURLを書き出すタグ}はブログによって違いますが

  • ライブドアブログなら {$ArticlePermalink$}
  • FC2ブログなら <%topentry_link>

となります。

参考:
独自タグ一覧(変数) – livedoor ブログ ヘルプセンター
FC2ヘルプ | FC2ブログ | テンプレート用 変数一覧

これで古いブログのURLが「http://old_url.com/archive/001」である記事が開かれると、ヘッダの中に次のタグが書き込まれます。URLエンコードが出来ないのが心配ですが、このブログでは無事にパラメータを渡せました。

<link rel=”canonical” href=”http://new_domain.com/url_converter.php?old_url=http://old_url.com/archive/001“>

Googleなどの検索エンジンがこのタグを読んだら、新ドメインのサーバに「http://new_domain.com/url_converter.php?old_url=http://old_url.com/archive/001」を問い合わせます。新しいサーバには古いURLがパラメータで渡されるので、それを判断材料に新しいURLに誘導すれば(リダイレクトさせれば)いいわけです。

参考記事:GET送信とは?

サーバー側のリダイレクト手順

ということで、サーバー側で.htaccessを使ってリダイレクトと書きましたが、何百個もある記事を、一定のパターンに沿って書きかえるならともかく、記事ごとに違うブログに振り分けるとなると.htaccessでは大変です。こうなると、旧URLと新URLを紐付けたデータベースを作って処理する方が簡単ではないでしょうか。作るデータベースのtableはこんな仕様になると思います。

CREATE TABLE url(
	old varchar(256),
	new varchar(256)
);

このテーブルに、URL対応表を作ってから、PHP等のインタープリタでアクセスすればいいと思います。アクセスする際は「SELECT new FROM url WHERE old=’xxx’」というクエリで新URLを取れるでしょう。

PHPの場合のソースは次のようになります。

<?php
$host='localhost';
$db='detabase_name';
$user='user_name';
$pwd='password';

$old=$_GET['old_url'];

if(empty($old)){
	header('HTTP/1.1 400 Bad Request');
	return;
}

try{
	$pdo=new PDO('mysql:host='.$host.'; dbname='.$db,$user,$pwd);
	$stmt=$pdo->query('SELECT new FROM url WHERE old="'.$old.'"');
	$row=$stmt->fetch(PDO::FETCH_ASSOC);

	if($row){
		header('HTTP/1.1 301 Moved Permanently'); 
		header('Location: '.$row['new']);
	}else{
		header('HTTP/1.1 404 Not Found'); 
	}
}catch (PDOException $e){
	header('HTTP/1.1 500 Internal Server Error');
}

$pdo=null;

余談ですがPHPコードのみからなるファイルでは、終了タグは書かない方がいいようです。
Zend Framework: Documentation: PHP ファイルの書式 – Zend Framework Manualより

PHP コードのみからなるファイルでは、終了タグ (“?>”) は決して含めてはいけません。これは必須なものではなく、 終了タグを省略することで、ファイルの最後にある空白文字が出力に影響することを防ぎます。

私はHTMLとの混合PHPの場合でも、最後がPHPの場合はいつも閉じタグを書きませんが、エラーが出たことはありません。

このブログが実際に使っているスクリプト

データベースを使わない場合は、連想配列で処理します。実際にこのブログで使っているのはデータベースを使わない以下のスクリプトです。

<?php
if(empty($_GET['old_url'])||!preg_match('|/ayzfqir5/archive/(\d+)|',$_GET['old_url'],$m)){
	header('HTTP',TRUE,400);
	exit();
}

$url_table=array(
	"826" => "1264",
	"825" => "1263",
	"824" => "1262",
	(中略)
	"12" => "587",
	"9" => "586",
	"6" => "585"
);

if(empty($url_table[$m[1]])){
	header('HTTP',TRUE,404);
	exit();
}

header('Location: http://dwm.me/archives/'.$url_table[$m[1]],TRUE,301);

$url_tableの左側のキーが旧ブログのURL、右が新しいブログのURLに当たります。

古いブログのURLは http://fanblogs.jp/ayzfqir5/archive/xxx/0 という形でした。xxx の部分だけ記事毎に違う数字です。その数字部分を正規表現で抽出してキーにします。新しいこのブログのURLは http://dwm.me/archives/xxx という形ですが、古いブログとは番号が違います。それを古いブログのキーと照らし合わせて抜き出し http://dwm.me/archives/ にくっつけて、header関数で返しています。

このブログは実際の移転でこの手法を使い、rel=”canonical”を発動させる事に成功したのですが、どのような効果を発揮したかを別記事「ブログの引越しで rel="canonical" が適用されたら検索結果とアクセス数がこう変わった」にまとめました。

Google Analyticsのイベント トラッキングはaddEventListenerやattachEventでは計測されない

先日書いた記事「Google Analyticsでクリック数を計測するスクリプト」で、どこへのリンクがクリックされたのかのログをonclickイベントで拾うコードを書きました。ちゃんと動いていたんですが、Tweetボタンやmixiボタンが動作しなくなっていたので修正しました。

動かなくなった理由はonclickを上書きしていたからです。普通のaタグはonclickがnullなので、書いたコードで問題なかったんですが、Tweetボタンやmixiボタンはhref=”javascript:void(0);”でリンクを無効にして、onclickで作動していたからです。そのスクリプトを消してしまっていたから、ボタンを押しても動作しませんでした。正確に言えばボタンを押すと、違う動きになった。つまりGoogle Analytics用のデータ作成に使われるようになったということです。

そこで、addEventListener 或いは attachEventを使って、アクションを「上書き」ではなく「追加」したんですが、それではログが記録されていないことに気がつきました。

Google Analyticsのイベント トラッキングはonclickでなくては計測されない

確認するために丸一日、下のコードで置いておきました。その結果計測されたイベントはゼロです。ただ、そのコードはすでに消してしまっていたので、下のコードは記憶を元に書いています。元のソースでは_gaq.pushのところをalertに変えてテストしましたが、意図どおりに動いていました。

<script type="text/javascript">
<!--
function add_ga(elem){
	var type=(-1==elem.href.indexOf('/ayzfqir5/')&&elem.href.match(/^[^\?]*\/\//))?'Out':'In';
	_gaq.push(['_trackEvent',type+'bound Link','click',elem.href]);
};

var set_event=(function(){
	if(document.addEventListener){
		return function(elem,func){
			elem.addEventListener('click',func,false);
		};
	}

	if(document.attachEvent){
		return function(elem,func){
			elem.attachEvent('onclick',func);
		};
	}

	return null;
})();

if('function'==typeof set_event){
	var a=document.querySelectorAll('a');

	for(var i=0;i<a.length;i++){
		set_event(a[i],(function(elem){
			return function(){add_ga(elem);};
		})(a[i]));
	}
}

delete set_event;
// -->
</script>

対処として、上のコードを次のものに変更したところ、addEventListenerのfirefoxでもattachEventのIEでも計測されるようになりました。滅多に押されないところを自分でクリックして記録されているかどうかを見たのですが、偶然誰かが他のブラウザでクリックしていないのならaddEventListenerでもattachEventでも記録されているのだと思います。

<script type="text/javascript">
<!--
function add_ga(elem){
	var type=(-1==elem.href.indexOf('/ayzfqir5/')&&elem.href.match(/^[^\?]*\/\//))?'Out':'In';
	_gaq.push(['_trackEvent',type+'bound Link','click',elem.href]);
};

var set_event=(function(){
	if(document.addEventListener){
		return function(elem){
			if(null!==elem.onclick){
				elem.addEventListener('click',elem.onclick,false);
			}

			elem.onclick=function(){add_ga(elem);};
		};
	}

	if(document.attachEvent){
		return function(elem){
			if(null!==elem.onclick){
				elem.attachEvent('onclick',elem.onclick);
			}

			elem.onclick=function(){add_ga(elem);};
		};
	}

	return null;
})();

if('function'==typeof set_event){
	var a=document.querySelectorAll('a');

	for(var i=0;i<a.length;i++){
		set_event(a[i]);
	}
}

delete set_event;
// -->
</script>

元々のonclickの内容をelem.addEventListener(‘click’,elem.onclick,false);elem.attachEvent(‘onclick’,elem.onclick);という形でコピーしてから、elem.onclick=function(){add_ga(elem);};で新しいonclickに_gaq.pushする関数を上書きするという内容です。正直、これで動くか心配だったんですが、出来るんですね。

結論として、addEventListenerattachEventではダメで、onclickでなくてはイベントは計測されないようです。

ただ、検索してみるとaddEventListenerでうまくいっていると言う記事がたくさんあったのですが、他の方は動いてるんでしょうか?