Saturday, April 23, 2011

ページ内のすべてのアンカータグにクリック計測用のタグを自動で追加する[Jquery][analytics]

参考にさせてもらったページ
外部リンクのクリックをGoogle Analyticsのイベントトラッキングに記録するJavaScript(jQuery使用)
個人的に使うことが多い9つのjQuery・JavaScriptスニペット

ページのURL、上の階層のid名、遷移先のURLを取得してanalyticsのイベントトラッキングで見ることができます。以前はアンカータグひとつひとつにonclickなんちゃらを入れていたので、それに比べると手品のような手軽さです。

ページ内で正しくidが使われていればこれだけで大体把握はできるはずです。inputボタンのクリックも拾うようにしています。input要素の場合は遷移先URLは空欄で上がってきます。

 jQuery(function($) {
 var _thisUrl = $(location).attr('href');
 $.each($('a,input:image,input:submit'), function() {
 var _thisId = $(this).closest("[id]").attr("id");
 $(this).click(function() {
  _gaq.push(['_trackEvent', _thisUrl, _thisId, $(this).attr('href')]);
  });
 });
});

Thursday, April 21, 2011

[ruby][SEO] ローカルに落としたサイトデータから全htmlのtitle、meta description、keyword、見出しタグを抽出してcsvに一発保存

サイト内の全htmlのtitle、meta description、keyword、見出しタグを一覧でcsvに書き出します。自分の環境では一応動いていますが、いろんなサイトのスクリプトを見よう見真似で作ったので他の環境でどのくらい使えるものなのかはわかりません。

自分が管理しているサイトではDescriptionやKeywordの大文字小文字が混在していたためエラーが出ました。rescueを初めて使ってみたところなんとか動きました。これが正しい使い方であればいいのですが。というかもっと簡潔にやる方法があれば教えてください。

以下の方法で使っています。
1.Sitesucker(OSX用)でサイトをローカルに保存。(オプションで画像やサウンドファイルなどの重いファイルを除外しておかないとサイト規模によってはすごく時間がかかります。)
2.ダウンロードしたフォルダにスクリプトを持っていってそこで実行。

require 'rubygems'
require 'hpricot'
require 'open-uri'

#改行削除メソッド
def erasebr (str)
     str.gsub!(/\n/, "")
end

#書き出しファイル名はドメイン名+csvtype+今日の日付
puts "ファイル名の先頭に入れる文字を入力してください!例)ドメイン名など半角英数"
name = gets.chomp

#書き出しメソッド
def makecsv (domain_name, csvtype)

#ファイル名は:ドメイン名+csvtype+タイムスタンプ
timestamp = Time.now.strftime("-%Y%m%d-%H%M%S")
csv_name = domain_name + "-" + csvtype.to_s + timestamp + ".csv"
puts "書き出しファイル名: " + csv_name

#ファイルタイプ(通常はhtml)
ext = "html"
text_array = Dir.glob("**/*.#{ext}")

open(csv_name, "w") do |f|
     # 全ファイル内のtitle、description、keywords、見出し要素を取得
     text_array.each do |file|
          doc = Hpricot( open(file).read )
            title = doc.at('title').inner_html
            # casesensitiveエラーを入れ子でrescue
            begin
              description = doc.at('meta[@name="Description"]')['content']
             rescue
                  begin
                   description = doc.at('meta[@name="description"]')['content']
                 rescue
                   description = "NO"
                  end
             end
            begin
              keywords = doc.at('meta[@name="Keywords"]')['content']
            rescue
                   begin
                   keywords = doc.at('meta[@name="keywords"]')['content']
                 rescue
                   keywords = "NO"
                 end
            end
            hone = doc.at('h1').inner_html
            htwo = []
            (doc/"h2").each do |d|
             htwo << d.inner_html
            end
         
          #改行を削除
          erasebr(title)
          erasebr(hone)
          erasebr(description)
          htwo.each { |c| c.gsub!(/\n/, "")}

      #要素ならべて書き込み
      if csvtype == "nokwd"
          s = file, ",title,#{title}", " ,description,#{description}", ",h1,#{hone}", ",h2,", htwo.join(","), "\n"
          else
        s = file, ",title,#{title}\n", " ,description,#{description}\n", " ,keywords,#{keywords}\n",
                 ",h1,#{hone}\n", ",h2,", htwo.join("\n,,"), "\n\n"
       end
       f.write s
     end
end
end

#keywordあり: kwd
#keywordなし : nokwd
makecsv(name, "kwd")
makecsv(name, "nokwd")


初さらしです。
動いた時は感動しました。