俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

ハイフンとアンダースコアのSEO効果とコード上の対応 - 日報 #140

明日オフィス引っ越しでございます。

さておき。
SEOについて色々と調査し施策を突っ込んでおります。
色々と仮説は出てきていますが、
如何せん「なんもわかんねぇなぁ」という世界観で、
ほとほと困り果てております。
とにかく施策を小さく試して反応を見るの繰り返しですね。

SEOの施策は本当にテクニカルなものから、
サイト構造に至るまで数多ありますが、今日はすごーーい小さなチップスを。

URLにおける「ハイフン」と「アンダースコア」は鬱陶しい問題みたいです。
「room-clip」と「room_clip」ならば、前者はroomとclipの2単語として、
後者ならroom_clipという1単語として解釈される、
みたいな話です。
ホンマかいなと。

Google社の「お前もアーカイブ化してやろうか!むはははは!」な世界観にかける熱意を心底尊敬している僕からすると、彼らがそんなリスキーなことやるとは思えないです。
そりゃ確かにクソなコンテンツに対して厳しく取り締まる存在としてのGoogleと捉えれば、
そんくらいの厳しいルールを敷いてくるとも思えなくはないですが、
かといってもアンダースコアとハイフンなんて流石に無茶言い過ぎだろと思うわけです。
言い換えれば、そんなアルゴリズムじゃ自然文で書かれたコンテンツを解釈することなんて無理だと思うのです。
だもんで、
きっと「あんま関係ねぇんだろうなぁ、、、」と思いながらも、
それでも対応しなくちゃならないのがSEOという世界なわけです。

ですが、
昨今のWebのフレームワークでこの問題に対処するのは結構煩わしいものです。
だって、URIメソッド名に対応してたりするじゃないですか。
んでPHPではメソッド名に「ハイフン」を使えないじゃないですか。
(多分)
だから書き換えないとイカンのですよ。
ということで、Codeigniterの場合は、CI_Routerとかいう無視したいコアをハックする必要があります。

こんな感じ。

class MY_Router extends CI_Router {
  function __construct() {
     parent::__construct();
  }

  function set_class($class) {
    $this->class = str_replace('-', '_', $class));
    parent::set_class($class);
  }

  function set_method($method) {
    $this->method = str_replace('-', '_', $method);
    parent::set_method($method);
  }  
 
  function _validate_request($segments) {
    if (count($segments) == 0) {
      return $segments;
    }
    $segments = str_replace('-', '_', $segments);
      return parent::_validate_request($segments);
    }
}

validateもclassも変えないとアカンのです。
うーん、、、なんかバグの温床になりそうでとても嫌な感じです。
もう少しなんかいいのないですかね。
ないよね。
そうだよね。
低気圧のせいで頭痛くない?
痛くないと。
そうだよね。
じゃぁね