昨日土曜日から nDiki を含め www.naney.org のアクセス数が激減している。 Google Analytics でみてみると先週の半分以下。 細かくみてみると Google 経由のアクセスが 3分の1になっている。
Google で検索してみると今まで上位であった検索結果がことごとくランク外に。 先週土曜日に行った検索エンジン対応のための一部ページへの robots メタタグの追加とそれらのページへのリンクへの nofollow の追加が裏目に出たらしい。
Wiki の過去のリビジョンのページや編集ページなどが予想以上にサイト全体の PageRank を下支えしていたようだ。
あわててこれらの設定を外す。
元に戻るにはまたそれなりにかかるだろう。 ショック。
[ SEO ]
DiKicker には自動リンクベースの記事串刺し表示機能があって、同じキーワードを含む記事をまとめて読むことができる。 結構便利なのだが、この機能ではキーワードの設定は Blog の書き手に委ねられている。
社内で DiKicker を一部使ってもらっているのだけれども、それら他人の Blog を読んでいると「あのキーワードで串刺し表示したいな」と思うことがしばしばあることに気がついた。 やはり任意の文字列で串刺し表示する機能が欲しい。
書き手にとっても「自動リンクキーワードにするような文字列ではないけれども、串刺しで読みたい/探したい/見せたい」と思うことが少なからずある。
実現には全文検索を行う必要があるが「設置・運用の手間」「ディスク容量」という点から、事前にインデックスを生成するような方法は今回は避けようと思う (www.naney.org 上で自分が使う上での制約からくる理由が一番大きかったりする)。
ということで今回は grep 型で実装することにした。 もともと WiKicker の方の検索機能も現在のところ grep 型である。 WiKicker では自前で WikiPage をスキャンしているが、DiKicker では grep コマンドに任せることにした。 こういうのは専用の grep を使った方が速いはず。呼び出しは
grep -Flre $escaped_string dir...
というオプション指定。Web ページとしてのページングなどは、自動リンクによる串刺し表示機能のものを流用。
で試したところ www.naney.org サーバでは、load averages が 1 以下の時でだいたい50秒前後。対象ファイル数は 2800弱。予想より時間がかかる。
ただし1回実行した後、ファイルがファイルシステム/OSのメモリ上にのっている状態では 0.1秒程度で完了する。
検索結果ページの permalink が検索エンジンにそれなりに捕捉されて、定期的にアクセスがあるようになれば、ファイルがメモリにのっている割合が増えるであろうから平均して実用に耐えられる速度が出るかもしれない。
去年の12月3日以来、約半年ぶりのリリース。 リリースしそびれて、随分変更を累積してしまった。 以下主な変更点。
前回の 0.41 に対して、今回は 0.420 とした。 浮動小数点数的には、増分 0.01 で今まで通り。
今後 version.pm が普及した時のことと、developer release を出す時のことを考えて小数点以下3桁ずつのスタイルに移行することにした (関連記事)。
2007年1月に実装。 編集ページや履歴ページが検索エンジンに登録されないようにするための機能。
2007年1月に実装。 リンク spam 対応。
2007年3月に実装。 特に DiKicker で1文字キーワードによる自動リンクを有効にするために追加した。
前述の機能で1文字での自動リンクを有効にしたら、不便な面が出た。
WiKicker / DiKicker では '/' を階層の区切り文字としても扱うことができるようになっていて、サフィックス部分だけでも自動リンクするようになっている。 自動リンクを1文字にしたら「OS/2」というキーワードに対して '2' でも自動リンクが働き、望まないリンクが張られるようになってしまった。 DiKicker では階層的キーワードは無くてもあまり困らないので、'/' の前を省略した自動リンクを無効にできるようにした。
2007年2月に実装。自分としては重宝している。
Google AdSense 挿入用。
2007年4月に実装 load average をチェックして負荷が高い時は、503 を返すようにした。
ソースコードを結構いじった。 deprecated なメソッドの削除も実施したので、0.41 以前から派生しているソフトウェアは多くの場合修正が必要。
Google Analytics から1日1回キーワードのレポートを TSV 形式でメールで配信するように設定している。 このデータをもとに「よく検索されるキーワード」を抽出して、nDiki の下の方に表示するようにした。
1日1回の作業なので、メールからスクリプトにかける部分とアップロードする部分は手動で。
そこそこの処理なので、そこそこの精度なのだけれど傾向は何となくわかる感じだ。
実際にはアクセスログの対象となっているのは nDiki 以外の www.naney.org 内のアクセスも含まれているけれどもまあいいであろう。
キーワードの処理は細かいことをいうと結構面倒だったりする。
などなど。
この辺りは精度を上げようとするといろいろ工夫の余地がって楽しそうではあるな。
foursquare の検索は日本語の処理が変なのか、それとも何かの条件でフィルタしているのかわからないけれど、ベニューが検索にひっかからないことが多い。
なので site:foursquare.com で Google 検索して探すようにしているんだけれど、結構頻繁にやるので Google Chrome の検索エンジンに追加しておいた。
ぼっち Slack チームをタイムライン型ノートにするの、やってみたら便利で重宝している。
普段から Google Chrome で Slack のページを開いておけば PC で作業中にサクっとメモできる。ただ、人に見られるのはちょっとな雑記が並んだ Slack チャネルページを開きっぱなしにしておきたくない時は気を使わなければならないのが嫌。
ということで Slack チャネルページを開かないで投稿できるようにしてみることにした。
Google Chrome はいつも開いているのでアドレスバー(オムニボックス)からさくっと投稿できるようにするのがいいかな。Google Chrome の拡張とか書いたことが無いのでとりあえずパラメータで送られてきたテキストを webhook で Slack に投稿するだけのスクリプトを Web サイトに置いてそれを呼ぶだけにしよう。
サーバ側はとりあえずレガシーだけれど CGI.pm で。Google Chrome 側は「検索エンジンの管理」で「キーワード」を「note」に、URL に「http://www.example.com/note?text=%s」みたいな感じ設定。
これでアドレスバーで
note メモしたいテキスト
と入力すれば Slack の #notebook チャネルに投稿される。
use warnings; use strict; use utf8; use Encode; use CGI; use LWP::UserAgent; use JSON; my $slack_channel = '#notebook'; my $username = 'myname'; my $webhook = 'https://hooks.slack.com/...'; my $query = CGI->new; my $text = $query->param('text'); LWP::UserAgent->new->post( $webhook, { payload => JSON::encode_json( { channel => $slack_channel, username => $username, text => decode_utf8($text) } ) } ) if defined $text && $text ne ''; print $query->redirect('https://www.google.co.jp/');
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。
※内容は個人的見解であり所属組織とは関係ありません。