2013年11月22日

日本語ドメイン名と日本語URL

日本語ドメイン名や日本語URLについて、

WEB上で関連記事を拝見してると、

やはりSEO対策関連の記事が多いようです。


おそらく、これらに興味を持つ人たちは

ユーザビリティよりもSEO対策に比重を置いている

人が多いように見受けられます。


確かに現時点の技術レベルにおいて、

SEO対策としてのメリットがなければ、

管理面の煩雑化や、ブラウザの振る舞いの違い、

他のアプリケーションとの相関性など、

これらのリスク背負うほどのメリットがあるかと問われると

疑問です。


また、ユーザビリティという点においては、

ブラウザのアドレスバーのURLに

日本語が表示されることについては、

個人的には違和感がありますが、

しかし、開発者にしか意味の分からない

略語を使用したディレクトリ名やファイル名よりは

利用者としては一見わかり易いのも事実です。


大手検索エンジンなどが、

ユーザビリティの向上を推奨しているように、

SEO対策とユーザビリティの向上の両輪を

追求できれば尚良いのですが、

しかし、ユーザビリティにおいては

前の記事で一部紹介した

ブラウザの日本語URLのコピー&ペースト問題 - ブラウザによる日本語URLの仕様の違い



ブラウザのIDNリンクのコピー&ペースト問題 - ブラウザによるIDNAの仕様の違い

などのように、その一部においては逆に損なわれる

結果となるのが現状です。


しかし、管理面の煩雑化、

他アプリケーションとの相関性、

ブラウザの振る舞いの違い、

ユーザビリティの一部損失、

などのリスクを差し置いてさえもなお、

日本語ドメイン名や日本語URLを実装する理由は、

SEO対策や日本語表示という「アピール面」において

大きなメリットがあるからではないでしょうか。


そこで次回は、現時点(2013年11月時点)における

日本語URLの実装方法のひとつを紹介していこうと思います。




posted by Dragonoid at 10:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2013年11月16日

ブラウザの日本語URLのコピー&ペースト問題 - ブラウザによる日本語URLの仕様の違い

日本語を含んだURLのコピー&ペースト問題という意味で

前回の

ブラウザのIDNリンクのコピー&ペースト問題 - ブラウザによるIDNAの仕様の違い

からの続きです。


今回は、ブラウザによる日本語URLの仕様の違いとして、

日本語URLのコピー&ペースト問題を取り上げます。


最近、ますます日本語URLを使用したサイトが増えてきました。

SEO対策、またはユーザビリティの向上としてでしょうか。

mod_rewrite などを利用し比較的簡単に実装でき、

且つ、検索エンジンからも、キーワードとの結びつきで

現時点では評価されているようです。


しかし、この日本語URL、管理が面倒なのと同時に

少し注意が必要です。


その注意の1つが、

ブラウザ上で、日本語URLのリンクを右クリックでコピーし、

テキストファイルやブログ記事や

メールなどにペーストした場合、このペーストした結果が、

コピー元のブラウザによって違うということです。


具体的に検証していきます。

以下のようなHTMLコードを記述します。

@には日本語「URLエンコード」のアンカー
Aにはその「URLデコード」のアンカー
@<a href="http://example.com/%E6%97%A5%E6%9C%AC%E8%AA%9E.html">encode</a>
A<a href="http://example.com/日本語.html">decode</a>

上記のHTMLファイルを各ブラウザで表示させ、

リンクを右クリックでコピーし、

ブログの記事にペーストしてみた結果が以下です。

(もちろんテキストファイルにペーストしても同様の結果)

この件に関しては Opera はOBですね。

Firefox, Chrome, Safari は足並みを揃え無難にまとめています。

そして珍しく IE が優秀です。

そう、開発側の意図が反映できるように

HTMLコードに忠実にリンクコピーを生成してくれています。

そして、全ブラウザとも、マウスを合わせたときの

ステータスバーの表示は日本語URLになります。


しかし、Opera からコピーしたURLは、

このブログのCMSや、テキストエディタ、メールに貼り付けても

正確なURLのリンクは生成されない場合が多いでしょう。

もちろん、これは SeesaaブログのCMSに限らず、

テキストエディタやメールソフトなど、

ペーストの受け手となる側が、

日本語URLに完全に対応していないのが原因ともとれますが、

日本語URLに関しては、対応すべきなのかは少し疑問があります。


多くのブログサービスにはアンカー自動生成機能などが備わっており、

URLを書けば自動でアンカーが、改行すれば <br /> が生成されるなど、

HTMLが分からない人でも気軽に記事を書く事ができます。


そう、現時点では、Operaからコピーした日本語URLは

HTMLで書かないと上記の結果のように

「完全な自動アンカーが生成されない」

という結果になってしまいます。


これは、日本語URLを持つ全てのサイトが

この潜在的な問題を持つということになります。


日本語URLを利用する目的にもよりますが、

その多くはSEO効果の期待もあるところでしょう。


しかし、検索エンジンによる形態素解析や

キーワードの重み付けというSEO効果だけに限らず、

リンクのコピー&ペーストという

古風な方法とはいえ、

SEO効果としてとても威力を発揮する

SNSでの拡散フローの一つが

オペラユーザーの場合には失われてしまう。

わざわざURLエンコードしてくれるわけもない。


ブラウザのステータスバーの表示に関しては

ユーザビリティも含め日本語URLで異論はありません。

しかし、リンクコピーに関しては、

できれば、HTMLコードに忠実であって欲しいところですが、

Opera のように全て日本語URLになってしまうと、

リンクコピーしたつもりがリンクにならないという状況が、

ブログ、テキストファイル、メールソフト

に限らずあらゆる場面で発生します。


日本語ドメインなどのIDNよりは、各ブラウザとも

仕様が進んでるようですが、まだ完全とはいえないようですね。


posted by Dragonoid at 06:51| Comment(0) | TrackBack(1) | プログラミング | このブログの読者になる | 更新情報をチェックする

ブラウザのIDNリンクのコピー&ペースト問題 - ブラウザによるIDNAの仕様の違い

毎度のことながら、日本語ドメインを扱ってると困ることがある。

シリーズ化しそうなこの感じ・・・

今回は、前回の

ブラウザのIDN返り値問題 - ブラウザによるIDNAの仕様の違い

に続き、

ブラウザによるIDNAの仕様の違いとして、

IDNリンクのコピー&ペースト問題

を取り上げます。


ブラウザ上で、日本語ドメインなどのリンクを右クリックでコピーし、

例えば、テキストファイルやブログ記事やメールなどにペーストする、

・・・よくありそうな光景です。

このペーストした結果が、コピー元のブラウザによって違うというもの。


具体的に検証していきます。

以下のようなHTMLコードを記述します。

@には「日本語ドメイン名」のアンカー
Aにはその「Punycode」のアンカー
@<a href="http://日本.jp/">IDN</a>
A<a href="http://xn--wgv71a.jp/">Punycode</a>

上記のHTMLファイルを各ブラウザで表示させ、

リンクを右クリックでコピーし、

ブログの記事にペーストしてみた結果が以下です。
# Firefox 25
@IDN
http://日本.jp/
APunycode
http://日本.jp/

# Chrome 30
@IDN
http://日本.jp/
APunycode
http://日本.jp/

# Opera 12
@IDN
http://日本.jp/
APunycode
http://日本.jp/

# Safari 5
@IDN
http://xn--wgv71a.jp/
APunycode
http://xn--wgv71a.jp/

# IE 8、IE 9
@IDN
http://日本.jp/
APunycode
http://日本.jp/


(もちろんテキストファイルにペーストしても同様の結果)

これだけ見ると Safari だけが独創的なように見えます。

でも実は、この件は Safari が一番マトモなんです。

ステータスバーの表示は「http://日本.jp/」

コピー&ペーストすると「http://xn--wgv71a.jp/

この「マトモ発言」の理由は後述します。

どちらにしても、ブラウザごとに違いがあるのは面倒くさい。


でも今回、私が本当に問題にしたいのは、

全てのブラウザが揃いも揃って、

日本語ドメインとPunycodeにわざわざ分けてある

HTMLコード本来の記述を見事に無視しているという事。


これが何を意味するかというと、

まず、上記で目にしたように、

「Safari だけリンクが貼られている」

のが分かると思います。


これは本来、SeesaaブログのCMSの仕様に問題があります。

要するに、SeesaaブログのCMSに限らず、

テキストエディタやメールソフトなど、

ペーストの受け手となる側が、IDNAを実装していないのが原因です。


多くのブログサービスにはアンカー自動生成機能などが備わっており、

URLを書けば自動でアンカーが、改行すれば <br /> が生成されるなど、

HTMLが分からない人でも気軽に記事を書く事ができます。


そう、現時点では、ペーストしたものを

HTMLで書かないと上記の結果のように

「Safari以外からコピーしたリンクは自動アンカーが生成されない」

という結果になってしまいます。


例えば

「ブログのCMSにIDNA実装なんてまだ無理だろう・・・」

という事を見越してHTMLファイルに

Punycode でアンカーを記述してみたところで

これも同じ結果になってしまう。


これは、日本語ドメイン名などのIDNを持つ全てのサイトが

この潜在的な問題を持つ
ということになります。


日本語ドメインを利用する目的にもよりますが、

その多くはSEO効果の期待もあるところでしょう。


しかし、検索エンジンによる形態素解析や

キーワードの重み付けというSEO効果だけに限らず、

リンクのコピー&ペーストという

古風な方法とはいえ、

SEO効果としてとても威力を発揮する

SNSでの拡散フローの一つが

半減してしまう。

わざわざ Punycode に変換してくれるわけもない。


本来は、ユーザビリティの追求が目的である日本語ドメインが、

この部分においては、ユーザビリティを損なう結果に

なってしまってるのが現状だ。

(というより、IDNAの実装がまだ浸透していないのが原因)

OGP対応のSNSならまだ救われますが・・・


現時点では諦める他ないのですが、

ブラウザのステータスバーの表示に関しては

ユーザビリティも含め日本語ドメインで異論はありません。

しかし、リンクコピーに関しては、

できれば、HTMLコードに忠実であって欲しいところですが、

せめて、Safariのように Punycode にならないと、

リンクコピーしたつもりがリンクにならないという状況が、

ブログ、テキストファイル、メールソフト

に限らずあらゆる場面で発生しているのが現状です。


もちろん、本来はブラウザのせいではないのですが、

テキストエディタやメールソフトのIDNA実装なんて

それこそ、ブログのCMS以上に見込めないでしょう。

これは、古くからある日本語URL問題からも伺えます。


(※実はつい3日ほど前ですが、

日本語ドメインサイトのプログラムに MUA を実装してる最中、

メールソフトの Mozilla Thunderbird が

ジャストタイミングで IDNA を実装してくれました。

要するに、メールに日本語ドメインURLを記述した場合、

自動的にアンカーが貼られるようになったという事です。)


日本語URL問題に関しては、リンクコピーが生きるよう、

各ブラウザ(一部除く)ともに足並みを揃えているようなので、

IDNに関しても同様にご対応頂きたいものです。


次回は、この日本語URL問題ついて、

主にブラウザによる違いから触れてみます。


posted by Dragonoid at 02:18| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2013年11月12日

jQueryとgifアニメで簡易的な処理中メッセージを表示する方法

jQueryとgifアニメ画像を使って、

簡易的な処理中メッセージを表示する方法

を紹介していきます。



(※画像のロード処理に関するものについては、
既に一般的で簡易的な方法がいくつもありますのでここでは触れません。)



Webサイトにおけるリクエスト処理中のシーンはいろいろあります。

ロード中、送信中、検索中、登録中、ダウンロード中...etc

これらの処理が完了するまで、

ユーザーには待ってもらわなければいけないわけですが、

処理が完了するまで、この「・・・中」といったメッセージの表示が、

ナビゲートの役目を果たし、無表示に比べてユーザーの不安やいらだちが

育ちにくくなる可能性はあると思います。


この「ウェイティングメッセージ」で、

最近Webで特に目にするようになったのは「ロード中」ですが、

先述したように、この画像のロード処理に関するものについては、

既に一般的で簡易的な方法がいくつもありますのでここでは触れません。

ここでは、それ以外の処理におけるウェイティングメッセージの表示方法

について紹介していきます。

[ 一般的な実装方法 ]
例えば、一般的なウェイティングメッセージの実装方法としては、

1). いったんテンプレートだけレスポンスし、

  処理中メッセージを表示させながら、Ajax などで

  サーバーサイド処理を完了させてデータを表示させる方法。

2). サーバーサイドで、処理の段階に応じてバッファを flush させる方法。

などが挙げられます。


1) については Ajax 処理用のビジネスロジックが必要になる。

2) についてはヘッダー出力周りに気を使い、

  またフレームワーク、テンプレートエンジンなどの環境との相性も影響する。


ビジネス仕様ならまだしも何気に面倒くさい。

そこで、Ajax 操作もバッファ操作もせず、

もっと簡易的にウェイティングメッセージを表示する方法を紹介していきます。


ここでは、わかり易くするために以下の条件を元に例を挙げていきます。

[ 条件 ]
1. 空きドメイン検索アプリケーションとした場合

2. 1st.html で入力し 2nd.html へリクエストする。
 ( 1st.html から 2nd.html へ遷移 )

3. 2nd.html では 1st.hmtl での入力値を元に

  WhoisサーバDBよりWhoisサーバを探しあて、

  そのWhoisサーバに登録状況を問合せ、

  レスポンスの内容により登録の有無を判断、

  入力の内容ごとに繰り返し処理を実行し、

  その結果を成型して返す。

4. Whoisサーバによりたまにソケット Timeout が発生する。

5. これらの処理に約5秒間かかったとする。


このような処理の場合に、

簡易的にウェイティングメッセージを表示させる方法の1つとして、

Javascriptgifアニメーション画像を使い、

それらを「1st.htmlページ上で表示する」方法

が挙げられます。

実装の仕方次第では、ページ遷移しなくても実現可能です。


[ 流れ ]
では、流れに移ります。

1). 1st.html でユーザーが入力し、検索ボタンでサブミットする。

2). サブミットのクリックイベントを検知する。

3). 誤操作防止用にウィンドウ全体にマスクをかけページ内操作を無効にする。

4). クルクル画像などのgifアニメを用意し

  1st.hmtl ページ上で処理中メッセージとして表示させる。

5). 2nd.htmlへリクエストが実行され、

  処理が完了するまで 1st.html上 で処理中メッセージが表示される。

6. 処理が完了したら、2nd.html へ遷移され結果が表示される。

たったのこれだけ。


これを jQuery、jQueryプラグイン、gifアニメ画像だけで実装します。

[ コード例.1 ]
そのコード例が以下です。
$(":submit").click(function()
{
/* ウィンドウ全体にマスクをかける */
var masker = $(window).maskAll("#FFFFFF", 0.6);
/* 処理メッセージ画像を追加 */
masker.append("<img src='/image_url' alt='検索中' />");
/* 処理メッセージ画像をウィンドウ中央に表示 */
$("img").centerView();
/* リクエスト開始。処理完了まで処理中メッセージが表示される */
});


上記の

$(window).maskAll()$("img").centerView() については、

オリジナルのjQueryプラグインです。

当ブログで公開していますので、必要な方はどうぞ。

jQuery プラグイン maskAll - jquery.mask.js

jQuery プラグイン centerView - jquery.centerView.js

要するに、マスキングとセンタリングをしてるだけです。


ただし、Firefox 25 については、

リクエストされた段階で gifアニメが停止します。

(Firefoxの他バージョンでは検証してないので分かりません。)

[ 検証ブラウザ ]
Firefox 25
Chrome 30
Opera 12
Safari 5
IE 8


Firefox 25 上で動かすためには、gifアニメをセットした後、

一度 comfirm()ダイアログなど出力系を表示する必要があります。

[コード例.2]
上記コード例を改善したコード例が以下になります。
$(":submit").click(function()
{
/* ウィンドウにマスクをかける */
var masker = $(window).maskAll("#FFFFFF", 0.6);
/* 処理メッセージ画像を追加 */
masker.append("<img src='/image_url' alt='検索中' />");
/* 処理メッセージ画像をウィンドウ中央に表示 */
$("img").centerView();
/* ブラウザ判定 */
if (-1 !== navigator.userAgent.indexOf("Firefox")) {
if (! window.confirm("検索しますか?")) {
masker.unmask(true);
return false;
}
}
/* リクエスト開始。処理完了まで処理中メッセージが表示される */
});



この方法なら、Ajax処理もバッファ処理も必要なく簡単に実装可能です。

実装の仕方次第では、ページ遷移の必要もありません。


ブラウザツールバーのクルクルイメージだけでなく、

サイト側から処理中の意思表示が簡単にできるわけですから、

これらが少しでもユーザビリティの向上につながれば幸いです。


posted by Dragonoid at 23:38| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

jQuery プラグイン centerView - jquery.centerView.js

jQueryプラグインです。

指定要素を常にウィンドウ中央に表示させます。

jQueryプラグイン centerView : jquery.centerView.js >> ダウンロード


[ Version ]
ver-0.0.1

[ Last Update ]
2013/11/12 14:40 +09:00

[ 説明 ]
object centerView(void)

指定した要素をウィンドウ中央に表示させます。
ウィンドウサイズが変更された場合も常に中央に表示されます。

[ パラメータ ]
なし

[ 返り値 ]
成功 指定された要素のオブジェクト
失敗 false および コンソールエラー

[ 補足 ]
ウィンドウが縮小・拡大などリザイズされた場合も、指定要素を常に中央に表示させます。

[ 例 ]
<script type="text/javascript">
var elm = $("div").centerView();
</script>



posted by Dragonoid at 15:23| Comment(0) | TrackBack(0) | jQuery | このブログの読者になる | 更新情報をチェックする