[廚餘回收] Google Search Console(GSC)報了「id」欄位未填(Missing field “id”)的錯誤

Google Search Console 從 2019/09/13 開始就報了一個 「id」欄位未填(Missing field “id”)的錯誤,影響網站的頁面有三萬多頁,這不得了。

仔細查看發現是麵包屑出了問題,麵包屑是 SEO 的重點之一,它出了問題是會影響網站的搜尋排名。

拿這個錯誤訊息去 Google 其實沒有什麼有幫助的資訊,還好 Google Search Console 有提供一個工具叫結構化資料測試工具,將我們有問題的網址或程式碼片段貼上去,它會幫我們指出發生錯誤的地方,我就隨便選了一頁有問題的頁面貼上去看看,然後按下「執行測試」。

它馬上指出了麵包屑有 4 個錯誤,展開錯誤清單之後,點選該錯誤會直接跳到發生錯誤的程式碼,這部分很友善。

我被 "id" 這個字眼浪費了半個小時,我嘗試在在麵包屑中加入 id="xxx" 屬性,也嘗試增加一個 <span itemprop="id">xxx</span> 的節點,都沒有用,反而還造成更多的錯誤,找了半天沒有答案,最後所幸去找一個符合規則的麵包屑來看看差在哪裡? 在 Google 關於 Breadcrumb 的文件當中有一個 See Markup 的按鈕,點下去之後 Google 會把它自己符合規則的麵包屑範例,在剛剛提到的結構化資料測試工具中打開,我們使用的麵包屑格式是 Microdata,所以我就選擇該格式並按下 See Markup 查看範例。

範例打開後,我發現它的麵包屑是有解析出 id 欄位的,但是它的麵包屑當中卻沒有任何 id 的字眼。

這讓我得到一個結論,麵包屑只要符合格式,有些欄位在搜尋引擎解析的時候,自動就會出現,所以整個問題方向轉而指向格式出了問題,仔細跟 Google 的範例比對之後,發現我們的麵包屑多了一個 itemscope

itemscope 是用來標記目前的 DOM 是一個麵包屑項目,而我的 <a> 標籤其實是麵包屑的 item,是不需要 itemscope 屬性的,另外還有一個我覺得是 Google 的範例有點小錯誤的地方,因為在 W3C 關於 Microdata Items 的定義中 itemtype 是沒有必要出現在沒有 itemscope 的標籤中,而 Google 的範例卻出現了,因此我決定照著標準來,將麵包屑的 itemscope 及 itemtype 都拿掉,拿掉之後再給結構化測試工具測一次,麵包屑的錯誤就不見了。

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學