版权声明应置于语义正确的 <footer> 元素中,使用 rel="license" 链接真实可访问的许可证文件,年份交由构建工具或后端静态生成,避免 JS 动态渲染。
HTML 做版权声明页,核心不是堆砌文字,而是让版权信息可访问、可解析、不干扰主内容,且在法律与技术层面都站得住脚。直接放 © 2024 MySite 是最常见也最容易出问题的做法。
用 <footer> 是唯一符合语义和规范的选择。它天然表示页面或章节的结尾归属区域,搜索引擎、读屏器、结构化数据提取工具都会据此识别版权上下文。
不要用 <div class="copyright"> 或 <small> 包裹,前者无语义,后者在 HTML5 中已失去“次要内容”的语义权重;更别用 <span> 或 <h6> —— 它们会破坏文档大纲,还可能被误判为正文噪音。
常见错误现象:
立即学习“前端免费学习笔记(深入)”;
<header> 或 <aside>,导致辅助技术无法定位归属主体lang 属性,中文页里版权文字含英文公司名却没加 <span lang="en">
rel="license" 不是装饰性属性,它的作用是建立当前文档与许可证文本之间的机器可读链接关系。只有当链接目标是真实存在的、可访问的、内容明确的许可证文件时,这个属性才有意义。
例如:
<p>© 2024 MySite. <a href="/LICENSE" rel="license">MIT License</a></p>
如果只是写成:
<p>© 2024 MySite. <a href="#" rel="license">版权所有</a></p>
那 rel="license" 就是语义滥用——链接不可达,内容无定义,反而干扰结构化数据解析(比如 Google Rich Results 测试工具会报 warning)。
关键点:
.txt)或语义清晰的 HTML(含 <h1>MIT License</h1>),避免 PDF 或图片https://spdx.org/licenses/MIT.html
不要。用 JS 渲染年份(如 new Date().getFullYear())看似聪明,实则埋雷:
服务端渲染(SSR)或静态站点生成(SSG)时,JS 还没执行,爬虫和离线阅读器看到的是空值或上一年份;首屏内容出现闪动;部分邮件客户端或 RSS 阅读器根本不执行 JS,版权年份直接丢失。
正确做法是交给构建流程或后端模板处理:
getStaticProps 或 setup() 中注入 currentYear: new Date().getFullYear()
{{ "now" | date: "%Y" }} 或 {{ now.Year }}
© = date('Y') ?> MySite,确保输出是静态 HTML注意:年份范围写法(如 © 2020–2024)需人工维护,不能靠 JS 自动推算起始年——除非你真能可靠追踪该页面首次发布日期。
监听 copy 事件确实能提升版权意识,但效果有限,且容易翻车。
典型错误:
<pre> 或 <code> 块,导致换行丢失或格式错乱clipboardData.setData()(IE 专属),现代浏览器需用 navigator.clipboard.writeText() + 权限请求最小可用实现要包含:
window.getSelection().toString().length >= 30
pre、code 父容器做特殊处理(保留 n)location.origin + location.pathname 拼接来源链接,避免跨环境失效e.preventDefault())既无效又招人烦真正麻烦的从来不是怎么写那行字,而是版权主体变更、合作方署名规则、开源组件合规声明这些背后要对齐的东西。