我想将 Google for Jobs 添加到我的 11ty (11ty) 网站。我正在使用 Google Jobposting schema 作为参考,并将代码添加到 json 文件中。
json 文件:
{
"layout": "jobpost.njk",
"tags": "post",
"jobs": [
{
"@context": "http://schema.org",
"@type": "JobPosting",
"url": "",
"title": "",
"description": "",
"datePosted": "",
"validThrough": "",
"employmentType": "",
"hiringOrganization": {
"@type": "Organization",
"name": "",
"sameAs": "",
"logo": ""
},
"jobLocation": {
"@type": "Place",
"address": {
"streetAddress": "",
"addressLocality": ""
}
}
}
]
}
然后我添加了名为
google-jobs.njk
文件的 njk 文件,我从其中引用了 json 文件,该文件也将用作生成 Google 职位列表的模板。
google-jobs.njk 文件:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ItemList",
"itemListElement": [
{% for job in jobs %}
{
"@type": "JobPosting",
"url": "{{ url | url | safe }}",
"datePosted": "{{ date | safe }}",
"validThrough": "{{ deadline | safe }}",
"title": "{{ jobTitle | safe }}",
"description": "{{ content }}",
"employmentType": "{{ type }}",
"hiringOrganization": {
"@type": "Organization",
"name": "{{ organization | safe }}",
"sameAs": "{{ website | url | safe }}",
"logo": "https://example.com{{ image | safe }}"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "{{ location | safe }}"
}
}
}{% if not loop.last %},{% endif %}
{% endfor %}
]
}
</script>
最后,我在布局页面中添加了
google-jobs.njk
模板,我想在其中显示职位列表。
<!-- layout.njk -->
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Other head elements -->
{% include "google-jobs.njk" %}
</head>
<body>
<!-- Body content -->
</body>
</html>
问题
除了一个问题之外,代码大部分都按预期工作。在
google-jobs.njk
文件中,url
变量的值不会生成当前职位发布的 URL。只是一片空白。我尝试过{{ url | url | safe }}
、{{ post.url | safe }}
、{{ posts.url | safe }}
、{{ job.url | safe }}
和{{ jobs.url | safe }}
。他们都没有解决问题。
我尝试对职位发布 URL 进行硬编码,看看它是否会输出某些内容(它确实有效)。所以我明白问题与我如何设置数据有关。
知道为什么会发生这种情况吗?我认为这是因为我输入的变量值不正确或者没有正确构建数据。
jobs
数组时,您应该使用 job
前缀访问每个作业的属性(因为这是您在循环中使用的变量名称)。url
,您应该使用 {{ job.url | safe }}
。
仔细检查 JSON 文件的结构。确保
jobs
数组中的每个作业对象都有一个 url
属性和有效的 URL。
您的
google-jobs.njk
文件应类似于:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ItemList",
"itemListElement": [
{% for job in jobs %}
{
"@type": "JobPosting",
"url": "{{ job.url | safe }}", <!-- Updated line -->
"datePosted": "{{ job.datePosted | safe }}",
"validThrough": "{{ job.validThrough | safe }}",
"title": "{{ job.title | safe }}",
"description": "{{ job.description | safe }}",
"employmentType": "{{ job.employmentType | safe }}",
"hiringOrganization": {
"@type": "Organization",
"name": "{{ job.hiringOrganization.name | safe }}",
"sameAs": "{{ job.hiringOrganization.sameAs | safe }}",
"logo": "{{ job.hiringOrganization.logo | safe }}"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "{{ job.jobLocation.address.addressLocality | safe }}"
}
}
}{% if not loop.last %},{% endif %}
{% endfor %}
]
}
</script>
确保您的 JSON 文件已正确链接并加载到使用
google-jobs.njk
的上下文中。
问题是,即使我从
更改为"{{ url | url | safe }}"
,也没有解决问题。"{{ job.url | safe }}"
作业模式的所有其他变量都工作正常,这意味着我相信我的 JSON 文件已正确链接到文件。google-jobs.njk
该 URL 是唯一一个不返回任何内容的 URL。
鉴于 URL 是唯一无法正确显示而其他变量工作正常的属性,这表明该问题特定于
url
属性的处理或构造方式。
首先,确保 JSON 文件中的每个作业对象实际上包含具有有效 URL 的
url
属性。您的 JSON 数据中可能缺少此属性、拼写错误或为空。google-jobs.njk
模板。 JSON 数据集成到您的 Eleventy 设置中的方式可能存在问题。
在
google-jobs.njk
文件中添加调试语句以打印整个 job
对象。这将帮助您准确了解正在传递给模板的数据。
{% for job in jobs %}
<!-- Debug: Print the entire job object -->
<pre>{{ job | dump | safe }}</pre>
<!-- Rest of your template code -->
{% endfor %}
检查您的 Eleventy 配置,确保不存在可能影响 URL 属性呈现的冲突或错误配置。
并仔细检查 NJK 模板中的语法。
safe
过滤器 用于输出原始 HTML,这对于 URL 来说应该是正确的,但请确保没有其他过滤器或操作可能会更改或省略 URL。url
字段。
作为解决方法,您可以提供后备 URL,以防
url
属性未定义或为空。这可以使用 Nunjucks 的默认过滤器来完成:
"url": "{{ job.url | default('default-url-here') | safe }}"