Blogger无Noamp标签时加载AMP的条件标签代码失效求助
问题根因
你的代码不生效是三个核心错误导致的:
- 逻辑顺序写反:
data:view.url == data:view.url params { amp: "1" }的判断逻辑是当前访问URL已经携带amp=1参数时才返回真,相当于只有用户已经进入AMP页面才触发AMP逻辑,完全和你要给普通页面启用AMP的需求反过来了,非AMP页的逻辑会被直接拦截。 - 边界场景漏处理:Blogger的静态页(
static_page)本身不存在data:post.labels属性,你把标签判断和静态页判断放在同一个and条件链里,静态页渲染时读取labels属性会直接报错,整个条件返回假,静态页的AMP逻辑永远不会触发。 - 匹配逻辑有兼容问题:直接写
l.name == "Noamp"是大小写敏感匹配,如果你实际建标签时写的是noamp、NoAmp、NOAMP都会匹配失败;同时旧版Blogger模板渲染器对直接嵌套在多条件and里的lambda标签判断存在解析bug,会导致条件判断失效。
修正后可用代码
给html标签添加amp属性的代码
放置在<html>标签内部的属性声明位置:
<b:attr cond='data:blog.pageType in {"static_page", "item"} and not data:view.isAmp and (data:blog.pageType == "static_page" or data:post.labels none (l => l.name case-insensitively equals "Noamp"))' name='amp' value='amp'/>
b:if逻辑判断代码
用来包裹AMP专属组件、自定义AMP逻辑:
<b:if cond='data:blog.pageType in {"static_page", "item"} and not data:view.isAmp and (data:blog.pageType == "static_page" or data:post.labels none (l => l.name case-insensitively equals "Noamp"))'> <!-- 此处插入你的AMP专属逻辑,比如AMP组件引用、AMP广告代码等 --> </b:if>
使用说明
- 不要再自行拼接URL参数判断AMP状态,直接用Blogger官方内置的
data:view.isAmp字段即可,该字段会自动适配站点的AMP格式(不管是参数?amp=1还是路径后缀/amp都能正确识别),不会出现参数匹配错误。 - 标签判断前增加了页面类型前置校验:只有在文章页(item)才会检查是否存在Noamp标签,静态页直接放行AMP逻辑,避免读取不存在的属性报错。
- 标签匹配增加了
case-insensitively大小写不敏感规则,不管标签实际录入的大小写格式是什么,都能正确识别Noamp标签,不会出现漏判。 - 如果需要编写AMP页面内专属的渲染逻辑,直接把判断条件里的
not data:view.isAmp改成data:view.isAmp即可,不用额外写URL匹配规则。
内容的提问来源于stack exchange,提问作者Rievartz
相关产品推荐
相关产品推荐

