2012年6月4日

[教學]Blogger 將網址從 .com 轉換為 .tw 的影響及因應之道

A+

(Pic from: ulife.vpul.upenn.edu, pre2010.ia.nctu.edu.tw)
其實幾個月前就從自己的網站計數器 histats 發現,連上 WFU BLOG 的網域怎麼有 wayne-fu.blogspot.fr(法國), wayne-fu.blogspot.au(澳洲)等等其他國家,還以為 blogger 為了疏散流量,幫忙複製了世界各地的分站。直到 6/1 發現自己的網域也變成 wayne-fu.blogspot.tw 後,才知道之前真的是想太多,因為現在事情大條了,不但免費分站的幻象被戳破了,而且網站很多功能都失效了。趕緊四處找資料瞭解是怎麼回事。

以下內容為擷取這兩個網頁「Country Specific BlogSpot URLs」、「Why does my blog redirect to a country-specific URL」的重點,及自己的想法、因應對策。


一、Google 的用意

1. 現象:blogger 的網址將根據訪客所在地而變更,就像前言提到的狀況,從不同的國家連上 WFU BLOG,就會顯示相對應的網址結尾。

2. 目的:Google 為了管理網站的內容,以符合各國的審查制度、法律規範,將 blogger 自動轉址後,只要某篇 文章/留言 的內容被檢舉,Goggle 會依據當地規範決定是否移除內容,事後再發訊息通知 作者/留言者。

3. 感想:個人推測這個計畫的遠因大概是 Google 退出大陸的事件,為了避免再次因為言論內容造成的區域性問題。將網址依照區域轉換後,例如一篇在台灣不適當的內容會被刪除,那麼 ABCD.blogspot.tw 這個網址將看不到這篇 文章/留言,但是在 ABCD.blogspot.hk 這個網址仍然可以看到該篇 文章/留言。

4. 延伸應用:我們知道現在開始,只要身在台灣於網址列輸入 ABCD.blogspot.com 就會被自動轉成 ABCD.blogspot.tw;不過若是輸入 ABCD.blogspot.hk、ABCD.blogspot.in 等等其他區域的網址,並不會被轉成 ABCD.blogspot.tw。如此一來,例如想在台灣看到被刪除的文章內容,只要把網址改成其他區域就好了。當然,得先有篇被刪除的內容才能測試這個假設。


二、受影響、不受影響的人

只要是自訂網址的網頁,就不會被 Google 自動轉址;只要非自訂網址,就會被自動轉址。

感想:以後在 Blogger 發表爭議性內容之前,先準備一筆經費買個網址,在公海上 Google 才管不到你!



三、自動轉址產生的問題及對策

會造成的問題,全部都是從真實網址(Canonical URLs)被轉換成區域網址 country code Top Level Domain(ccTLD)所引起:

1. 搜尋引擎問題:這個網頁「Country Specific BlogSpot URLs」建議所有 blogger 第一個要做的動作,是到後台檢查範本中有沒有下面這一行:

<b:include data='blog' name='all-head-content'/>
這一行的作用是定位出網站的真實網址。如果沒有這一行,搜尋引擎機器人將來會定位到錯誤的網址,並且 Facebook 讚、Google +1 都無法找到真實網址來儲存統計數據。

感想:
  A. 這一點是很重要沒錯,不過我相信九成以上的範本都會有這一行程式碼,極少數人會去動到這一行。

  B. 個人推測沒有這一行會影響 SEO 的原因:以後新文章由台灣的訪客點擊,搜尋引擎機器人將流量歸到 ABCD.blogspot.tw 這個網址;如果訪客分散許多不同國家的話,流量會被分散、個別統計到不同國家的網址,對於搜尋引擎的點擊數統計就損失慘大了。但是有這一行程式碼的話,流量統一歸到 ABCD.blogspot.com 這個網址。

  C. 其實最重要的是 Facebook 讚、Google +1 的數據統計,所以沒有這一行的話,如 B 點所述,統計數據就會被分散存到不同網域去了;例如總共 10 個讚,可能有 5 個在 ABCD.blogspot.tw、有 5 個在 ABCD.blogspot.jp,統計數據會被個別計算了。


2. Facebook 外掛工具問題:其實 Facebook 外掛工具的數據、資料,都是依據真實網址 ABCD.blogspot.com 來儲存(前提是範本中有第 1 點的程式碼),並不會儲存到 ABCD.blogspot.tw 這樣的轉址。但是目前的頁面被轉址到 ABCD.blogspot.tw 這個網址後,Facebook 會去資料庫搜尋 ABCD.blogspot.tw 這個網址有幾個讚,結果發現沒有資料(也就是數目為0),所以我們會發現 "讚" 統計資料被歸零了

解決方法:根據「Country Specific BlogSpot URLs」,將 Facebook 外掛工具中的程式碼 data:post.url 都置換成 data:post.canonicalUrl,那麼不管訪客在 ABCD.blogspot.tw 或是 ABCD.blogspot.fr,Facebook 都會去找真實網址 ABCD.blogspot.com 的統計資料,就能讓 "讚" 統計、其他 Facebook 外掛工具的數據正常了。

感想:如果不清楚怎麼改 Facebook 的讚、分享按鈕的程式碼,可參考這一篇「Blogger自訂「讚」按鈕」→「三、自訂「讚」按鈕」


3. Google +1 外掛:不用任何更改,自家產品當然會把後台資料改好。

4. 其他社交外掛工具問題:Country Specific BlogSpot URLs」表示,大部分的其他社交外掛工具儲存數據時,並不會根據真實網址,所以多半會出錯。

解決方法:所以只能找找看安裝的程式碼有沒有 data:post.url 這樣的字串,有的話置換成 data:post.canonicalUrl;另外也要尋找有沒有 data:blog.url 這樣的字串,有的話置換成 data:blog.canonicalUrl

感想:其實很多社交外掛工具會提供不只一種安裝方式,上官網、或 google 一下找找其他的安裝方式,如果有某一種安裝方式是有 data:post.url 或 data:blog.url 字串的話,那就可以依以上的解決方法處理了。如果真的找不到的話,換一個社交外掛吧!

2012.10.8 增補

data:post.canonicalUrl 或 data:blog.canonicalUrl 這兩個參數是用來轉換文章頁面的網址,而如果要轉換部落格首頁網址的話,必須使用 data:blog.canonicalHomepageUrl 這個參數。例如"讚"按鈕如果要統計部落格首頁的"讚"數量(例如本站公佈欄下方那一個),那麼該按鈕的程式碼參數就必須改成 data:blog.canonicalHomepageUrl 才行。

改完之後,無論在哪篇文章的頁面,統計首頁的那個讚按鈕都會顯示首頁的"讚"數量;但如果那個按鈕還是使用 data:post.canonicalUrl 或 data:blog.canonicalUrl 參數的話,那麼顯示出來的"讚"數量,就會隨著文章頁面的不同而變動了(變成統計該文章頁面的"讚"數量了)!

而下面的「5. 其他外掛問題」,如果有外掛需要統計首頁的一些資料,原本使用 "<data:post.canonicalUrl/>" 或 "<data:blog.canonicalUrl/>" 的地方必須改用 "<data:blog.canonicalHomepageUrl/>"。


5. 其他外掛問題:如果有用任何外掛需要讀取資料庫的,或是像 WFU BLOG 一樣把 Google 試算表當資料庫,以前儲存的資料都是用 ABCD.blogspot.com 來當索引,現在就會面臨轉址後,在 ABCD.blogspot.tw 的頁面讀不到真實網址 ABCD.blogspot.com 的索引資料。

2012.8.15 增補

如果安裝了 Blogger 官方提供的「Recent posts」、「Recent comments」小工具,由於 Blogger 轉址的關係可能會失效。解決方法有兩種:

1. 按照下一段「四、不讓 Blogger 轉址的方法」,把網址強制恢復 .com,這是個暫時的權宜之計。

2. 到「Blogger 側邊欄相關工具及技巧 (筆記)」找 Abin 版的最新文章、最新回應來安裝,或是我側邊欄的版本「最新文章+縮圖」、「最新回應+留言者各種身份頭像」。


解決方法:現在知道了原理,所有使用 Google 試算表的程式(例如「推文系統」)都要修改 js 程式碼。原本在儲存的時候都是用 top.location.href 來當索引網址,現在必須修改為 "<data:post.canonicalUrl/>" 或 "<data:blog.canonicalUrl/>";同時讀取資料庫時,也要做同樣的動作,把 top.location.href 改為 "<data:post.canonicalUrl/>" 或 "<data:blog.canonicalUrl/>",這樣就沒問題了。


四、不讓 Blogger 轉址的方法

1. 方法: 如果像我的部落格一樣,為了轉址問題要修改的地方很多,那麼「Google 提供」了 "暫時" 強制 blogger 不要轉址的功能,例如:

首頁:ABCD.blogspot.com/ncr
單篇文章:ABCD.blogspot.com/ncr/EFGH.html

如同以上兩個範例,在網址加上 ncr(/) 以後,就可以不被轉址。請注意,這是"暫時"的,表示過一陣子 Google 就會取消這個功能,所以這陣子該做的動作要趕快完成。

2. 感想:這功能看起來很有用,實際上對於不懂 javascript 的人而言,還真是個自我安慰的方法。自己改網址可以不被轉址,問題是所有的訪客看到的還是轉址後的內容啊!!

3. 應用:如果使用 javascript,將網址用「正規表示式」,將 .tw/.in/.fr 等等網域置換成 .com/ncr(/),這樣任何國家的訪客都可暫時看到不被轉址的內容了。

參考「http://www.technoslab.in/2012/02/blogger-ncr-userscript.html」的正規表示式,我將程式碼精簡優化為以下,請放在範本裡 </head> 前:

<!-- 自動轉址 -->
<script>
(function(){
var url = location.href,
check = url.match(/\.blogspot\.(com\...\/|..\/)/);
if (check) {
location.href = url.replace(check[0], ".blogspot.com\/ncr\/");
}
})()
</script>
<!-- -->

存檔後即可看到效果,使用以上語法後,就可讓網站恢復正常狀態,先正常運作避免讓訪客看到異常現象,再來一個一個解決「四、自動轉址產生的問題」。

2012.9.19 補充

近來發現以上語法在本站有異狀:

1. 也許是 Chrome 版本的問題,在 Chrome 下會發生 .com 與 .tw 無限循環而導致開不了網頁的情形,但在其他瀏覽器則無此情形。

2. 也許是我範本裡的 hack 太多,不曉得哪一段與以上語法衝到,導致第 1 點在 Chrome 下的問題,因為在我其他的所有網站,使用以上語法、用 Chrome 開也是沒有異狀。

3. 結論是:在 Chrome 下,以上語法可能會與目前還找不出的語法相衝,導致在 Chrome 下開不了頁面。但如果你的網站使用 Chrome 沒問題的話,就繼續使用以上語法吧!而在我找出原因之前,只好先恢復 .tw 的網址了。

可以慶幸的是,本站之前受轉址影響的 hack 與外掛,在這段期間已經改完程式碼,所以恢復 .tw 網址已經不受影響了。



Blogger 相關文章:


1. Country Specific BlogSpot URLs
2. Why does my blog redirect to a country-specific URL
3. Blogger NCR UserScript

30 則留言:

  1. <3496821144087540319>(以上內容請勿刪除)
    好的,感謝~~ ^ ^

    回覆刪除
  2. 沒看到這一篇都不發現BLOGGER出現轉換...因為我一直用自己的網域……ORZ
    去看別人的網站也很少看網址的尾段……太細心了,這網占也很強大……

    回覆刪除
  3. <5016407502745732877>(以上內容請勿刪除,從括號之後開始留言)
    呵呵,自訂網域就不會受這個事件的影響了,所以你的 blog 並沒有受到影響啊~~那麼還能看完這篇長文也滿有耐心的(just kidding)~~ ^^

    看了你的網站,應該是澳門的朋友,以前看過一些澳門的遊記,建築物很有特色,從你的文章,我就能知道更多澳門的第一手資訊了!

    回覆刪除
  4. <-!自動轉址-> 會被瀏覽器辨識為HTML註解, 而忽略執行javascript.

    回覆刪除
  5. <8933760037416824861>(以上內容請勿刪除,從括號之後開始留言)
    謝謝你的意見, "<"、">" 這兩個符號很難搞對吧 ^^
    另外, 本文程式碼的註解方式是 ok 的~~, 不會影響 js。

    回覆刪除
  6. <7066310889905682023>(以上內容請勿刪除,從括號之後開始留言)
    我使用台灣IP做測試, 你的網址的確顯示 http://wayne-fu.blogspot.tw/
    你可以移除 <!-自動轉址-> 的前後符號看看, 網址結果會不一樣.

    回覆刪除
  7. <872531069866374320>(以上內容請勿刪除,從括號之後開始留言)
    註解在C語言裡部會影響js執行, 但在CSS或HTML裡, 註解符號內的所有語意(包括javascript)會被當作純註解, 然後就不執行了. (HTML5的定義仍維持如此)

    通常在HTML註解js, 會使用 //註解. 或是乾脆用區段註解
    /*--- 自動轉址 ---*/

    回覆刪除
  8. <4055832853603690392>(以上內容請勿刪除,從括號之後開始留言)
    首先非常感謝你熱心的幫我找解決方法, 只是發現我們講的似乎不是同一件事...寫清楚一點好了:

    1.我現在的網址結尾為 tw, 是因為我把 ncr 的那一段 js 程式碼的前後註記起來不讓他執行, 不是因為 <!-- 自動轉址 --> 這個註記而不能執行, 可看我網頁原始碼就知道了.

    2.為何不讓那段 js 程式碼 執行的原因寫在本文的 2012.9.19 補充部分, 把前因後果、不同瀏覽器的執行效果都描述出來了.

    3.js 與 html 的註記方式我整理在「這篇文章」--> Javascript 註記方式

    回覆刪除
  9. <3789757440959032861>(以上內容請勿刪除,從括號之後開始留言)
    哈哈! 原來你是故意不讓js執行. 是我誤解了. 可是哪種hack會讓轉址失效, 真好奇.

    回覆刪除
  10. <2990002380322630312>(以上內容請勿刪除,從括號之後開始留言)
    我也很想知道, 之前在 PTT 的 BLOG 版也有人遇到類似情形, 我應該去問問他~

    回覆刪除
  11. 難怪我常逛的幾個blogspot部落格,發現尾端都會有.hk & .tw...
    還好我有另外買domain name...

    感想:以後在 Blogger 發表爭議性內容之前,先準備一筆經費買個網址,在公海上 Google 才管不到你!

    (猛點頭)~~~

    回覆刪除
  12. <2097783949071326342>(以上內容請勿刪除,從括號之後開始留言)
    ●● 唔..太閃了看不到, 這是一篇空白留言..(沒有網域的人都看不到這一篇 ^^)

    回覆刪除
  13. 實用的文章~
    前陣子逛別人家也有提到搞轉址的事
    我轉換回.com了
    看來問題影響很大 :| (欸

    回覆刪除
  14. <2900399634486887132>(以上內容請勿刪除,從括號之後開始留言)
    是的,一些外掛、小工具很可能會受到影響。

    回覆刪除
  15. 承上次FB按讚次數的疑問後,我想再請教一個問題 http://jinnsblog.blogspot.tw/2013/05/google-drive-save-to-drive-button.html 上面這篇文章,樣版中的FB讚語法我是設成expr:href='data:post.canonicalUrl' 但是若用.tw進去是看不到次數的,要變成expr:href='data:post.url'才能看到 照理說canonicalUrl已把次數歸給.com了,難道要用.com的網址才能看的到?而且若是.com的網址才能看的到的話,那麼為何.tw + 'data:post.url' 這種組合是看的到讚的呢?這有點奇怪

    剛剛試了,語法設成data:post.canonicalUrl,然後網址強制用.com進入文章,還是看不到讚的次數,必需改成data:post.url後才看的到次數 若用data:post.url配.com的網址亦看不到 最後的結果:現在必需設成data:post.url後,再用.tw進入才看的到讚的次數(訪客按讚時,語法是設成data:post.canonicalUrl的)

    回覆刪除
  16. <3752548645792821185>(以上內容請勿刪除,從括號之後開始留言)不好意思,因為不能進入你的範本,所以無法測試效果,不過我覺得不必太在意這件事,也許只是瀏覽器 cache 的問題,導致 debug 找不出原因。

    總之目前 blogger 使用 data:post.canonicalUrl 會是最好的選擇,除非確定自己部落格的訪客只會來自台灣,否則其他區域例如 hk, jp 等等,看你的網頁時網址不會是 tw,到時 "讚" 統計一律是 "零",這樣反而更糟。

    回覆刪除
  17. 可是現在的問題就是:若是用.com進入,看到的就是零,因為我已經設成data:post.canonicalUrl了

    回覆刪除
  18. <1639248477206120313>(以上內容請勿刪除,從括號之後開始留言)以 http://jinnsblog.blogspot.com/2011/10/android-line-instant-messager.html 這篇為例,我用 ncr 的方式強制轉為 .com,在 chrome 及 FireFox 測試,都是看到讚統計 414 次。

    也許你用多個不同瀏覽器測試,可以找出是否為瀏覽器快取的原因。

    回覆刪除
  19. WFU 大大~

    如果我是用這一篇的浮動推文按鈕http://lasjargon.blogspot.hk/2013/04/blogger-float-buttons.html#gplus_comments

    而我該按鈕不論在首頁 / 文章,都是同一個。

    那我改成 data:blog.canonicalHomepageUrl
    還是 data:post.canonicalUrl ?

    除了買網址,強制轉為 .com,不用該工具,還有其他辦法嗎?

    回覆刪除
  20. 另外,我按照這篇文章來改好像也是會個別計算讚....

    可以幫幫忙看看程式碼嗎?

    我做錯了....?

    回覆刪除
  21. <3085880750545933984>(以上內容請勿刪除,從括號之後開始留言)那一篇的程式碼, 沒有放 data:post.url 的地方, 所以不可能改成 data:post.canonicalUrl

    所以那個程式碼是無解的. 看你要不要移除 wyboard, 來恢復 .com 算了, 如果你很在意浮動分享按鈕的話。

    回覆刪除
  22. <6406246364765603513>(以上內容請勿刪除,從括號之後開始留言)我不想 delete Wyboard 這個好東西,只好 delete 浮動分享按鈕 XD

    回覆刪除
  23. 我已經在我的 Blog 的右上角加上一個統計部落格首頁的"+1" 數量的按鈕...

    但我不知在哪裡改成 data:blog.canonicalHomepageUrl ...

    回覆刪除
  24. <5624923175063616304>(以上內容請勿刪除,從括號之後開始留言)把你目前的安裝碼 <div class="g-plusone"></div>

    改成 <div class="g-plusone" data-href="http://konedreamhouse.blogspot.com/"></div>

    這樣就行了

    回覆刪除
  25. <863841724957762143>(以上內容請勿刪除,從括號之後開始留言)Great!感謝 ><

    回覆刪除
  26. 版大您好 我使用blogger 在文章Html 編輯時 網址指向 有時候會用到#號 li a href="#abcd-1 123456789 a li 過沒多久系統會在#號前 加一串導向我的部落格後台 請問這有解決辦法嗎? 由於符號不被接受已去除~

    回覆刪除
    回覆
    1. 可參考「Blogger 文章編輯模式只要切換, 就可能產生異常現象? 教你徹底解決的技巧」http://www.wfublog.com/2014/08/blogger-post-editor-mode-switch-error.html,按這篇的方法進行即可。

      刪除
    2. 感謝回覆 原來是因為切換的時候才會增加一串網址 看了版大的解決方法後 我自己想到一個還不錯的點子 由於他產生的網址是相同的 於是我使用Wold 直接把語法複製後 將網址取代成 "空格" 好像也是行得通~

      刪除
    3. 將來切換的話,還是會產生同樣情形喔,要治本的話還是得參照該篇文章的作法。

      然後,這主題與本文無關,若有後續討論,麻煩移駕相關文章喔~

      刪除

張貼留言注意事項:

◎ 勾選「通知我」可收到後續回覆的mail!
提問請附網址、詳細描述狀況,如提供的資訊不足,則無法回覆。
◎ 請在相關文章留言,與文章無關的主題請至「Blogger 中文論壇」。
◎ 若詢問 CSS 、非官方範本問題、或貴站為商業網站 ,請參考「本站諮詢頁面」→「1. 諮詢服務」
◎ 若留言要輸入語法,"<"、">"這兩個符號請用其他符號代替,否則語法會消失!
◎ 若發現留言不見了,通常是因為 "複製貼上" 的內容常被系統判定為垃圾留言,請不用擔心,我會定期將留言恢復。
◎ 本站「已關閉自刪留言功能」。