高見龍

iOS app/Ruby/Rails Developer & Instructor, 喜愛非主流的新玩具 :)

Octopress的Canonical URL問題

自從把Blog從Wordpress搬到Octopress之後,對我這種愛敲鍵盤的人來說,寫東西真的順手不少。不過最近我發現在要把網址貼到Facebook的時候發現這個情況:

image

原本以為會自動抓該網頁的摘要,但卻出現了301 Moved Permanently的字樣,但只要把最尾巴的斜線拿掉就正常了。不過一樣的網址貼到Google+是ok的,於是我把網址丟到Facebook的Debug工具看看是哪邊出了問題:

image

出現了Circular redirect path detected的錯誤訊息,畫面往下捲看看是什麼狀況:

image

大概猜到是怎麼回事了,但很好奇到底是哪邊造成的,看了一下我的_config.ymlpermalink設定:

permalink: /:year/:month/:day/:title/

看起來尾巴有斜線的。接著再翻了一下其它的source才發現,原來在source/_includes/head.html裡有這行:

(source_includes_head.html) download
1
{% capture canonical %}{{ site.url }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %}

最後面加了個strip_slash的filter,看起來就是會把slash給脫掉的,我把這個filter拿掉之後,原本的canonical url就會留下/了,整個重新發佈一次之後,再貼到Facebook就沒301的問題了。

似乎不只這樣,原來Disqus的identifier也是用canonical url(請見source/_includes/disqus.html)。之前一直很好奇為什明明我在Wordpress的留言已經匯入Disqus,從Disqus的dashboard也都看得到,但就是無法顯示在blog文章裡,原來就是這個canonical url差了一個斜線,造成disqus_identifier不同而讀不到.. orz。

剛把它修正之後重新發佈之後,之前在Wordpress的留言就可以正常顯示了。但因為換過來之後沒注意到這點,所以從我換到Octopress之後有來留言的大大們真的很不好意思,您的留言其實還在Disqus裡,只是因為identifier不同而暫時只能留在dashboard裡了。

其實我也不知道為什麼這邊要strip_slash這個filter的存在,也許有它的用意吧,不過我拿掉之後就可以解決我的問題了。

以上,若有哪邊有錯再請跟我說 :)

Comments