googleサイトマップ作成ツール PHP版

サーバ構築と同じぐらい力を入れているのが、プログラム作成です。とはいっても趣味の範囲ですが。(^ ^ ;ゞ一人でちまちま造っていても、モチベーションも上がらないし役に立ちそうなプログラムなら、公開してもいいかな。と。ただし、私の作成したプログラムを使用したことによって生じた損害・被害等は一切当方では責任を持ちません。各自が責任を持って実行してください。
googleサイトマップ作成ツール PHP版

googleサイトマップ作成ツール PHP版

月曜日, 12, 05, 2005

line line

ソースはこちらにあります。コピーして文字コードをUTF-8にしてファイル名を「walkDir.php」にして保存してください。 使用方法はこちら googleサイトマップ作成ツール使用方法

<?PHP
/*
   このツールは、ディレクトリとその中に納められているファイルの構成を視覚的に見るために
   作成したツールですが、オプションとしてgoogleサイトマップを作成することもできます。
   使い方は単純で、設定したパスワードを入力して送信ボタンを押せばこのスクリプトがある
   ディレクトリ以下のディレクトリとその中に納められているファイルが階層的に表示されます。
   
   サイトマップを作成する場合は「サイトマップを作成しますか?」にチェックを、
   HTMLファイルのみ表示させる場合は、「HTMLファイルのみ表示」にチェックを入れてください。
   
   ★ googleサイトマップ作成機能について
   
   googleサイトマップを作成するには、いくつか設定しなければなりません。
   このスクリプトの「変更する部分」を環境に合わせて変更してください。
   「/*」と「*/」で囲まれた部分はコメントとして扱われます。
   変更可能な場所はたいてい「"」で囲まれている部分のみのはずです
   
   ★ 設定
   
   ・「パスワード」は必ず変更してください。出来ればこのスクリプト名も変更した方がよりイタズラ
   される可能性は少なくなります。
   ・「サイトマップファイル名」は、このツールで作成されるgoogleサイトマップのファイル名です。
   変更しても変更しなくてもかまいませんが、なるべく変更した方がいいかもしれません。
   どんな名前(日本語以外)でもいいと思います。
   ・「ドメイン」は、あなたの所有するサイトのドメイン、サブドメイン、URLです。たとえば、
   「http://fstyle.adaga.org/」や「http://fstyle.adaga.org/~user001/」というような感じになります。
   「http://」から始め「/」で終了させてください。
   ・「記録させないパターン」は、URL中にとある文字列を含むものについてはマップに記録させない
   設定です。これによって隠しファイルや公開する必要のないファイルはマップに記録させません。
   それぞれ「"」で囲って、各文字列は「,」で区切ります。
   必要のないものは削除するか、書き換えてください。
   ■色の部分が変更する必要がある部分です。
   
   ★ 注意点
   
   一応、Vine Linux 3.1で自宅サーバーを使用している環境用に作成してあります。
   私の環境以外の方が、これを使用して不具合がでても、私は責任を一切持ちません。
   基本的には、どの環境でもPHPが使えて設定を正しくすれば使用できるはずですが。保証はしませんし
   使用をオススメすることもしません。
   
   まず、いきなりやらずに、なるべく階層の下の方のディレクトリでテストするといいと思います。
   私の環境では、14,000個ほどのディレクトリとファイルがありましたが、4秒程で完了しました。
   
   使用にあたって特に制限はありませんが、うまくいった場合は報告してくれるとうれしいです。
   どちらにせよ自己責任でお願いします。
*/

/* パスワード             */
$password    = "12345";
/* サイトマップファイル名 */
$sitemapFile = "sitemap.xml";
/* ドメイン               */
$domain      = "http://exsample.aaa.bbb/";
/* 記録させないパターン   */
$nonSave     = array("webalizer" , "test" , "docs" , "error");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML lang="ja-JP">
<HEAD>

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<TITLE>ディレクトリ散歩</TITLE>
<META http-equiv="Content-Script-Type" content="text/javascript">
<META http-equiv="Content-Style-Type" content="text/css">
<STYLE TYPE="text/css">
<!--
body , input{
  font-size: 12px;
  color: #555555;
  letter-spacing: 1px;
}
.dir {
  color: #FF7301;
}
.html {
  color: #78A0BC;
}
.etc {
  color: #CCCCCC;
}
.non {
  color: #E05E5E;
}
-->
</STYLE>
</HEAD>
<BODY>
<form action="./walkDir.php" method="POST" name="form1">
パスワードを入力してください<BR>
<input type="text" name="pass" value="<?=$_POST["pass"];?>"><BR>
サイトマップを作成しますか?
<input type="checkbox" name="make" value="1"><BR>
HTMLファイルのみ表示
<input type="checkbox" name="show" value="1" checked><BR>
<input type="submit" name="submit" value="送信"> 
<a href="http://fstyle.adaga.org/MT/">© fstyle.adaga.org</a>
</form>
<div>
<?
if (FALSE == isset($_POST["pass"]))
  exit();
else if ($_POST["pass"] != $password){
  print '<span class="dir">パスワードが違います</span>';
  exit();
}
$nonMax      = count($nonSave);
$dir   = "./";
$str   = "";
$now   = $dir;
$count = 0;
$fp    = null;

if ($sitemapFile != "" && isset($_POST["make"])){
  if (FALSE == ($fp = fopen($sitemapFile , "w"))){
    print "サイトマップを作成に失敗。ディレクトリのパーミッションを見直してください";
    exit();
  }
  $temp =<<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<urlset
  xmlns="http://www.google.com/schemas/sitemap/0.84"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
                      http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">

EOF;
  fputs($fp , $temp);
}
print "./<BR>";
if (0 == walkingDir($dir , $str , $fp)){
  print "開けなかったディレクトリがありました。
\n"; //exit(); } if ($fp){ fputs($fp , "</urlset>"); fclose($fp); } print '<p><span class="dir">' . $count . '</span> 個のファイルとディレクトリがありました</p></dir>'; /********************************** walkingDir *************************/ function walkingDir($dir , $str = "" , $fp = null){ global $count; global $domain; global $nonSave; global $nonMax; $path = substr($dir , 2); $str .= " "; if (FALSE == ($df = @openDir($dir))){ return 0; } while($fileName = readDir($df)){ if ($fileName == "." || $fileName == ".."){ }else{ $count++; // 時間取得 $time = date("Y-m-d\TH:i:s\Z" , fileMtime($dir . "/" . $fileName)); // HTMLファイルなら if (preg_match("/\.html?$/i" , $fileName)){ // 記録しないファイルかチェック for($non = $i = 0; $i < $nonMax; $i++){ if (strstr($dir . "/" . $fileName , $nonSave[$i])){ print $str ."├ <span class=\"non\">". $fileName . "………{$time}<br></span>\n"; $non = 1; break; } } if ($non) continue; print $str ."├ <a href=\"{$dir}{$fileName}\" class=\"html\" target=\"new\">". $fileName . "</a>………{$time}<br>\n"; if ($fp){ if (strstr($fileName , "index")) $lastmod = "<changefreq>daily</changefreq>\n<priority>0.7000</priority>"; else $lastmod = "<lastmod>{$time}</lastmod>\n<priority>0.5000</priority>"; $temp = <<<EOF <url> <loc>{$domain}{$path}{$fileName}</loc> {$lastmod} </url> EOF; fputs($fp , $temp); } // それ以外 } else { if (FALSE == isset($_POST["show"])) print $str ."├ <span class=\"etc\">". $fileName . "………{$time}<br></span>\n"; // ディレクトリなら if (is_dir($dir . "/" . $fileName)){ print $str ."├ <span class=\"dir\">". $fileName . "………{$time}<br></span>\n"; if (0 == walkingDir($dir . $fileName . "/" , $str , $fp)){ continue; //closeDir($df); //return 0; } } } } } closeDir($df); return 1; } ?> </body> </html>

ソースをコピーする方は、以下のテキスト入力欄をクリックしてコピーしてください。

この記事はご希望通りの内容でしたか?

投稿者 campanella : 2005年12月05日 22:13 | 自作プログラムのソース | 編集

line

□□□ コメント □□□

自宅サーバーの方が本当にうらやましいです。
普通のブログでは、sitemapのファイルをルートの部分におくことができないので。

そこで、ただのサイトマップを作って、そこから各ページに飛んでくれることを期待してみたのですが、それも検索エンジンが拾ってくれない始末。

投稿者 John : 2006年02月22日 11:10

初めまして。
うーん。まぁ、自宅サーバーは別の意味で苦労が絶えないですよ。
あと、googleサイトマップは今は特に役に立ってないというか・・・。
特に更新していないですね。
それより、毎日いくつかブログに投稿していると、自然とクローラーが訪問するようになりますよ。
毎日投稿して、数ヶ月がんばってみてください。

投稿者 DVDからサーバーまで:カンパ : 2006年02月23日 08:01

Googleサイトマップの作成にとても助かりました。
最初は、ソースと書いてある上の方のテキストを、間違ってコピー&ペーストしてPHPファイルを作成してしまい、うまく動作しなかったのですが、あとで気づいてソースのほうでやってみたらうまくできました!
ありがとうございます。

投稿者 nakamura : 2006年10月18日 03:08

はじめまして。
サイトマップなるものを作成してみようと思っていろいろと探していてたどり着きました。php版ということでサーバにアップロードして無事作成完了。とても助かりましたm(_)m。
サイトマップの効果は今イチ不明な感もあるようですが、どうかなぁ~?

投稿者 たかひろ : 2006年10月21日 09:30

google が、なかなか適切にインデックスしてくれないので、挑戦してみました。XMLの知識があまり無いので不安でしたがアッサリ成功しました。
googleでも希望のキーワードでトップページに表示される様になりご機嫌です。
うれしくて、今OK-WAVEでこちらを紹介してきました。本当にありがとうございました。

ただ、やってみて解ったのですが、今回6サイトで試したのですが、インデックスされるまでにかなり時間が掛かるのですね。
一番早くインデックスされたサイトでも10日以上で、後は2週間以上が2サイト、30日以上かかってもまだダメなものが2サイトです。
ただダメなサイトは2つ共サブドメインのサイトなので、もう一工夫必要なのだろうと、これから再挑戦してみます。

投稿者 matu-tokyo : 2006年11月03日 14:39

Google、Yahoo!、MicrosoftがSitemaps0.9のサポートを発表しました。

現状のsitemapでも対応できるのですが、Sitemaps0.9に完全対応させるには、urlsetを次のように変更する必要があります。

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

※ "<"は"<"に読み替えてください。

Google、Yahoo!ともに問題なく作成したsitemapのxmlファイルを読み込んでくれています。MSNはsitemapの仕組みを現在準備中らしいです。

関連記事を貼っておきます。
http://journal.mycom.co.jp/news/2006/11/16/340.html

投稿者 しん : 2006年11月19日 19:28

line
名前
メールアドレス
URL
コメント