SEO 百科

模板引擎

本页目录

模板引擎

模板引擎 是一种把数据填进页面骨架、生成最终 HTML 的工具[1]。做 SEO 的人需要认识它,因为页面顶部的标题、描述和结构化数据都由它输出,模板写错,这些字段就会缺。理解它,就能判断一个站的页面是服务端拼好的,还是留给浏览器渲染。

把数据填进 HTML 的过程

模板是一段带占位符的 HTML。程序把数据交给模板,模板在服务器上渲染出完整页面。Jinja 官方说,模板里的占位符允许写代码,写法接近 Python,模板拿到数据后渲染出最终文档[1]。

占位符一般写成双花括号,例如 {{ article.title }}。程序读出文章标题,填入这个位置,输出的 HTML 里就是真实标题。

<head>
  <title>{{ article.title }}</title>
  <meta name="description" content="{{ article.summary }}">
</head>

PHP 常用 Twig 和 Smarty,Python 常用 Jinja2 和 Django 模板,Node.js 常用 EJS 和 Handlebars。静态站点生成器同样用模板,只是渲染放在构建阶段。

常见实现与取舍

Twig 官方说它把模板编译成优化的 PHP 代码,额外开销降到很低,并且默认对输出做转义[2]。转义是指把数据里的尖括号这类符号换成安全形式,防止内容破坏页面结构。

Django 官方说明,模板可以用继承的方式复用,子模板只写自己独有的部分[3]。基模板里放好标题和描述的位置,各页面填自己的内容。

引擎 常用语言 特点
Twig PHP 编译成 PHP 代码,默认转义[2]
Jinja2 Python 语法接近 Python[1]
Django 模板 Python 内置继承机制[3]
EJS / Handlebars Node.js 前端与构建工具中常见

输出位置决定收录结果

模板引擎在服务器端渲染,输出就是完整 HTML,正文、标题、描述都在里面。这类页面爬虫一抓就拿到内容,收录不依赖 JavaScript。

把渲染放到浏览器里就不同了。页面骨架先发出去,正文由 JavaScript 再填,初始 HTML 可能是空的。MDN 在介绍服务端编程时把这种差别讲得很清楚:服务端代码把数据放进模板占位符,动态生成 HTML 页面;单页应用则把大量计算从服务器移到浏览器[5]。

百度把收录概括为“从互联网抓取网页、建立索引数据库、将索引库中数据展现给用户”[4]。抓取这一步拿到的就是服务器发回的 HTML。

结构化数据也由模板输出。一段 JSON-LD 里某个字段填错,整条标记就失效。

常见误用

一种误用是模板里漏写标题与描述。页面正文没问题,title 却是固定的站点名,一批页面共用一个标题。

另一种误用是把正文交给前端模板。服务器只发空骨架,正文要等浏览器渲染,爬虫读不到。

还有一种误用是转义关掉。模板不对输出做转义,正文里的尖括号被当成标签解析,页面结构会乱。

附录

参见

参考资料

官方(境外)

  1. 《Jinja Documentation》,Pallets。
  2. 《Twig》,Symfony。
  3. 《Django at a glance》,Django Software Foundation。

官方(国内)

  1. 《百度搜索的工作原理》,百度搜索资源平台,2023-12-21 更新。

第三方

  1. 《客户端服务端交互概述》,MDN Web Docs,Mozilla。

外部链接

无。