無法讀取及訂閱 WordPress Feed 問題修正

前幾天收到朋友的 feedback ,新站的 MUKI space* 無法訂閱 blog ,我使用 WordPress 的內建 feed 網址測試了一下,果然出現了如下圖的詭異錯誤 XML declaration allowed only at the start of the document

如果你跟我一樣碰到類似的錯誤訊息,不妨參考以下步驟檢查自己的 Blog ,並且逐一修正解決:

在解決問題前,我們先來了解為什麼會發生這樣的錯誤吧!

先開啟你的 Blog feed 網址,通常都是 Blog 位置 + /feed ,像我的就是http://muki.tw/feed,接著對著頁面按右鍵開啟原始檔,會看到以下這段 code 。

通常會發生錯誤,就是因為第 1 行沒有任何字元,這個空白字元斷行的問題,造成了 RSS 無法解析第一行,因此產生錯誤。

也就是說,正常的 RSS xml 第一行就應該是<?xml version="1.0" encoding="UTF-8"?>

瞭解錯誤原因後,開始來 Debug 吧!

確認檔案編碼以及空白字元

通常會造成這樣的原因,跟 php 語法有關。在 php 的開頭以及結尾,不應該有多餘的空白或是多餘的行數。也必須確保 <php>, <?>之間沒有任何空格。

另外,在佈景主題編碼的部分,也記得修改為 UTF-8 (不含 BOM )

詳細的圖文教學,可以參考香腸之前寫的解決 WordPress 的 RSS 輸出錯誤問題
(當然,如果我當初照著香腸的文章解掉了 Feed 問題,我也不用再寫這一篇了 OTL )

除了香腸文章提到的 functions.php 外,記得也要檢查以下這些檔案的編碼以及空白字元:

  • wp-includesfeed-rss.php
  • wp-includesfeed-rss2.php
  • wp-includesfeed-atom.php

利用插件修正 RSS 檔案

如果你手上沒有編輯器,也不知道該怎麼檢查這些檔案的字元,我們可以使用 WordPress plugin 來幫我們做修正。

  • 插件名稱: fix-rss-feed
  • 下載位置: http://wordpress.org/extend/plugins/fix-rss-feed/
  • 使用說明:檢查檔案字元並修正,同時可以幫你解決 feedburner 燒 feed 時候出現的錯誤"Error on line 2: The processing instruction target matching "[xX][mM][lL]" is not allowed."
  • 使用方法: 啟用插件後,記得先將 WordPress 根目錄下的wp-blog-header.php檔案權限設為666,不然如果檢查出錯誤,也無法幫你寫入喔。
    設好檔案權限後,請先點選「Fix wordpress rss feed error」,他會幫你列出所有需要修正的錯誤訊息。確認沒甚麼問題的話,按下「Resotre Fix」就會開始幫你修正空白字元囉。
    ▼ 參考位置

停用插件或降版本

到這還是有問題的話,我們可以檢查 WordPress 檔案版本是否為最新版?通常解決方法是停用插件,一個一個測試。可能是插件跟最新版本之間有衝突。
或者你也可以選擇降 WordPress 版本,正體中文的舊版本可以到 WordPress | Taiwan 正體中文站下載,記得不要覆蓋到 wp-config.php喔。

更新插件或降版本後,請再重新瀏覽 feed ,看看是否有成功? 或者是可以安裝一個清快取的插件,清除快取後再重新整理測試看看。

重新驗證你的 RSS Feed

如果重新整理了 N 百次,還是出現同樣的錯誤畫面,有可能是快取的問題,我們可以試試這個方法:重新驗證 RSS feed。
請到Feed Validator for Atom and RSS輸入你的部落格網址,他會自動偵測你的 Feed 位置,以及確認有沒有錯誤。

在前面這些方法都試過後,我重新整理還是一樣有錯,所以心灰意冷之餘就找到了驗證 Feed 的網站,抱著姑且一試的心態輸入發現驗證居然通過了!! 如果你跟我一樣,驗證通過,表示 Feed 應該是成功解決了,只是可能因為快取問題所以無法看到, (朋友跟我說 WordPress Feed 的快取有 12 小時的樣子)。

如果不趕時間的朋友,可以試著等半天的時間,再清除快取、重新整理瀏覽器,看看 Feed 是否有成功。
如果你很急著想要把 RSS feed 啟用,建議如果驗證成功,可以用 feedburner 將你的 Feed 給燒出來,如果有通過驗證應該是可以成功燒出 Feed。

因為我自己到這一步就成功燒出 RSS feed 了,所以沒有再往下去探究其他原因,也希望如果各位碰到這樣的問題,希望以上這些步驟就可以解決,如果還是不行的話,不妨先等 12 小時再重新確認 Feed 喔。

最後也歡迎大家訂閱我的 Blog,訂閱網址:http://feeds.feedburner.com/mukispace