616 字
3 分钟
React 19 的文档元数据

页面组件自己声明自己的标题#

React 19 起,<title>、<meta>、<link> 可以在组件的任意位置渲染,React 会把对应的 DOM 节点放进文档的 <head>(React 19 发布说明)。

function ContactPage() {
return (
<>
<title>我的站点:联系我们</title>
<h1>联系我们</h1>
<p>邮箱:support@example.com</p>
</>
)
}

好处是标题跟页面组件待在一起,不必再去某个集中文件里找。客户端渲染、流式服务端渲染、Server Component 都适用。

title 的三条规则#

  1. 子节点必须是单个字符串。这条最容易踩:
// 不行:这样会得到两个子节点组成的数组,直接报错
<title>结果页 {pageNumber}</title>
// 可以:用模板字符串拼成一个
<title>{`结果页 ${pageNumber}`}</title>
  1. 同一时刻只渲染一个 <title>。多个组件同时渲染标题时,React 会把它们全都放进 head,之后的浏览器与搜索引擎行为就是未定义的。

  2. 两个例外不算文档标题:写在 <svg> 里的 <title> 是图形的无障碍说明;带 itemProp 的 <title> 表示页面某一部分的元数据。这两种情况下 React 不做提升。

<meta>、<link> 同样会被提升。样式表有一点额外要求:<link rel="stylesheet"> 与内联 <style> 要带 precedence,React 才会管理它们的插入顺序与去重(发布说明)。

什么时候仍然要元数据库#

官方在发布说明里给了个提醒:你可能仍然想要一个元数据库(例如 react-helmet 一类)。原因是社交分享卡片、多语言标题、按环境拼装这些需求,自己写容易散落在各处。React 给的这套能力解决的是「谁来把标签放进 head」,不是「怎么组织这些数据」。

判断标准很简单:只有两三处标题,直接用;标题规则成体系(模板、多语言、OG 卡片成对出现),就抽一层。

四条边界#

动态内容要等数据就绪再渲染标题。在 use 或请求还没回来时先渲染一个占位标题,用户和爬虫都会看到占位版本。

别在组件里同时渲染 <title> 与某个会在 <head> 里放同名标签的第三方脚本,两者会互相覆盖。

标题字串不要包含换行与多余空白,浏览器会原样保留。

给社交平台用的 <meta> 属性名大小写敏感(property="og:title"、name="description"),抄的时候别改。

第 34 篇,共 39 篇本文属于系列

React 19 的文档元数据
https://www.choria.top/posts/react-document-metadata/
作者
乔瑞雅·克林威尔
发布于
2026-05-02
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

最后更新于 ,距今已过 190 天

部分内容可能已过时