なんだ、小林か。

WordPressを介してSeesaaブログを静的HTMLに移転する

2016年01月28日

無料ブログサービスの大手Seesaaブログさん。
HTMLの基礎もわからない昔から、情報発信の手段としてたくさん利用させて頂きました。
その結果、今でもそこそこアクセス数を稼いでいるブログを何個か放置している状態でした。

これをどこか別の場所に引っ越したい、というのが今回の目的です。
スマホからの閲覧者にもう少し読みやすい形を提供したいと考えました。

WordPressに引っ越したいけど、そもそもほとんど更新する予定がない

幸いSeesaaブログさんでは独自ドメインを設定しているので、転送は簡単ですし、借りているレンタルサーバーにも余裕があります。
WordPressに引っ越しするならブログ特有の内部リンクの強さも維持されて、SEO的な変化も少なそうです。

ただ、はっきり言ってもうほとんど更新していないブログを、WordPressに移設するのは無駄が多いなあ、と感じました。
WordPress本体にプラグイン、テーマの更新と、ほとんど更新していないブログを複数維持していくのには適していません。
もちろんレンタルサーバーの負荷の問題もあります。
内部検索など、使えなくなる機能はありますが、静的なHTMLで十分なくらいです。

そこで次に考えたのは、SeesaaブログをごっそりHTMLごとレンタルサーバーに移動させてしまうこと。
検索すれば、まるごとHTMLをダウンロードできるツールも出てきます。
しかし、これがなかなか思ったように動かない。
タグクラウドのページが日本語URLなのが影響しているのか、期待するデータを取り出せませんでした。
さらに、スマホページのことを考えると、デザイン修正の手間もかかります。

WordPressにはプラグインStaticPressがあるじゃない

試行錯誤を繰り返してたどり着いた結論は、WordPressの記事を静的HTMLにはき出してくれるプラグインStaticPressを使う方法です。

流れとしては、

  1. レンタルサーバに適当なディレクトリを作成し、WordPressをインストールする
  2. Seesaaブログの記事をエクスポートして、WordPressにインポート
  3. プラグインStaticPressで移転先のドメイン、ディレクトリを指定して出力
  4. ドメインのDNSレコードをSeesaaからレンタルサーバーへ切り替える

という手順になります。

SeesaaからWordPressへの引っ越し

SeesaaからWordPressへの引っ越しの具体的な手順は、以下のページがとても参考になりました。

参考

Seesaaブログの独自ドメイン設定を使ったリダイレクトでWordPressへ引っ越し – 「地味ながらも日々」

こちらを参考にしつつ自分なりにアレンジした点としては、

インポート前に段落のp要素を追加しておく

Seesaaブログをテキストモード(通常エディター)で入力していた場合、2回以上の連続改行はWordPressのインポートに反映されません。
SeesaaのエクスポートデータをテキストエディタでURLを編集する際に、ついでに段落の<p>を追加しておくと編集の手間が少ないと思います。
その際は、テキストエディタの置換機能で正規表現を使って改行コードをうまく組み合わせると楽です。
(例:「\n\n」→「\n</p>\n<p>\n」※テキストエディタによって動作が異なります)

タグクラウドがインポートされない問題

「Movable Type と TypePad」プラグインでインポートしてもSeesaaの記事のタグ情報(HTMLの要素では無くタグクラウドのほう)が反映されませんでした。
解決するためにはプラグインのphpを書き換える必要がありました。
参考:WordPressに MovableTypeのタグを含めてインポート

記事のスラッグ修正

インポート後、記事のスラッグをSeesaaのURLに合わせるときは、プラグイン「WP CSV Exporter」「Really Simple CSV Importer」を使うと早いです。

  1. プラグイン「WP CSV Exporter」で記事をcsv出力。

    スラッグをエクスポート

  2. http://seesaaブログのURL/sitemap.xml?page=1 にアクセスしてxml取得。
  3. テキストエディタなどでスラッグのみの一覧を作成。
  4. csvをエクセル等で編集しスラッグを書き換え。
  5. プラグイン「Really Simple CSV Importer」でスラッグを上書き。

    編集してインポート

SeesaaのURLになるべく合わせる

functions.phpに記述を追加して、SeesaaのURLに近づけてみました。
中途半端で汚いコードですが、参考までに。

add_filter('user_trailingslashit', 'remcat_function');
function remcat_function($link) {
	$link = preg_replace("#(\/article\/category\/)(.+)#", "category/$2-1.html", $link);
	$link = preg_replace("#\/article\/(\d{4})\/(\d{2})\/(\d{2})\/?#", "/archives/$1$2$3-1.html", $link);
	$link = preg_replace("#\/article\/(\d{4})\/(\d{2})\/?#", "/archives/$1$2-1.html", $link);
	$link = preg_replace("#\/article\/(\d{4})\/?$#", "/archives/$1$2-1.html", $link);
	$link = preg_replace("#\/article\/tag\/(.+)#", "/tag/$1", $link);
	$link = preg_replace("#(page\/)(\d+)#", "", $link);

    return $link;
}

add_filter('paginate_links', 'add_page_base_link');
function add_page_base_link($string){
	if( strpos($string,"/page/") === false ) {
		if( strpos($string,"/tag/") === false ) {
			$string = preg_replace("#\-(\d+)\.html\/?#", "\-1\.html", $string);
		} else {
			$string = preg_replace("#(\/tag\/)(.+)\/(\d+).*#", "$1$2", $string);
		}
	}
    $string = preg_replace("#(\/category\/)(\d+)(\-\d+\.html)(\/page\/)(\d+)\/?#", "/category/$2-$5.html", $string);
    $string = preg_replace("#(\/archives\/)(\d+)(\-\d+\.html)(\/page\/)(\d+)\/?#", "/archives/$2-$5.html", $string);
    $string = preg_replace("#(\/tag\/)(.+)\/page\/(\d+)\/?#", "/tag/$2/$3", $string);
    $string = preg_replace("#(\/tag\/)(.+)\/(\d+)\/(\d+)#", "/tag/$2/$4", $string);
    return $string;
}

add_action('init', 'remcat_flush_rules');
function remcat_flush_rules() {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}

add_filter('generate_rewrite_rules', 'remcat_rewrite');
function remcat_rewrite($wp_rewrite) {

	$wp_rewrite->rules = 
		array('category/(\d+)-(\d+).html.*' =>
			'index.php?category_name='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2))
		+ array('archives/(\d{4})(\d{2})(\d{2})-(\d+).html.*' =>
			'index.php?year='.$wp_rewrite->preg_index(1).'&monthnum='.$wp_rewrite->preg_index(2)
			.'&day='.$wp_rewrite->preg_index(3).'&paged='.$wp_rewrite->preg_index(4))
		+ array('archives/(\d{4})(\d{2})-(\d+).html.*' =>
			'index.php?year='.$wp_rewrite->preg_index(1).'&monthnum='.$wp_rewrite->preg_index(2)
			.'&paged='.$wp_rewrite->preg_index(3))
		+ array('archives/(\d{4})-(\d+).html.*' =>
			'index.php?year='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2))
		+ array('tag/(.+)/(\d+).*' =>
			'index.php?tag='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2))
		+ array('tag/(.+)/?' => 'index.php?tag='.$wp_rewrite->preg_index(1))
		+ $wp_rewrite->rules;
}

これだと、
投稿ページは /article/スラッグ.html
カテゴリーページは /category/スラッグ-ページ番号.html
アーカイブページは /archives/年月日-ページ番号.html
で動きます。
ただし、タグページは /tag/スラッグ/ページ番号(ページ番号1の時は省略)
で、Seesaaとは連動しません。

Seesaaは
タグトップが /tag/Shift-JISでエンコードされたタグ名
タグ詳細一覧が /tag/articles/Shift-JISでエンコードされたタグ名?page=ページ番号(ページ番号1の時は?page=省略)
という形になります。
複雑すぎて、労力に見合わないと判断しました。

また上記のfunctions.phpでは、作成者 authorページの2ページ目以降が動きません。
どうにか自分の目的だけ達成させた拙いコードですが、参考になればと考えてさらしておきます。

参考

「StaticPress」と「WP Static HTML Output」から静的HTML出力

今度はhtmlをはき出すのですが、上記のfunctions.phpで処理をいじると、プラグイン「StaticPress」ではカテゴリーページの2ページ目以降が出力されませんでした。
何が悪いのか特定できずに詰まってしまったのですが、苦肉の策として「WP Static HTML Output」を使いました。
こちらも静的HTMLを出力するプラグインとして有名なのですが、日本語URLが混ざるとエンコードされたディレクトリを生成してしまうため、タグのページがおかしくなります。
ただし、カテゴリーページは問題なく出力されるので、ここだけデータを拝借することで、一応解決しました。
(タグページへのリンクは日本語部分がエンコードされてしまいますが、ジャンプ先に日本語ディレクトリがあれば問題なく飛びます)
うーん、我ながら強引です。

あとは、DNSレコードを変更して、反映されるのを待てば完了です。
WordPressは管理しきれないようなら削除してしまった方がセキュリティ上安全だと思われます。

まとめというか反省というか言い訳

以上がSeesaaブログ引っ越し騒ぎの一部始終となります。
スマートでない部分が多々あり、これを公開するべきか悩みました。
しかし予想以上に大がかりになってしまい苦労したこともあり、どこかに似た状況で悩んでいる方もいるのでは無いかと考えて残すことにしました。

あとは苦しみながら調べていく中で、本当にありがたい情報を載せてくださっているサイトさんにお礼の意味も込めてリンクを残したかったというのもあります。
ありがとうございました。


コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です