XML 網站地圖

網站地圖 (Sitemap) 是與 Google 溝通最簡單的方式。它們標示了屬於您網站的 URL 及其更新時間,讓 Google 能輕鬆偵測新內容並更有效率地爬取您的網站。

雖然 XML 網站地圖是最知名且最常用的格式,但您也可以透過 RSSAtom,甚至是 純文字 檔案來建立網站地圖,如果您偏好極簡方式的話。

網站地圖是一個檔案,您可以在其中提供有關網站頁面、影片和其他檔案的資訊,以及它們之間的關係。像 Google 這樣的搜尋引擎會讀取此檔案,以更智慧地爬取您的網站。

根據 Google 的說法,在以下情況下您可能需要網站地圖:

  • 您的網站非常龐大:因此 Google 網頁爬蟲更有可能忽略爬取某些新頁面或最近更新的頁面。
  • 您的網站有大量孤立或彼此連結不佳的內容頁面存檔:如果您的網站頁面沒有自然互相引用,可以在網站地圖中列出它們,以確保 Google 不會忽略某些頁面。
  • 您的網站是新建立的且外部連結很少:Googlebot 和其他網頁爬蟲透過跟隨頁面之間的連結來瀏覽網路。因此,如果沒有其他網站連結到您的頁面,Google 可能無法發現這些頁面。
  • 您的網站有大量富媒體內容(影片、圖片)或顯示在 Google 新聞中:如果提供了網站地圖,Google 可以在適當情況下將其中的額外資訊納入搜尋考量。

雖然網站地圖對於良好的搜尋引擎表現並非強制要求,但它們可以協助爬蟲進行爬取和索引,從而讓您的內容更快被收錄並獲得相應排名。

強烈建議使用網站地圖,並在網站新增內容時動態更新它們。靜態網站地圖也是有效的,但對 Google 來說可能較不實用,因為它無法用於持續發現新內容的目的。

如何在 Next.js 專案中添加網站地圖

有兩種選擇:

手動方式:如果您的網站相對簡單且靜態,可以在專案的 public 目錄中手動建立 sitemap.xml

   <!-- public/sitemap.xml -->
   <xml version="1.0" encoding="UTF-8">
   <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
     <url>
       <loc>http://www.example.com/foo</loc>
       <lastmod>2021-06-01</lastmod>
     </url>
   </urlset>
   </xml>

動態方式:如果您的網站是動態的,可以利用 getServerSideProps 來按需生成 XML 網站地圖。

我們可以在 pages 目錄中建立一個新頁面,例如 pages/sitemap.xml.js。這個頁面的目標是呼叫我們的 API 來獲取資料,以便我們知道動態頁面的 URL。然後我們會將一個 XML 檔案作為 /sitemap.xml 的回應寫入。

以下是您可以嘗試的範例:

//pages/sitemap.xml.js
const EXTERNAL_DATA_URL = 'https://jsonplaceholder.typicode.com/posts';
 
function generateSiteMap(posts) {
  return `<?xml version="1.0" encoding="UTF-8"?>
   <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
     <!--我們手動設定已知的兩個 URL-->
     <url>
       <loc>https://jsonplaceholder.typicode.com</loc>
     </url>
     <url>
       <loc>https://jsonplaceholder.typicode.com/guide</loc>
     </url>
     ${posts
       .map(({ id }) => {
         return `
       <url>
           <loc>${`${EXTERNAL_DATA_URL}/${id}`}</loc>
       </url>
     `;
       })
       .join('')}
   </urlset>
 `;
}
 
function SiteMap() {
  // getServerSideProps 將負責主要工作
}
 
export async function getServerSideProps({ res }) {
  // 我們呼叫 API 來收集網站的 URL
  const request = await fetch(EXTERNAL_DATA_URL);
  const posts = await request.json();
 
  // 我們使用文章資料生成 XML 網站地圖
  const sitemap = generateSiteMap(posts);
 
  res.setHeader('Content-Type', 'text/xml');
  // 將 XML 傳送給瀏覽器
  res.write(sitemap);
  res.end();
 
  return {
    props: {},
  };
}
 
export default SiteMap;

延伸閱讀

On this page