求人情報の構造化

Web

Google for jobsに対応した構造化データを実装する

Google for jobsに情報を伝えるために、構造化データWordPressに適応させようと調べたので、メモ。元々、WordPressにMicrodata方式でテンプレートを作成していたが、リッチリザルトテストでエラーが発生しているのを見過ごしていました。修正をする際に、他の人はどうやっているのだろうといくつかのページをチェックした結果、JSON-LD方式の方が使い勝手が良さそうと判断し、作り変えることに。

求人情報(JobPosting)の構造化データ | Google 検索セントラル  |  ドキュメント  |  Google for Developers
求人情報(Jobposting)の構造化データ(schema.org)のマークアップ、実装例をご紹介。実装すると Goo…

元々Microdata方式で構造化データを渡していた

元々カスタム投稿タイプACFを使って求人票の入力画面を作っていました。あまり難ししないように、パンくずリストと同様にタグに直接埋め込む以下のようなMicroData方式を採用。しかし、google for jobsに掲載されている他の求人を見るとdescriptionの情報が自分のよりも豊富なことに気づいたのです。どうやっているのかなとソースを見ると、JSON-LD方式で情報を渡しているではありませんか。そこで、phpで情報を追加していることに思い至りました。それならJSON-LD方式一択だと書き換えることに。

<div itemscope itemtype="https://schema.org/JobPosting">
<dl>
<?php
 $field_work = get_field_object('work_g', $post->ID);
 $field_description = get_field_object('description_g', $post->ID);
 if($field_work['value'] || $field_description['value']):
?>
<dt>
<span><?php echo nl2br( $field_work['label']); ?></span>
</dt>
<dd>
<span itemprop="description"><?php echo nl2br( $field_work['value'] ); ?></span>
<span><?php echo nl2br( $field_description['value'] ); ?></span>
</dd>
<?php endif ; ?>
</dl>
</div>

JSON-LD方式に変更する

さっそくネットで調べると結構情報があります。その中で下記サイトがやりたいことに近かったため、参考にしました。

Google for Jobs(Googleしごと検索)に求人を掲載する方法
Google for Jobsに求人を掲載するための方法を紹介します。google for jobsとは、Googleが…

上記サイトを参考にテンプレートを書き換えることに。header.phpJSON-LDを記載し、single-job.phpに記載していたMicroDataを全部削除しました。カスタム投稿タイプの詳細ページにだけJSON-LDを記載したかったので、is_singular(‘post-type’)で分岐します。下記はJSON-LDの一部です。長かったので、割愛しました。そして、descriptionのところだけ、各要素の見出しと中身をとってきて、付け加えながら表示します。場所によって中身が違うのは、元の入力画面のデータの取り方によるものです。

<?php  if (is_singular('job')): ?>
<script type="application/ld+json">
{
"@context" : "https://schema.org",
"@type" : "JobPosting",
"title" : "<?php the_field('title_g'); ?>",
"description": "
    <?php
      $work = get_post_meta($post->ID, 'work_g', true);
      $description = get_post_meta($post->ID, 'description_g', true);
      if( !empty($work || $description) ): ?>

      <?php $field_work = get_field_object('work_g');
      $field_description = get_field_object('description_g'); ?>

      <p><?php echo strip_tags($field_work['label']);?><br>
      <?php echo strip_tags($field_work['value']);?><br>
      <?php echo strip_tags($field_description['value']);?>
      </p>
    <?php endif;?>

    <?php
      $salaryNormal = get_post_meta($post->ID, 'salary_normal_g', true);
      if( !empty($salaryNormal) ): ?>

      <?php $field_salary_normal = get_field_object('salary_normal_g');
      $field_salary = get_field_object('salary_g'); ?>

      <p><?php echo strip_tags($field_salary_normal['label']);?><br>
      <?php echo strip_tags($field_salary_normal['value']);?><br>
      <?php echo strip_tags($field_salary['value']);?>
      </p>
    <?php endif;?>

    <?php
      $workHoursNormal = get_post_meta($post->ID, 'workHours_normal_g', true);
      if( !empty($workHoursNormal) ): ?>

      <?php $field_workHours_normal = get_field_object('workHours_normal_g');
      $field_workHours = get_field_object('workHours_g'); ?>
      <p><?php echo strip_tags($field_workHours_normal['label']);?><br>
      <?php echo strip_tags($field_workHours_normal['value']);?><br>
      <?php echo strip_tags($field_workHours['value']);?>
      </p>
    <?php endif;?>

    <?php
      $qualificationNormal = get_post_meta($post->ID, 'qualification_normal_g', true);
      if( !empty($qualificationNormal) ): ?>

      <?php $field_qualification_normal = get_field_object('qualification_normal_g');
      $field_qualification = get_field_object('qualification_g'); ?>
      <p><?php echo strip_tags($field_qualification_normal['label']);?><br>
      <?php echo strip_tags($field_qualification_normal['value']);?><br>
      <?php echo strip_tags($field_qualification['value']);?>
      </p>
    <?php endif;?>
    ",
  "datePosted" : "<?php the_time('Y-m-d'); ?>"
}
</script>
<?php endif;?>

さて、まだGoogleにインデックスされていないので、確認はできていませんが、ちゃんと表示されるかな。

コメント