自己写 head 看起来很爽:title 想改就改、description 想加就加、CSS 顺序自己定。不用管插件,不用猜它在哪插了一行。
caogenbj 原来就是这么干的:header.php 里手写了 title、description、favicon、两个 CSS、两个 JS,一行 wp_head() 都没有。
但这么干了之后,我付出了三个代价。
这个上一篇讲过了。wp_head() 是出口,没有出口,插件进不来。
我当时还觉得“我不用插件不就行了”——但后来发现,很多东西(缓存、SEO、安全、备份)还是插件更省事。你把门关死,等于放弃了整个生态。
这个代价更隐蔽。手写 description 的时候,我写的是:
<?php
$miaoxu = description();
?>
<meta name="description" content="<?php echo $miaoxu; ?>" />
而这个 description() 函数里,取正文用的是 get_the_content()——它不会执行短代码。
结果就是:文章里如果有 这种短代码,description 里会原样出现 。读者在搜索结果里看到的是一串中括号。
更糟的是,description() 里还用 wp_trim_words($description, 130) 截断——这个函数按“空格”分词,中文整段没空格,等于不截断,描述长度失控。
这两个问题,插件本来会帮你处理(SEO 插件对 description 有专门的处理逻辑)。手写就全得自己兜。
手写 head 是“静态”的。以后想加个 OG 标签、加个结构化数据、加个站点验证 meta,都得手动改 header.php。
而且这些标签分散在 head 各处,改起来容易漏、容易冲突(比如 title 输出了两遍)。
head 只留最小的框架:
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php wp_head(); ?>
</head>
具体的 title、description、canonical、OG、JSON-LD,用两种方式之一:
wp_head() 输出);head-seo.php,在 wp_head() 之前 include 进来。我选了第二种,因为我不想为了几个标签装一个重插件。关键是:这些标签集中在一个文件里,改起来方便,也不会跟插件打架。
如果你既自己输出 title/description,又装了 SEO 插件,会出现两个 title、两个 description。这比没有更糟。
所以二选一:要么全交给插件,要么全自己来。别混着。
一句话记住:手写 head 的代价是“插件失效 + 标签写错 + 维护成本高”;正确做法是 head 只留框架 + wp_head,细节集中在自己的 head-seo 或交给插件。
下一篇开始讲“零件”:先是导航菜单。