HTML内のアクセス解析タグを除去する方法

webサイトのHTMLソースを保存して、ほかのページで表示させたり、ローカルで表示させたりする場合で、そのページのアクセス解析タグを取り除く方法です。
アクセス解析タグを除去せずにブラウザで表示してしまうと、ローカルのパスやテストサーバ、非公開サーバのアドレスがアクセスログに残ってしまいます。

解析タグはトラッキングコードとも呼ばれます。

主流のアクセス解析サービスの場合

アクセス解析ツールで主流の解析タグは次のようなパターンです。

<!-- 【解析ツールの名称】 -->
<script language="javascript" src="http://【解析サーバのURL】" ></script>
<noscript><div align="right"><img src="http://【解析サーバのURL】" /></noscript>
<!-- 【解析ツールの名称】 -->

外部JavaScriptでブラウザの詳細情報を取得するタグと、JavaScript非対応のブラウザ用に1ピクセル×1ピクセルの透明画像でアクセス情報を得るタグの2種類で構成されています。
それ以外に解析ツールの名称がHTMLコメントアウトで書かれている場合があります。

特徴

  • 『http』から始まる外部JavaScriptを呼び出すタグがある。
  • NOSCRIPTタグの中に『http』から始まる画像を呼び出すIMGタグがある。

この特徴から汎用的にアクセス解析タグを取り除き、アクセス解析タグ以外を誤って除去しないようにするコードは次のようになります。

function check_noscript_accsess_tag($matches)
{
  if(preg_match("/<img [^<>]*src=\"https?:\/\/[^<>\"]+\"/is",$matches[1])){
    return '';
  }
  return $matches[0];
}

$html = preg_replace_callback(
            "/<script [^<>]*src=\"https?:\/\/[^<>\"]+\"[^<>]*><\/script>\s*<noscript>(.+)<\/noscript>/isU",
            "check_noscript_accsess_tag",
            $html
        );

『外部JavaScript呼び出し』と『NOSCRIPTタグ』だけの条件では、かなりの誤検知が出ると思います。
解析サービスの名称のHTMLコメントアウトを条件にすると、きれいに除去できそうですが、ここは動作とは関係がないため記載していない場合も考えられます。

またアクセス解析サービスのタグは必ず外部URLを使用していますが、次のGoogle AnalyticsのようにSSL対応のタグの場合は工夫が必要です。 しかしJavaScript非対応のブラウザ用にIMGタグを付けている限りではJavaScriptでURLを振り分けることができないので問題ないと思います。

Google Analyticsの場合

Google Analyticsでは1種類の書き方で非SSLとSSLに対応させるため、JavaScriptで外部JavaScriptのURLを振り分けています。

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("XX-00000000-0");
pageTracker._trackPageview();
} catch(err) {}</script>

特徴

  • 2つのSCRIPTタグで構成される。
  • 1つ目のSCRIPTタグ内に『google-analytics.com』というドメイン名が含まれている。

この特徴からGoogle Analyticsのタグを取り除くには次のようなコードになります。

$html = preg_replace("/<script type=\"text\/javascript\">[^<>]+google-analytics\.com[^<>]+<\/script>\s+<script type=\"text\/javascript\">[^<>]+<\/script>/isU","",$html);

関連記事

スポンサーリンク

<BODY> ページの本体を示す

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る