在Eleventy网站中添加Google for Jobs

问题描述 投票:0回答:1

我想将 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 进行硬编码,看看它是否会输出某些内容(它确实有效)。所以我明白问题与我如何设置数据有关。

知道为什么会发生这种情况吗?我认为这是因为我输入的变量值不正确或者没有正确构建数据。

url nunjucks eleventy
1个回答
1
投票

在您的 NJK 模板中,当您迭代

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 数据中可能缺少此属性、拼写错误或为空。
暂时在 JSON 文件中对作业对象之一的 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 }}"
© www.soinside.com 2019 - 2024. All rights reserved.