印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType 変更履歴と印刷用ページ表示の実装を変更

このブログの変更履歴表示用のページと印刷用ページは,スタイルシートの追加読み込みをすることで作っている。Google の評価方法が変わったので,実装を変更することにした。

■ ■ ■

はじめに

このブログでは,変更履歴を表示するボタンと (nlog(n): ブログに変更履歴を残したい),印刷用にサイドバーやコメント欄を非表示にするボタン (nlog(n): 印刷用ページを作るには) をつけている。

どちらも実装方法は同じで,スタイルシートを追加して読み込むことによって,表示の仕方を変えたり,表示と非表示を切り替えたりしている。更新履歴は,変更部分を ins タグと del タグで囲んでおいて,それを表示したり非表示にしたりしているだけである。ページ右上の「Show History」ボタンをクリックすると切り替えができる (動作確認用: ins で囲んだもの→「挿入」,del で囲んだもの→「削除」)。

これまでの実装では,記事の URL に情報を追加することで,ページのステータスを表現していた。例えば,標準の URL,変更履歴表示用 URL,印刷用 URL はそれぞれ次のようなものとなっていた。

http://nlogn.ath.cx/archives/001614.html
http://nlogn.ath.cx/archives/001614.html?history
http://nlogn.ath.cx/archives/001614.html?print

これは上手く働いてくれていた。サイト訪問者のうち,どれだけの人がこの機能に気がつき,使ってくれていたかは不明である。ただひとつ確実に言えるのは,一番この機能を使っていたのは Googlebot だったということである。表示切り替えは,リンクボタンで実装されていたので,Googlebot はそのリンクをひとつづつ丁寧に踏んでくれていたのである。

インデックスされているページの総数
インデックスされているページの総数


記事数が1600なのに,インデックスされているページの総数が5000以上というのはどう考えてもおかしい (Google Webmaster Tools による情報)。

かつては,グーグルのロボットがリンクを踏んでも「そんなこともあるだろうね」くらいだったが,最近は状況が違ってきた。Google の表示順位がかなり下がってきてしまったのである。なぜかというと,恐らくではあるが「同じ内容のページが複数あるのはダメよ」という決まりで「コピーページが多いサイトの表示順位は下げますわ」となったからなのである (重複するコンテンツ - ウェブマスター ツール ヘルプ)。ガッツリ下がり始めたのは2012年8月からである (nlog(n): おかげさまで9周年)。それからは,もう転がり落ちるように…せっかくの10周年の報告が,あー(´・ω・`)ガッカリ… なものになってしまった (nlog(n): おかげさまで10周年)。

対策

さすがにこのままでは先行き真っ暗なので,1つのURLで表示の切り替えができるようにしたい。

そこで使ったのは,CssSwitcher である (スタイルシートを切り替えるJavaScript「CssSwitcher」 - シングスブログ)。当サイトは jQuery を使っていないので,この機能だけのために大きい jQuery を読み込む必要はない。そこで JavaScript 版を使わせてもらった。設定をクッキーに保存してくれるという優れもの。

この機能自体は,JavaScript による実装なので,本質的な部分は Movable Type でなくても構築できる。Wordpress でもいいし,ブログでなくてももちろん可能である。

実装

方針

機能としては,ボタンをクリックすると表示が切り替わり,同時にそのボタンも切り替わるという形にしたい。そこで,ボタンはあらかじめ全て読み込んでおいて,スタイルシートで一部を非表示にすることにした。

スタイルシートの用意

用意したスタイルシートは,合計で4つ。変更履歴の表示・非表示用,印刷用・通常表示用である。

これらはすべて,デフォルトのスタイルシート styles-site.css の一部で,ボタンの表示と非表示のスタイルが追加されている。

ちょっとややこしいので気をつけなければならないのは,例えば,変更履歴表示用のスタイルシート styles-show-history.css の内容は次の通りになっていて,

#show-history { display: none; }
#hide-history { display: inline;}
del {
        display: inline;
        text-decolation: line-through;
        background-color: #D5EAFF;
    }
ins {
        text-decoration: none;
        background-color: #FFD5EA;
    }

#show-history のように「#」がついているのは,タグに id="show-history" 属性がついている要素の表示方法を指定していることを意味している。上の設定では,id が show-history のタグを「display: none;」で非表示にして,逆に hide-history がついているタグを表示している。つまり,履歴表示しているページでは,「履歴表示」ボタンは不要なので消しておき,「履歴非表示」ボタンを表示しているということである。

スタイルシートファイルを header 要素に追加

切り替え用のスタイルシートで,デフォルト用のものを,標準のブログスタイルファイル styles-site.css の後で読み込むようにする。

<link rel="stylesheet" href="<$MTBlogURL$>styles-site.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="<$MTBlogURL$>styles-hide-history.css" id="history" />
<link rel="stylesheet" type="text/css" href="<$MTBlogURL$>styles-normal.css" id="layout" />

<$MTBlogURL$> は Movable Type のサイト URL を出力するテンプレートタグ。必要に応じて読み替えを。

スクリプトの読み込みを header 要素に追加

cssswitcher.js をダウンロードしてきて (スタイルシートを切り替えるjQuery Plugin「CssSwitcher」アップグレード - シングスブログ),設置して初期設定。これを header 要素に追加する。

<script type="text/javascript" src="/js/cssswitcher.js"></script>

これで準備は完了。

表示切り替えボタンを body に追加

表示切り替えボタンは次の4つ: 更新履歴を隠す更新履歴を表示通常表示へ切り替え印刷用表示へ切り替え

これらを次のようにリンクとして設置する。

<span id="print"><a onclick="CssSwitcher.change([{'id':'layout','theme':'styles-print'}]);"><img src ="/mticons/print.gif" width="80" height="15" alt="印刷用表示へ切り替え" /></a></span>
<span id="normal"><a onclick="CssSwitcher.change([{'id':'layout','theme':'styles-normal'}]);"><img src ="/mticons/normal.gif" width="80" height="15" alt="通常表示へ切り替え" /></a></span>
<span id="show-history"><a onclick="CssSwitcher.change([{'id':'history','theme':'styles-show-history'}]);"><img src ="/mticons/show-history.gif" width="80" height="15" alt="更新履歴を表示" /></a></span>
<span id="hide-history"><a onclick="CssSwitcher.change([{'id':'history','theme':'styles-hide-history'}]);"><img src ="/mticons/hide-history.gif" width="80" height="15" alt="更新履歴を隠す" /></a></span>

ボタンアイコンを右寄せしたいので逆順になっているが,これはお好みで。

まとめ

CssSwitcher.js の導入でページが整理された。後は Googlebot の様子見で。

2014年3月5日追記:
Google のインデックスから,なくなった URL を削除する指定を robots.txt に追加しました。

Disallow: /*history$
Disallow: /*print$

もしかすると,この記事の変更をするよりも,最初からこの robots.txt 設定をすればいいだけだったかも (泣)。

Posted by n at 2014-03-02 23:07 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?