当ブログを、更新するとdlvr.itを使って、twitter,facebookに情報を更新通知をしているが、
通知後、色んな方に「404エラー」になるとご指摘をいただいていた。

hexo-で-404-File-not-found を参考に修正を行ったが、以下の状態だった。

  • 直接URLにアクセスに行くと正常表示される。
  • feed経由だと404エラー

※ NFDかどうかはfirefoxで確認ができる(chromeではダメだった)。以下、画像のように「で」の後ろにカーソルを合わせ、文字削除を実行してみると、
「”」が消え、「て」になる。

[nfd.gif]

hexo-generator-feed で生成されるfeedのxmlファイルについてもNFD(Normalization Form D)->NFC変換する必要があることがわかった。
そこで、 unorm を利用し、”生成されるNFDのパーマリンク全て”をNFCに変換することにした。

  1. npmでunormをインストールする。

    1
    npm install unorm
  2. hexo本体を以下のとおり改修

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # diff -ur node_modules/hexo/lib/models/post.js_back node_modules/hexo/lib/models/post.js
    --- node_modules/hexo/lib/models/post.js_back 2015-06-09 01:01:58.000000000 +0900
    +++ node_modules/hexo/lib/models/post.js 2015-06-09 01:00:24.000000000 +0900
    @@ -4,6 +4,7 @@
    var moment = require('moment');
    var pathFn = require('path');
    var Promise = require('bluebird');
    +var unorm = require('unorm');
    var _ = require('lodash');

    var Moment = require('./types/moment');
    @@ -45,6 +46,7 @@

    Post.virtual('path').get(function(){
    var path = ctx.execFilterSync('post_permalink', this, {context: ctx});
    + path = unorm.nfc(path);
    return typeof path === 'string' ? path : '';
    });

URLもfeedのリンクも正常に表示されるようになった!