【無料×求人】「Googleしごと検索」に対応するためのWordPressプラグインを作りました

求人ってお金もかかるし大変ですよね。
特に最近は、人不足のせいで会社を成長させるために必要な社員やアルバイトを採用するのが大変になってきています。

Googleしごと検索なら”無料で”グーグルの検索結果に求人情報を表示できます

Indeedが実はおすすめ、という話を知り合いの税理士から聞きました。「仕事さがしはインディード♪」のCMで聞いたことがある人も多いと思いますが、リクルートが運営する求人情報検索サイトのIndeedがかなり使われているようです。いつの間にか、求人雑誌➡求人サイト➡求人検索と、仕事探しの媒体もどんどん移り変わっています。

しかし、最近では「求人専門検索サイト」のIndeedに対抗すかのように、Googleで「地域名+アルバイト」や「職種名+求人」など求人に関する検索キーワードで検索をすると、Googleの検索結果に直接求人情報が表示されるようになったのをご存知ですか?

これは「品川+事務職」と検索したときのスマホの画面です。もはや、求人サイトやIndeedすら経由することなくグーグルで直接求人情報を表示できるこの仕組は「Googleしごと検索」として公開されています。

意外と知らない人も多いのですが、この求人枠に表示するのに「広告費を打つ必要はない」んです。自社のホームページの求人情報のページに、後述するGoogleが指定する「構造化データ」というのを埋め込むだけで、Googleのロボットが自動的に収集して、自動的に検索結果画面に表示してくれるのです。しかも無料で!

しごと検索に対応するための「構造化データ」の書き方

この、Googleの構造化データの書き方は無料で公開されています。

構造化データの細かい仕様はここに記載されているとおりですが、構造化データになれていないとどうすればいいのか分かりづらいと思います。実は、意味さえわかってしまえば意外とシンプルなので、HTMLさえいじれればエンジニアでなくても簡単に実装することができるのですが、なかなかとっつきずらいのも事実です。

SEO界隈で有名な「WEB企画」さんのブログで、フォームに内容を入力していくだけで構造化データを吐き出してくれるツールが公開されてますので、こちらを使って自分でコードを作って、自社の求人ページの内に記載をすることで実装することができます。

Googleしごと検索の構造化データをコピペで実装できるツールを作ってみました  https://webkikaku.co.jp/blog/recruit/google-job-posting-tool/

このジェネレーターを使って吐き出した「構造化データ」を「実際に求人情報が掲載されている各記事(投稿や固定ページ)」の<head></head>内に、このコードをコピペして貼り付ければOKです。なお、複数の求人情報をまとめて掲載されている場合には、1記事=1求人情報に整理し直した上で、それぞれのページにそれぞれの求人情報の構造化データをコピペする必要があります。

なお、実際に自分のサイトに実装した後には、Googleの構造化データをチェックするための「構造化データ テストツール」に対象ページのURLを入力して、正しく認識されているか確認をしてみてください。。

WordPressの管理画面から編集できるPluginを作りました

とはいえ、ふだんWordPressの管理画面しか触っていないという人には、すこしとっつきにくいのではないかとも思われます。標準の機能では、編集画面から<head>タグ内をいじることができません。

現在のバージョンでは、以下のことだけできます。

  • 投稿か固定ページで「求人記事」をつくって公開してください
  • 対象の求人記事の編集画面の下部に「しごと検索フィールド」という入力欄が追加されていますのでこちらを入力してください
    • 求人記事以外のすべての記事に表示されていますが、求人記事以外の場合には何も入力しないでください
  • 「しごと検索フィールド」に入力した内容に応じて、<head>タグ内でJSON-LDの形式で「Googleしごと検索」に対応した構造化データが掲載されます。

なお、当プラグインが動作するためには、Advanced Custom Fields という無料のプラグインが必要となりますので、管理画面-プラグイン-新規追加 の画面で「Advanced Custom Fields」と入力して、対象のプラグインをインストールしてください。( https://ja.wordpress.org/plugins/advanced-custom-fields/ )

現時点では入力した内容は、Googleにのみ見えるように反映されますが、サイト上には表示されませんので、人間のための求人記事を記述後に、その要約としてフォーマットを埋めていただけますと幸いです。なお、実際の求人情報と異なる内容を掲載するとGoogleから不正な求人情報とみなされるおそれがありますので、ご注意ください。

弊社では、現在求人情報を掲載していないので実際にGoogleしごと検索上での表示を確認することはできていないのですが、「構造化データ テストツール」上では正常に認識されているので、うまく動作しているとは思います。

プラグイン(にする予定)のコードを公開

最初、プラグインとして公開を考えていましたが、まだまだ開発途中のため、プラグインとして公開してしまうと逆に問題が生じそうだったので、一旦、コードをそのまま貼り付けます。




File: gistfile1.txt
-------------------------

 function add_QGJF_head (){
  $QGJF_title = get_field('QGJF_title', $post_id );
  $QGJF_employmentType = get_field('QGJF_employmentType', $post_id );
  $QGJF_baseSalary_value_maxValue = get_field('QGJF_baseSalary_value_maxValue', $post_id );
  $QGJF_baseSalary_value_minValue = get_field('QGJF_baseSalary_value_minValue', $post_id );
  $QGJF_baseSalary_value_unitText = get_field('QGJF_baseSalary_value_unitText', $post_id );
  $QGJF_hiringOrganization_name = get_field('QGJF_hiringOrganization_name', $post_id );
  $QGJF_hiringOrganization_sameAs = get_field('QGJF_hiringOrganization_sameAs', $post_id );
  $QGJF_hiringOrganization_logo = get_field('QGJF_hiringOrganization_logo', $post_id );
  $QGJF_jobLocation_postalCode = get_field('QGJF_jobLocation_postalCode', $post_id );
  $QGJF_jobLocation_streetAddress = get_field('QGJF_jobLocation_streetAddress', $post_id );
  $QGJF_jobLocation_addressLocality = get_field('QGJF_jobLocation_addressLocality', $post_id );
  $QGJF_jobLocation_addressRegion = get_field('QGJF_jobLocation_addressRegion', $post_id );
  $QGJF_description = get_field('QGJF_description', $post_id );
  $QGJF_datePosted = get_field('QGJF_datePosted', $post_id );
  $QGJF_validThrough = get_field('QGJF_validThrough', $post_id );
  if (!empty($QGJF_title)):
    echo <<{
      "@context": "http://schema.org/",
      "@type": "JobPosting",
      "title": "$QGJF_title",
      "description": "$QGJF_description",
      "datePosted": "$QGJF_datePosted",
      "validThrough": "$QGJF_validThrough",
      "employmentType": ["$QGJF_employmentType"],
      "hiringOrganization": {
        "@type": "Organization",
        "name": "$QGJF_hiringOrganization_name",
        "sameAs": "$QGJF_hiringOrganization_sameAs",
        "logo": "$QGJF_hiringOrganization_logo"
      },
      "jobLocation": {
        "@type": "Place",
        "address": {
          "@type": "PostalAddress",
          "addressRegion": "$QGJF_jobLocation_addressRegion",
          "addressLocality": "$QGJF_jobLocation_addressLocality",
          "streetAddress": "$QGJF_jobLocation_streetAddress",
          "postalCode": "$QGJF_jobLocation_postalCode",
          "addressCountry": "JP"
        }
      },
      "baseSalary": {
        "@type": "MonetaryAmount",
        "currency": "JPY",
        "value": {
          "@type": "QuantitativeValue",
          "value": "",
          "minValue": "$QGJF_baseSalary_value_minValue",
          "maxValue": "$QGJF_baseSalary_value_maxValue",
          "unitText": "$QGJF_baseSalary_value_unitText"
        }
      }
    }
END_OF_TEXT;
  endif;
}
add_action ('wp_head','add_QGJF_head',1);

if( function_exists('acf_add_local_field_group') ):
  //カスタムフィールド設定
  acf_add_local_field_group(//地域ページの設定
    array(
      'key' => 'QGJF_group_post_field',
      'title' => 'しごと検索フィールド',
      'style' => 'default',
      'position' => 'side',
      'fields' => array(
        array(
          'key' => 'field_QGJF_title',
          'label' => '職務名・仕事内容',
          'name' => 'QGJF_title',
          'type' => 'text',
        ),
        array(
          'key' => 'field_QGJF_employmentType',
          'label' => '雇用形態',
          'name' => 'QGJF_employmentType',
          'type' => 'select',
          'choices' => array(
            'FULL_TIME' => '正社員(フルタイム)',
            'PART_TIME' => 'パートタイム(アルバイト)',
            'CONTRACTOR' => '契約社員',
            'TEMPORARY' => '派遣社員',
            'INTERN' => 'インターン',
            'VOLUNTEER' => 'ボランティア',
            'PER_DIEM' => '日雇い',
            'OTHER' => 'その他',
          ),
        ),
        array(
          'key' => 'field_QGJF_baseSalary_value_maxValue',
          'label' => '給与額上限(円)',
          'name' => 'QGJF_baseSalary_value_maxValue',
          'type' => 'number',
          'min' => 0,
        ),
        array(
          'key' => 'field_QGJF_baseSalary_value_minValue',
          'label' => '給与額下限(円)',
          'name' => 'QGJF_baseSalary_value_minValue',
          'type' => 'number',
          'min' => 0,
        ),
        array(
          'key' => 'field_QGJF_baseSalary_value_unitText',
          'label' => '給与の支払い方法',
          'name' => 'QGJF_baseSalary_value_unitText',
          'type' => 'select',
          'choices' => array(
            'HOUR' => '時給',
            'DAY' => '日給',
            'WEEK' => '週給',
            'MONTH' => '月給',
            'YEAR' => '年収',
          ),
        ),
        array(
          'key' => 'field_QGJF_hiringOrganization_name',
          'label' => '会社名',
          'name' => 'QGJF_hiringOrganization_name',
          'type' => 'text',
        ),
        array(
          'key' => 'field_QGJF_hiringOrganization_sameAs',
          'label' => '会社URL',
          'name' => 'QGJF_hiringOrganization_sameAs',
          'type' => 'url',
        ),
        array(
          'key' => 'field_QGJF_hiringOrganization_logo',
          'label' => '会社ロゴ',
          'name' => 'QGJF_hiringOrganization_logo',
          'type' => 'image',
        ),
        array(
          'key' => 'field_QGJF_jobLocation_postalCode',
          'label' => '郵便番号(勤務地)',
          'name' => 'QGJF_jobLocation_postalCode',
          'type' => 'text',
        ),
        array(
          'key' => 'field_QGJF_jobLocation_streetAddress',
          'label' => '市区町村以下(勤務地)',
          'name' => 'QGJF_jobLocation_streetAddress',
          'type' => 'text',
        ),
        array(
          'key' => 'field_QGJF_jobLocation_addressLocality',
          'label' => '市区町村',
          'name' => 'QGJF_jobLocation_addressLocality',
          'type' => 'text',
        ),
        array(
          'key' => 'field_QGJF_jobLocation_addressRegion',
          'label' => '都道府県',
          'name' => 'QGJF_jobLocation_addressRegion',
          'type' => 'select',
          'choices' => array(
            '北海道' => '北海道',
            '青森県' => '青森県',
            '岩手県' => '岩手県',
            '宮城県' => '宮城県',
            '秋田県' => '秋田県',
            '山形県' => '山形県',
            '福島県' => '福島県',
            '茨城県' => '茨城県',
            '栃木県' => '栃木県',
            '群馬県' => '群馬県',
            '埼玉県' => '埼玉県',
            '千葉県' => '千葉県',
            '東京都' => '東京都',
            '神奈川県' => '神奈川県',
            '新潟県' => '新潟県',
            '富山県' => '富山県',
            '石川県' => '石川県',
            '福井県' => '福井県',
            '山梨県' => '山梨県',
            '長野県' => '長野県',
            '岐阜県' => '岐阜県',
            '静岡県' => '静岡県',
            '愛知県' => '愛知県',
            '三重県' => '三重県',
            '滋賀県' => '滋賀県',
            '京都府' => '京都府',
            '大阪府' => '大阪府',
            '兵庫県' => '兵庫県',
            '奈良県' => '奈良県',
            '和歌山県' => '和歌山県',
            '鳥取県' => '鳥取県',
            '島根県' => '島根県',
            '岡山県' => '岡山県',
            '広島県' => '広島県',
            '山口県' => '山口県',
            '徳島県' => '徳島県',
            '香川県' => '香川県',
            '愛媛県' => '愛媛県',
            '高知県' => '高知県',
            '福岡県' => '福岡県',
            '佐賀県' => '佐賀県',
            '長崎県' => '長崎県',
            '熊本県' => '熊本県',
            '大分県' => '大分県',
            '宮崎県' => '宮崎県',
            '鹿児島県' => '鹿児島県',
            '沖縄県' => '沖縄県',
          ),
        ),
        array(
          'key' => 'field_QGJF_description',
          'label' => '仕事内容概要',
          'name' => 'QGJF_description',
          'type' => 'textarea',
        ),
        array(
          'key' => 'field_QGJF_datePosted',
          'label' => '掲載開始日(YYYY-MM-DD)',
          'name' => 'QGJF_datePosted',
          'type' => 'date_picker',
          'display_format' => 'Y/m/d',
    			'return_format' => 'Y-m-d',
    			'first_day' => 0,
        ),
        array(
          'key' => 'field_QGJF_validThrough',
          'label' => '掲載期限日(YYYY-MM-DD)',
          'name' => 'QGJF_validThrough',
          'type' => 'date_picker',
          'display_format' => 'Y/m/d',
    			'return_format' => 'Y-m-d',
    			'first_day' => 0,
        ),
      ),
      'location' => array(
        array(
          array(
            'param' => 'post_type',
            'operator' => '==',
            'value' => 'post',
          ),
        ),
      ),
      'menu_order' => 0,
      'position' => 'normal',
      'style' => 'default',
      'label_placement' => 'top',
      'instruction_placement' => 'label',
      'hide_on_screen' => '',
      'active' => true,
      'description' => '',
    ));
    endif;


use with Gist Search
これをfunction.phpに直接打ち込んでもらってもいいですし、プラグイン化しても大丈夫かと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です