cloudControllっていうところ(Google App EngineみたいなPlatform as a Service)のアカウントを取ってみました。PHPやらMySQLやらが使えるので、無料枠でどこまで使えるものか、試しにWordPressをインストールしてみました。
ちょっと機能の豊富なブログが欲しいと思っていたのでぴったりですね。ドメイン長くてアレですが。
まだ新しいサービスなのでちゃんと使えるかどうか様子を見ながらですが、気に入ったらここのブログの引越しも考えてみます。
伺かゴースト更新記録
cloudControllっていうところ(Google App EngineみたいなPlatform as a Service)のアカウントを取ってみました。PHPやらMySQLやらが使えるので、無料枠でどこまで使えるものか、試しにWordPressをインストールしてみました。
ちょっと機能の豊富なブログが欲しいと思っていたのでぴったりですね。ドメイン長くてアレですが。
まだ新しいサービスなのでちゃんと使えるかどうか様子を見ながらですが、気に入ったらここのブログの引越しも考えてみます。
2011年東北地方太平洋沖地震を受けて、伺か関係者の安否情報を扱うWikiのページが開設されました。
今までに伺かに携わった経験を問われて否定できない人は、安否情報に自分が無事である旨を書きこんでおきましょう。
あなたの無事を知らない人を不必要に不安がらせる可能性はとりあえず無くしましょう。
昨日うにゅう@もどき板ゴースト製作上の質問スレでドウメキの不具合相談がありまして、問題は解決したのですが、特定の現象の解決法そのものよりも、その解決に至るプロセスの方が多くの人にとって価値があると考えたため、その過程を思い出しながらまとめてみました。
不具合の原因の特定に至る時間の節約に役立てれば幸いです。
※SSP固有の機能を利用した部分に【!】マークを付けています。
これを起動して開発パレットのスクリプト入力から、
\h\i[79]\e
というスクリプトをおくると40秒ほどでアニメーションが止まってしまいます。
※SSPはSHIORIイベントを投げて返ってきたSakuraScriptを再生するだけの装置である
※SSPが勝手に判断してゴーストを制御することは(原則として)ない
機能>スクリプトログ
機能>開発用パレット>「SHORIログを取る」にチェック
=====send=====
GET SHIORI/3.0
ID: OnTranslate
Charset: Shift_JIS
Sender: SSP
SecurityLevel: local
Reference0: \h\i[79]\e\e
=====response=====
SHIORI/3.0 204 No Content
Charset: Shift_JIS
...(略)
=====send=====
GET SHIORI/3.0
Charset: Shift_JIS
Sender: SSP
SecurityLevel: local
ID: OnSurfaceRestore
Reference0: 0
Reference1: 10
=====response=====
SHIORI/3.0 200 OK
Value: \0\s[0]\1\s[10]\e
Charset: Shift_JIS
里々がOnSurfaceRestoreで"\0\s[0]\1\s[10]\e"を返していることが原因だった
OnSurfaceRestoreで何も返さない(204 No Contentを返す)ようにすれば直るはず
*OnSurfaceRestore
$今回は喋らない【タブ】有効
【!】でマークした部分を駆使すれば、今まで闇雲にバグ潰しにかけていた時間がかなり節約できるかもしれません。
何よりも今回は90%解決済の状態で報告が上がっていたので解決は容易でした(要点を得ない、再現しないものは解決不能)。再現のため単純化したNARを添付するのは再現性を確実にする上、原因の絞り込みを容易にするための模範的なレポートだと思います(自分一人でデバッグする際も大事なことです)。ということで勝手にご紹介させて頂きました。
URLの末尾に?マークに続いてクエリ文字列が付加されたものを目にする機会も多いことと思います。サイト内検索結果だったり、ページングなどに利用されたりする場合があるわけですが、基本的に独立したページとして検索エンジンには認識されます。
SiReFaSoでもページングなどに利用しているのですが、ちょっと好ましくない状況を目にしました。
下のリンクは /?page=1 というURLで独立したページとしてインデックスされてしまっています。これはTOPページと同じ内容であり、並べて表示してもらっても困ります。
こういった状況を修正するには301リダイレクトが王道であり、検索結果を改善することが可能です。
ところで、重複コンテンツといえばそうなんだけど、ちょっとだけ違う、そんなクエリ結果もあると思います。印刷用ページであるとか、テーマの色が違うとか、ソート順が違うとか。こういったケースでは301リダイレクトは使えません。検索クローラだけでなく閲覧者までリダイレクトしてしまっては別ページを用意した意味がありません。でも別ページとしてインデックスされたくない、そんなケースもあると思います。
そんな状況のために考案されたのがrel="canonical"属性です。詳細はGoogleの解説サイトが参考になります。これによって重複するコンテンツの元となるページを検索エンジンに教えることができます。
というわけで、 /?page=1 の時はTOPページをcanonicalページとして指定するよう変更してみました。クエリ結果としては正当なものですし、リダイレクトは適切ではないな、という判断です。効果が反映されるまでは時間がかかるかもしれないのでしばらく様子を見てみることにします。
主要な検索エンジンがサポートすることを発表したのがおよそ2年くらい前のようです。まだ歴史が浅いんですね。なので利用されている例もまだ多くなく、効果の程も未知数で、今後ガイドラインの変更などもあり得るかもしれません。過大な期待はしないほうがよさそうです。
/?page=2 で前のページと次のページへのリンクを表示していたのですが、単純に1引いた数を指定していたため、 /?page=1 がインデックスされてしまったのでした。現在は1ページの時だけクエリを省くよう修正済です。サイトのURL初期設計って大事ですね。
HTTPリクエストという言葉を聞いたことがある方も多いと思います。Webサーバーに対して「ファイルくれ」と要求する行為を指します。このページを見ているみなさまがお使いのWebブラウザーも「HTMLくれ」とウチのサーバーにリクエストし、返されたHTMLを適切にレンダリングして表示しているわけです。この時サーバーからは 200 OK(もしくは304 Not Modified)というステータスコードが返されています。わかりやすくいうと「お持ちいたしました、ご主人さま。」という意味です。
200以外にもステータスコードはたくさんあります。メジャーなものを以下に列挙します。
200,204,400あたりはSHIORI/3.0やSSTPのプロトコルでも利用されています。SSTPはHTTPを模して作られた仕様なので当然ですね。
ファイルが存在しない場合は 404 Not Found を返すのがインターネットのルールなわけですが、 200 OK を返しつつ「ファイルが存在しません」と書かれたHTMLを返す行儀の悪いサーバーを最近3つも見つけたので憤りを禁じえずこんな記事を書いてみました。
「サーバーの中の人が設定を間違えたから」ではないです。レンタルサーバー屋さんたちが示し合わせたようにそろって間違えるはずがありません。理由は他にあります。
調べ物をしているときに、「はてなキーワード」が検索で引っかかることを経験したことがある人も多いのではないでしょうか。そしてページに飛んでみると「このキーワードはまだ作成されておりません」みたいなことが書かれていて大いに不評を買った時期があります。検索エンジンは200 OKが返されたページはインデックスし、404 Not Foundが返されたページはインデックスを削除する、というよく考えれば当たり前な挙動をします。「まだ作成されていない」のに200 OKを返していたためにインデックスされ、しかもはてなはSEO術に長けているため上位表示を獲得し、Spammyな状態を作り出してしまったわけです。
私が想像するに、内部の状態を無視して200 OKを返しまくるサーバーは、検索エンジンにインデックスされること(かつ削除されないこと)を目的としているのだと思います。 そしてクリックすると「ファイルが存在しません」の周囲に表示される大きな広告画像の数々。これが真の目的であると推察します。言うなればWorld Wide Webに対するスパム行為です。ビジネスモデルを考慮するとそうしたくなる気持ちもわからなくはないですが…。
逆に検索エンジンにインデックスされたくない場合は200 OK以外のステータスコードを返しましょう。「現在メンテナンス中です」とHTMLで表示する場合は、併せてステータスコードを503 Service Unavailableにしておきます(.htaccessが使える場合ですが)。 こうすると検索エンジンはそのページの最新の状態を更新することをしません。「現在メンテナンス中です」というタイトルがインデックスされ検索結果に表示されたはずかしい状態のサイトを時々見かけますが、このようなことを防止できます。
ということで、普段ブラウジングしているときに意識はしませんが、ページのステータスコードは大事だよ!というお話でした。
先日.htaccessでアクセスコントロールという記事を書いたわけですが、今日は逆に検索クローラを丁寧におもてなしするためのrobots.txtの活用法を、実際にSiReFaSoで試してみたのでその結果と共にご紹介してみようと思います。
要するに検索エンジン最適化(Search Engine Optimization)ですが、あやしい方法では無いのでご安心を。「伺か」と言えば「広める条項」(cf.「広める」条項 - さとーのweb日記)で有名ですが、自分のゴーストを広めたい場合に知っておいて損はない知識であると思います。
sitemaps.org - ホームより引用します。
サイトマップを使うと、ウェブマスターはサイト内のクロールされるページを検索エンジンに簡単に知らせることができます。
サイト内のコンテンツ全てにアクセスできるようにリンクが適切に張られている場合は必要ないですが、目的のページまで何回もクリックしないと辿り着けないような場合はGoogleさんも大変です。SiReFaSoの場合はもっと深刻で、500以上のコンテンツが存在するにも関わらず数十ページも先を読みに行かないと辿り着けません。
そんなサイトが検索クローラに対してクロールして欲しいURLを提示出来る仕組みがサイトマップです。書き方は上述のサイトをご参考頂くことにして、私が書いてみた例を晒してみます。
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://sirefaso.appspot.com/</loc>
<lastmod>2011-01-21T20:10:51+09:00</lastmod>
<changefreq>hourly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>http://sirefaso.appspot.com/ghost/</loc>
<priority>0.6</priority>
</url>
<!-- 中略 -->
<url>
<loc>http://sirefaso.appspot.com/ghost/Nikola_Tesla/</loc>
</url>
</urlset>
実際は動的に出力しています。500件も書きだすと負荷が掛かるので工夫が必要です。
そして、このファイルのURL自体を検索クローラに知らせる必要があるわけですが、そのために使われるのがrobots.txtなのです。アクセス拒否の意思表示の役割だけではないんですね。
今更ですが、一応参考リンクを張っておきます。
アクセス制限に関する仕様がまとめられていますが、サイトマップのURLを知らせる場合は以下のような感じで記述します。何処に書いてもOKでUser-agent指定は無視されます。
Sitemap: http://www.example.com/your_sitemap.xml
今日の01:00頃にサイトマップを設置して8時間後くらいからのログを見ていますが、Googlebotさんが一時間毎くらいの頻度でアクセスしているのが確認できます。全てインデックスされるまでには時間がかかるだろうと思っていますが、さっき何気にサイト名でぐぐったら以下のような変化が見られました。
サイトリンクと呼ばれる赤で囲まれた部分が現れています。ブランド名とかでぐぐると企業のサイトのナビゲーションリンクと共に表示されるアレです。クリック率が上がるというので業者さんが出し方を研究しているくらいのレアなアレが出てる…( ゚д゚)
ということで、サイトマップの効果かどうかはわかりませんが、伺かのユーザさんを自分のサイトに迷うこと無く誘導できるようなサイトの構造なりデザインなりの改善を検討されている方は、検索ロボットに対してもフレンドリーな設計を意識してみてはいかがでしょうか、というお話でした。
他にもテクニック的なものは聞きかじった教養程度に心得ているつもりで、SiReFaSoにも実践していたりします。
いわゆる<title>タグですね。そのサイトの特徴を表し、検索での来訪者がひと目でどんなサイトかわかるものが望ましいです。このサイトがダメな例ですね。SiReFaSoはその反省を踏まえて「伺か」というキーワードを加えました。可能であればURLにもキーワードが含まれると良いですが、日本語圏では難しいです。Wikiなどはこの点強いですがURLが長いので今度はユーザフレンドリーではありません。
最近は記事のタイトルにしれふぁその文字を意識的に含めないようにしていますが、ノイジーになるのを防ぐための検索避けです。最近はしれふぁそでぐぐると深瀬さんのブログが上位表示されますね。それくらい強力です。
上記に例示したものは内的SEOと呼ばれます。Webのルールを良く理解して来訪者(機械を含む)に優しいサイト作りを心掛ければいずれも自然とそうなるべきものです。
内的に対し外的SEOというものもあります。いわゆる被リンクの獲得ですね。アンカーテキストにキーワードを含めてもらうと良いとか、ページランクのアルゴリズムとか、興味はありますがあまり深入りしない方がいいかなと思っています。
最後に一つ、リンクを張りたいけど検索エンジンにはリンクとみなして欲しくない場合のオプションをご紹介します。
<a href="http://example.com/" rel="nofollow">example.com</a>
ソーシャルサイトではリンクを張りまくるスパムへの対策として、 rel="nofollow" 属性を付加して被リンク獲得行為を無効化するのが一般的となっています。気になる人はTwitterなどのソーシャルサイトのHTMLソースを見てみましょう(はてなブックマークは付けてないそうですけど)。
なんだか余談のほうが長くなってしまいましたが、何よりも大事なのは来訪者にとって魅力的なコンテンツを充実させることです。伺かのゴーストをより多くの人達に知ってもらうための一助になれば幸いです。
iPhoneではマウスオーバーが使えないのでSiReFaSoでゴーストの立ち絵が見れません。でも全部表示したら邪魔そうです。それでもどうしても見たいので、個別URLでは見れるようにしました。
HTMLは共通で利用したいし、JavaScriptは使いたくない。CSSだけでトップと個別URLで表示のON/OFFを切り替えるために、要素が一つだけの時に適用するCSS疑似クラスを覚えたのでメモしておきます。
div:only-child {}
div:only-of-type {}
only-childは自身が親要素に対して唯一の子要素である場合、only-of-typeは自身と同一の要素が兄弟要素にいない場合です。
SafariはCSS3使い放題で良いですね。これで個別URLの他に、検索で一件だけヒットした場合も適用されます。あとはブラウザでゴーストが動作すれば完璧ですね。
SiReFaSoの仕様を駄デベWikiにまとめました。robots.txtが設置できない場合の意思表示方法にinstall.txtを使うことにしました。今後仕様に変更があったらこちらに追記していこうと思います。
Don/SiReFaSoの仕様 - 駄でべろぱの小ネタWiki
アクセス拒否とか削除とかいう機能ばかり追加しているのも悲しいので、もっと楽しいことをやろうと思います。
適用するCSSを切り替えてiPhoneでも見やすくしてみました。外出先でもゴーストの更新をチェック!…する必要があるかどうかはわかりませんが、とりあえずCSS書くのは楽しいですね。