「対策しました!」みたいなニュースが普通に注目されちゃうとかPinterestの勢いはすごいな。「対策」っていうのはおかしい気がするけど(どちらかというとPinterest寄りの目線なので)。それはまぁともかくnopin
は実装がおかしい気がしてしょうがない。あまり興味もなかったのでnopin
の話は読み流していたため「えっ? alert()
?」とか思っただけだった。ちょっと追ってみたところクライアント側のJavaScriptでチェックしてるだけで、実際にはPinterestはnopin
をチェックしていないと言って良いと思う。
PinterestのBookamrkletでは以下のようにチェックしているだけだった(読みやすいように整形しておいた)。
var i = document.getElementsByTagName("meta");
for (var g in i) {
var e = i[g];
if (e.name && e.name.toUpperCase() == "PINTEREST" && e.content && e.content.toUpperCase() == "NOPIN") {
window.alert("This site doesn't allow pinning to Pinterest. Please contact the owner with any questions. Thanks for visiting!");
return
}
}
なのでBookmarkletの先頭でmeta
要素などをざっくり削除するだけでこの部分は通る。
その後はPinterest側は何もチェックしないようなのでnopin
を指定しているページの画像も普通にpinできる(自分でnopin
仕込んだページを作って試したら出来た)。Pinterestはクライアント側だけでなくサーバー側でもpin先のページをクロールしてnopin
をチェックするべきだし、そうでないのなら「pinされたくないならnopin
指定すれば良い」などとは言うべきではない。
既にサードパーティ製のpinするツールはいくつかあるし、この人気ならもっと増えていくだろう。それらがちゃんとnopin
を見ることを実装するかは誰も保証できないので、Pinterestがサーバー側でnopin
をチェックしないままならばnopin
は形骸化してしまう。
そもそもクロールしないのにクロールしないとチェックできないmeta
要素で意思表示させるというアプローチが間違っている気がする。それに「Webサイト」や「ページ」ではなく「画像ファイル」に対して何らかの意思表示をさせるべきなので、HTTPヘッダーとかファイル名とか埋め込みメタデータとかのが向いてるはず。ただこれらの方法はあまりにもコンテンツ所有者には敷居が高いので、コンテンツ所有者側とPinterest側の実装コストとかを考慮すると、現実的なのはrobots.txt
的なnopin.txt
とかを用意させるとかなんじゃないかなーと思う。