Jekyll中<head>内Liquid语法为何显示在<body>而非正常解析?
解决Jekyll中内Liquid语法跑到显示的问题
排查与修复步骤
先检查HTML结构的闭合问题(最容易踩坑!)
很多时候这种问题都是因为<head>标签没正确闭合,或者<body>标签提前打开了。比如你在布局文件(比如_layouts/default.html)里可能不小心漏写了</head>,导致Jekyll把本该在里解析的Liquid代码直接丢到里。举个错误的例子:
<head> <meta charset="utf-8"> {% seo %} <!-- 这里漏了</head>!直接开<body>了 --> <body>一定要确认
<head>有完整的闭合标签,而且必须在<body>标签之前。检查Liquid语法是否完整无错误
你提到的描述标签里的Liquid代码好像没写完({% if page.excerpt %}{{ page.ex...),如果Liquid代码有语法错误(比如缺了{% endif %}),Jekyll就会直接把这段代码原封不动输出到页面上。正确的写法应该是完整的条件判断:<meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">另外,要确保
page.excerpt能正常工作——在_config.yml里加一行excerpt_separator: "<!-- more -->",然后在你的文章里用这个分隔符来生成摘要。确认jekyll-seo-tag的配置和使用没问题
- 先检查
_config.yml里有没有正确配置seo插件:title: 你的站点名称 description: 站点的默认描述 author: name: Gino Ludikhuyze plugins: - jekyll-seo-tag - 确保
{% seo %}标签是直接放在<head>里面的,没有被嵌套在其他未闭合的HTML标签里。
- 先检查
清理缓存后重新构建
Jekyll有时候会缓存旧的渲染结果,哪怕你改了代码也不生效。试试这两条命令彻底清理后重新生成:bundle exec jekyll clean bundle exec jekyll build检查模板文件的扩展名
要确保你的布局文件和页面文件是.html或者.md格式(如果是md文件,记得在前端 matter里指定布局),要是用了.txt之类的扩展名,Jekyll不会解析里面的Liquid语法,自然会直接输出到页面上。
内容的提问来源于stack exchange,提问作者Gino Jan Ludikhuyze
相关产品推荐
相关产品推荐

