關於 web service, unity, blogger 等軟體工程筆記

Blogger 文章搬家且不遺失 Google 排行索引的搬家筆記

Edit icon 沒有留言
Blog migration
注意:這僅適用於已經使用自定義網域的部落格,並不適用於要遷移已存在的部落格到剛購買的新網域。

搬移部落格需求

自從開始看一些部落格教學後,從中重新思考為什麼要寫部落格,更重要的是,思考部落格主題是什麼。審視目前的部落格,主要分成兩大塊主題,一大部分是自己的生活,另一塊是軟體開發的筆記。從那些部落格教學材料中,了解有明確主題是比較好的,因此開始考慮將一部分的軟體開發文章,轉移到另一個部落格去。

一個重要需求是,搬文章且保留搜尋引擎的索引排行 (Google rank),某些文章已經擁有些重要關鍵字索引權重,若只是單純複製原有的文章到另外的部落格,原本部落格的文章刪除,那麼索引排行會全部遺失,從搜尋引擎來的流量,將會一切歸零重來,雖然對目前自己沒什麼流量的部落格來說,這一點都不重要吧。

搬移部落格計畫

整個計畫再開一個部落格,繼續選用 Blogger 服務,放置軟體開發的文章,圖片不打算重新上傳,仍然使用 Blogspot 空間。然後建置一個網站服務,將該些軟體開發主題的文章從舊的部落格空間導入到這新開的部落格

  • 使用 Blogger 工具匯出所有文章
  • 開另一個 Blogger,使用工具匯入剛剛匯出的文章檔案
  • 手動保留軟體開發的文章,其他文章以及草稿則是刪除
  • 其他設定則是按照需求調整,例如版型說明等等
  • 特別是搜尋引擎使用的爬蟲文件 robots.txt,按照之前的文章設置
  • Blogger 匯入系統沒辦法正確匯入舊文章的自訂文章網址,也沒有保留額外的搜尋說明 (description)。幸好目前文章數不到百篇,先手動從舊部落格把這些資訊複製到新的部落格文章中
  • 圖片則是不處理,繼續放在原本的圖片空間
  • 文章留言採用 Disqus 系統,則是到該系統後臺搬移

接著是比較麻煩的部分,保留搜尋引擎索引的方法,按照 webmaster 文章的建議,搬家最好使用 HTTP 301 轉址,而不是使用 <meta refresh> 或是任何 JavaScript 的方式轉址,但是 Blogger 可能因為某些安全機制問題 (例如被用來作為惡意廣告用途),沒有提供 HTTP 301 轉到其他的網域的功能……。

使用 HTTP 301 的轉址服務

既然 Blogger 不支援,那自己弄套服務來做這件事情吧。原先的架構如下,當用戶 (client) 向 blog.twsiyuan.com 要求文章時,先向域名系統 (Domain name system, DNS) 要求該域名的 IP,該 IP 指向 Blogger 伺服器,建立連線取得伺服器的內容,呈現文章結果:

原始要求流程

弄套服務,將架構改成以下,當用戶端向 blog twsiyuan.com 要求,從域名系統拿到的不再是 Blogger 系統的 IP,而是架設在 AWS 伺服器的位置,建立與該伺服器連線要求文章內容,該伺服器再向 Blogger 伺服器要求文章內容,把內容做些調整後,再將修改後的內容回應給用戶端:

新的要求流程

如果發現用戶要求是軟體主題的文章,則是送出 HTTP 301,並設定 header Location,讓用戶瀏覽器自動跳轉 (RFC7231) 到新的部落格中:

新的要求流程 with HTTP 301

特別注意是 robots.txt,該架在 AWS 的伺服器特別準備一份設定,而非向 Blogger 拿舊有的部落格的設定。因為為了避免舊部落格不再使用自訂網域後,其部落格在 Blogger 上的位置 twsiyuan.blogspot.com 會被搜尋引擎建立另一份索引,所以其 robots.txt 將設定為拒絕建立索引的狀態。

  • 在 AWS 建立部落格轉址服務
  • 移除原先的 CName record,並建立 A record,確保 blog.twsiyuan.com 指向架在 AWS 的伺服器 IP 位置
  • 移除舊 Blogger 的自訂網域設定
  • 修改舊 Blogger 上的 robots.txt 設定,拒絕建立索引 ***Disallow: * ***

可能的問題

  • Blogger 系統內部統計資料會失效

    • 熱門文章會受到影響,將無法「正確」顯示
    • 用戶端不再直接跟 Blogger 系統拿內容,而是透過類似代理方式取得,且實作又不處理 Cookies,會造成此問題
    • 由於部落格已經改採用 Goolge analysis 來統計流量,所以 Blogger 內部統計就不管了,熱門文章頁面則是放棄從部落格中移除不再顯示
  • 文章的站內文章連結問題

    • 部分未搬移文章中,有連結到搬移到另一部落格的文章,若沒辦法長期維持這服務,連結是有可能失效
    • 之後手動調整文章連結,這應該也是大工程吧

至於其他可能的問題,之後注意到再紀錄。

實作 HTTP 301 轉址服務

概念想法很簡單,怎麼實作比較困難。由於工作上使用 Golang 來開發服務應用,且 Golang 相當適合寫這種簡單的服務架構,因此採用 Golang 來實作。

專案程式碼已經放置在 Github 上,可以點下圖連結查看。為了求開發簡單,除了轉址文章對應表寫在外部檔案外,其他位置設定以及 robots.txt 都直接寫死在程式中。

View code on Github

唯一注意的是,建立 http.Request 向 Blogger 要求回來的內容,必須經過轉換處理,將內容連結 twsiyuan.blogspot.com 以及 twsiyuan.blogspot.co.jp(因為服務架設在日本,拿到日本的位置),文字取代成 blog.twsiyuan.com。

s = strings.Replace(s, "twsiyuan.blogspot.jp", "blog.twsiyuan.com", -1)
s = strings.Replace(s, "twsiyuan.blogspot.com", "blog.twsiyuan.com", -1)

後來想想,如此簡單的服務應該可以使用 AWS Lambda (serverless service),自己租台伺服器 EC2 似乎有點太浪費了,且安全性好似不是很穩,被攻擊可能一下就炸了。

搬家後感想

一開始想好部落格主題,就不用如此麻煩,幸好之前就使用自定義的網域,才能如此這樣搞。想想流量又沒有這麼多,也沒有建立廣告營收,何必這麼費功夫,一切重來就可以了呢。

沒有留言: