跳到主要内容

搜索引擎优化(SEO)

Docusaurus 通过多种方式支持搜索引擎优化。

全局元数据

通过站点配置为整个站点提供全局元属性。元数据将使用键值对作为属性名和值,全部渲染在 HTML 的 <head> 中。metadata 属性是声明 <meta> 标签的便捷快捷方式,但也可以使用 headTags 属性在 <head> 中注入任意标签。

docusaurus.config.js
export default {
themeConfig: {
// 声明一些 <meta> 标签
metadata: [
{name: 'keywords', content: '烹饪, 博客'},
{name: 'twitter:card', content: 'summary_large_image'},
],
},
headTags: [
// 声明一个 <link> 预连接标签
{
tagName: 'link',
attributes: {
rel: 'preconnect',
href: 'https://example.com',
},
},
// 声明一些 json-ld 结构化数据
{
tagName: 'script',
attributes: {
type: 'application/ld+json',
},
innerHTML: JSON.stringify({
'@context': 'https://schema.org/',
'@type': 'Organization',
name: 'Meta 开源',
url: 'https://opensource.fb.com/',
logo: 'https://opensource.fb.com/img/logos/Meta-Open-Source.svg',
}),
},
],
};

Docusaurus 开箱即用地添加了一些元数据。例如,如果你已配置 i18n,你将获得 hreflang 备用链接。

要了解更多关于元标签的类型,请访问 MDN 文档

单页面元数据

全局元数据类似,Docusaurus 还允许为单个页面添加元信息。按照此指南配置 <head> 标签。简而言之:

my-markdown-page.mdx
# 烹饪指南

<head>
<meta name="keywords" content="烹饪, 博客" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="preconnect" href="https://example.com" />
<script type="application/ld+json">
{JSON.stringify({
'@context': 'https://schema.org/',
'@type': 'Organization',
name: 'Meta 开源',
url: 'https://opensource.fb.com/',
logo: 'https://opensource.fb.com/img/logos/Meta-Open-Source.svg',
})}
</script>
</head>

一些内容...

Docusaurus 会自动为每个 Markdown 页面添加 descriptiontitle、规范 URL 链接和其他有用的元数据。它们可以通过前置元数据进行配置:

---
title: 搜索引擎的标题;可以与实际标题不同
description: 此页面的简短描述
image: 在社交媒体卡片中显示的缩略图
keywords: [描述主要主题的关键词]
---

在创建 React 页面时,在 Layout 中添加这些字段也会提高 SEO。

提示

建议对 descriptionkeywords 等字段使用前置元数据:Docusaurus 会自动将其应用于 descriptionog:description,而使用 <head> 标签时,你需要手动声明两个元数据标签。

信息

官方插件都支持以下前置元数据titledescriptionkeywordsimage。请参考它们各自的 API 文档以获取额外的前置元数据支持:

对于 JSX 页面,你可以使用 Docusaurus 的 <Head> 组件。

my-react-page.jsx
import React from 'react';
import Layout from '@theme/Layout';
import Head from '@docusaurus/Head';

export default function page() {
return (
<Layout title="页面" description="React 页面演示">
<Head>
<meta property="og:image" content="image.png" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="preconnect" href="https://example.com" />
<script type="application/ld+json">
{JSON.stringify({
'@context': 'https://schema.org/',
'@type': 'Organization',
name: 'Meta 开源',
url: 'https://opensource.fb.com/',
logo: 'https://opensource.fb.com/img/logos/Meta-Open-Source.svg',
})}
</script>
</Head>
{/* ... */}
</Layout>
);
}
提示

为方便起见,默认主题的 <Layout> 组件接受 titledescription 作为 props。

静态 HTML 生成

Docusaurus 是一个静态站点生成器——为每个 URL 路由静态生成 HTML 文件,这有助于搜索引擎更容易地发现你的内容。

图像元描述

图像的 alt 标签告诉搜索引擎图像是关于什么的,并在图像无法视觉显示时使用,例如使用屏幕阅读器时,或图像损坏时。Alt 标签在 Markdown 中通常是支持的。

你还可以为图像添加标题——这对 SEO 影响不大,但在悬停在图像上方时会显示为工具提示,通常用于提供提示。

![Docusaurus 横幅](./assets/docusaurus-asset-example-banner.png '图像标题')
http://localhost:3000

Docusaurus 横幅

丰富的搜索信息

Docusaurus 博客开箱即用地支持丰富的搜索结果,以获得最大的搜索引擎体验。信息的创建取决于博客/全局配置中的元信息。为了获得丰富搜索信息的好处,请填写关于文章发布日期、作者和图像等的信息。在此处阅读更多关于元信息的内容。

Robots 文件

robots.txt 文件调节搜索引擎对哪些应该显示、哪些不应该显示的行为。你可以将其作为静态资源提供。以下内容将允许所有请求访问所有子页面:

static/robots.txt
User-agent: *
Disallow:

Google 文档中阅读更多关于 robots 文件的内容。

注意

重要robots.txt 文件不会阻止 HTML 页面被索引。

要阻止整个 Docusaurus 站点被索引,请使用 noIndex 站点配置。一些托管提供商可能还允许你配置 X-Robots-Tag: noindex HTTP 标头(GitHub Pages 不支持此功能)。

要阻止单个页面被索引,请使用 <meta name="robots" content="noindex"> 作为页面元数据。阅读更多关于 robots 元标签的内容。

站点地图文件

Docusaurus 提供 @docusaurus/plugin-sitemap 插件,默认情况下随 preset-classic 一起提供。它自动生成 sitemap.xml 文件,在生产构建后将在 https://example.com/[baseUrl]/sitemap.xml 处可用。这个站点地图元数据帮助搜索引擎爬虫更准确地爬取你的站点。

提示

站点地图插件会自动过滤包含 noindex robots 元指令的页面。

例如,/examples/noIndex 不包含在 Docusaurus sitemap.xml 文件中,因为它包含以下页面元数据

<head>
<meta name="robots" content="noindex, nofollow" />
</head>

Docusaurus 使用你的文件名作为链接,但你可以随时使用别名更改它,详情请参见此教程

结构化内容

搜索引擎依赖 HTML 标记,如 <h2><table> 等,来理解网页的结构。当 Docusaurus 渲染你的页面时,使用语义标记,如 <aside><nav><main>,来划分页面的不同部分,帮助搜索引擎定位侧边栏、导航栏和主页面内容。

大多数 CommonMark 语法都有其对应的 HTML 标签。通过在项目中一致地使用 Markdown,你将使搜索引擎更容易理解你的页面内容。