pubdate 属性已从 html 标准中移除,浏览器完全不解析,必须用 datetime 属性配合语义化结构和 schema.org 微数据来准确标识文章发布时间。

pubdate 属性已彻底失效,现代 HTML 中写上等于没写——浏览器不解析、DOM 查不到、标准已移除。想表达“这是文章发布时间”,得靠 datetime + 合理结构 + 辅助语义组合实现。
为什么 document.querySelector('time[pubdate]') 总是 null
所有主流浏览器(Chrome/Firefox/Safari/Edge)从 2014 年起就停止支持 pubdate。W3C HTML5.3 和 WHATWG Living Standard 均将其标为 obsolete。它不是“兼容性差”,而是根本不存在于解析器中。你手写 <time pubdate datetime="2026-05-23">今天</time>,DOM 里连这个属性名都不会出现。
-
document.querySelector('time[pubdate]')永远返回null -
getComputedStyle(timeEl).content或其他属性读取不到任何影响 - Google Rich Results Test 会直接忽略该元素,提示 “Missing field ‘datePublished’”
datetime 是唯一有效且必须写的属性
datetime 不是可选项,它是 <time></time> 的语义命脉。没它,<time></time> 就退化成普通 <span></span>,对 SEO、屏幕阅读器、日历导入全无意义。
- ✅ 正确:
<time datetime="2026-05-23">今天</time>(纯日期,零填充) - ✅ 正确:
<time datetime="2026-05-23T10:30:00+08:00">上午10:30</time>(含时区,T 不可省) - ❌ 错误:
<time datetime="2026/05/23">今天</time>(斜杠非法) - ❌ 错误:
<time datetime="2026-5-23">今天</time>(月/日缺零) - ❌ 错误:
<time datetime="2026-05-23 10:30">上午10:30</time>(缺 T,缺时区)
如何让机器识别“这是发布时间”而非普通时间点
没有 pubdate,浏览器和爬虫靠上下文推断。关键在三点:位置、唯一性、辅助信号。
- 把发布时间放在文章主内容区域第一个
<time></time>元素里(如<article><header><time ...></time></header></article>) - 避免在页脚或侧边栏重复塞一个
<time></time>,否则可能被误判为更新时间或版权年份 - 加
aria-label="发布于 2026年5月23日"提升读屏体验(注意:不要和datetime冲突,值需一致) - 用 Schema.org 微数据强化意图:
<article itemscope itemtype="https://schema.org/Article"><meta itemprop="datePublished" content="2026-05-23"></article>
服务端渲染时最容易踩的坑
动态生成 datetime 值时,别信 toLocaleDateString() 或手拼字符串。它们输出非标准格式,且隐含本地时区,一部署就错位。
- 要 UTC 时间:用
new Date().toISOString()(返回类似"2026-05-23T10:30:00.123Z") - 要带 +08:00 的本地时间:用
Intl.DateTimeFormat('zh-CN', { timeZone: 'Asia/Shanghai', format: 'extended' })配合formatToParts()拼接,或用date-fns/formatISO(date, { format: 'extended' }) - 绝对不要:
date.getFullYear() + '-' + (date.getMonth()+1) + '-'+ date.getDate()—— 漏补零、无时区、夏令时翻车全在这儿
真正难的不是格式写对,而是确保 datetime 值在 CDN 缓存、海外爬虫、不同设备上都指向同一个绝对时间点。漏掉时区或依赖本地时间,会让“发布于今天”在东京变成昨天,在旧金山变成后天。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











