<title>是<head>中唯一强制要求的子元素,其余如<meta><link><style><script>等虽可选但须合法;<img><body><html>等标签严禁放入<head>,否则破坏文档结构。

<title> 是唯一强制要求的子元素,其余都可选。但不是所有标签都能合法出现在 <head> 里,错放会破坏文档结构或触发浏览器降级行为。
哪些元素能合法出现在 <head> 中
HTML5 规范明确定义了 <head> 的合法子元素,共 10 类(含部分已废弃但仍有兼容性的):
-
<title>:必须有且仅一个,纯文本内容,不可嵌套任何标签 -
<meta>:用于字符集、视口、描述等元信息;<meta charset="UTF-8">应放在最顶部 -
<link>:链接外部资源,如rel="stylesheet"、rel="icon"、rel="preconnect" -
<style>:内联 CSS,不推荐大量使用,但语法上完全合法 -
<script>:可放,但无defer或async时会阻塞解析,影响<title>渲染 -
<noscript>:仅当 JS 被禁用时生效,内容需为纯 HTML 片段 -
<base>:定义页面内所有相对 URL 的基准地址,最多一个,且不能出现在<script>或<link>后 -
<template>:HTML5 新增,用于声明客户端模板,内容不渲染 -
<manifest>:已废弃(被web app manifestJSON 文件取代),现代项目不应再用 -
<isindex>:远古遗留标签,早已被移除,任何新项目都不要出现
<body> 和 <html> 相关标签为什么不能进 <head>
这不是“建议不放”,而是语法错误:
-
<body>与<head>是同级兄弟元素,嵌套会导致 HTML 解析器自动纠错(比如把<body>移出<head>并补全缺失结构),结果不可控 -
<html>根标签本身不能作为任何元素的子元素,更不可能出现在<head>内 - 常见误写如
<head><body>...</body></head>,浏览器会把它重排成<head></head><body>...</body>,但 W3C 验证直接失败
顺序问题比“能不能放”更常引发线上故障
很多问题不是因为用了非法标签,而是合法标签放错了位置:
立即学习“前端免费学习笔记(深入)”;
-
<meta charset="UTF-8">必须是<head>内第一个标签,否则浏览器可能已按默认编码(如 ISO-8859-1)解析了前面的<title>,导致中文标题乱码 -
<meta name="viewport">应紧随<meta charset>,晚于它可能导致移动端初始缩放异常 -
<link rel="preload">或<link rel="preconnect">放得越靠前,浏览器越早发起请求,但不能在<meta charset>之前 - 无
defer的<script>若出现在<title>前,会阻塞整个<head>解析,标签页长时间显示空白或默认标题
真正容易被忽略的不是“有哪些可用”,而是“哪个该放第几行”。<title> 看似最简单,但它依赖前面的 <meta charset> 才能正确显示——这个依赖关系没有语法报错,只有乱码或 SEO 失效时才暴露出来。



















