STAFF BLOG スタッフブログ

Google Jobs対応したよ(・囚・)v

Google Jobsとは?

2019年2月から日本にも、Google Jobsやってまいりましたね。

例えば「求人 大阪 web システムエンジニア」でGoogle検索すると、ユーザに合致した求人情報を表示してくれる機能になります。
以下が、検索実行で表示される求人内容になります。

Qriptコーポレートサイトでも対応してみました

上記の検索結果を出力するには、求人情報の構造化データを求人ページに追加すること。
(今回はGoogleが推奨しているJSON-LDを使用しています)
Googleに求人掲載がされた・求人情報が更新された・求人情報がクローズされた等の通知をさせることの2つです。

JSON-LDタグの説明

以下のサンプルのような、タグを求人情報内に設置します。

サンプルURL:【Qript】採用情報・システムエンジニア

<script type="application/ld+json"> {
  "@context" : "http://schema.org/",
  "@type" : "JobPosting",
  "title" : "システムエンジニア",
  "description" : "<p>企業、教育機関、医療機関、など様々な業界のWebシステムの新規構築、カスタマイズ、運用・保守業務に携わっていただきます。</p>",
  "identifier": {
    "@type": "PropertyValue",
    "name": "株式会社Qript",
    "value": "se"
  },
  "datePosted" : "2017-06-01",
  "validThrough" : "9999-12-31T23:59",
  "employmentType" : "FULL_TIME",
  "hiringOrganization" : {
    "@type" : "Organization",
    "name" : "株式会社Qript",
    "sameAs" : "https://www.qript.co.jp/",
    "logo" : "https://www.qript.co.jp/img/kyoro_logo.gif"
  },
  "jobLocation" : {
    "@type" : "Place",
    "address" : {
      "@type" : "PostalAddress",
      "streetAddress" : "NLC心斎橋7F",
      "addressLocality" : "大阪市中央区南船場3-7-27",
      "addressRegion" : "大阪府",
      "postalCode" : "5420081",
      "addressCountry": "日本"
    }
  },
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "YEN",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 3000000,
      "maxValue": 6000000,
      "value": 3000000,
      "unitText": "YEAR"
    }
  }
}
</script>

Google 本家の説明サイト

構造化データの説明:https://developers.google.com/search/docs/data-types/job-posting

構造化データの各説明

項目名 必須 説明
@context 必須 "http://schema.org/"を指定
@type 必須 "JobPosting"を指定
baseSalary 推奨 基本給に関する情報
※"unitText"は以下を指定
“HOUR”(時給)
“WEEK”(週給)
“MONTH”(月給)
“YEAR”(年俸)
上記いずれか+給与数値を指定
※"currency"は"YEN"指定
※"value"は、サンプルは〇〇〇円~〇〇〇の給与タイプ
固定値の場合は以下を指定(時給1300円の場合)
"value": { "@type": "QuantitativeValue", "value": 1300, "unitText": "HOUR" }
datePosted 必須 求人情報が公開された日
description 必須 ※求人に関する詳細な説明
htmlタグをセットする
employmentType 推奨 ※雇用形態、以下のいずれかをセットします。
“FULL_TIME”(正社員)
“PART_TIME”(アルバイト)
“CONTRACTOR”(契約社員)
“TEMPORARY”(派遣社員)
“INTERN”(インターン)
“VOLUNTEER”(ボランティア)
“PER_DIEM”(日雇い)
“OTHER”(その他)
hiringOrganization 必須 ※求人を出している企業に関する情報
"株式会社Qript"etcのコーポレートサイトでの企業名や、お仕事紹介サイトの企業名etcを指定します
identifier 推奨 ※求人情報を掲載している組織側の識別子
任意のお仕事Noや管理上のお仕事Noのコード
jobLocation 必須 ※従業員のメインの職場となる地理的な位置
勤務地、番地までの詳細住所でなくてもOKです。
title 必須 ※職務の名称(職種の名称)
validThrough 必須 ※求人情報が期限切れになる日付
お仕事情報の掲載終了日時

構造化データ テストツール

https://search.google.com/structured-data/testing-tool/u/0/
構造化データ(JSON-LDタグ)をセットもしくは、設置する前にタグ内容にエラーがないか検証しようねー。

Googleにお仕事情報のクロール

GoogleはIndex APIを推奨しておりますが、phpのバージョンで古いのはNGですのでご注意願います。
どっちだったか忘れてしまったのですが、php5.6か5.7以降がGoogle Index API使用するには必要です。

Google 本家の説明サイト

Index API説明①:https://developers.google.com/search/apis/indexing-api/v3/quickstart
Index API説明②:https://developers.google.com/search/apis/indexing-api/v3/using-api?hl=ja

Google Index APIを使用する場合(Google推奨)

  • Google アナリティクスから認証キーをダウンロードし、サーバにファイルを置く。
  • GitHubからcomposerでGoogle APIのソースダウンロード。
  • 定期実行で、Google Index APIでクロールさせる。
<?php

namespace Fuel\Tasks;

require_once APPPATH . '../../vendor/autoload.php';

class googlejobs
{

	public static function run()
	{
		// 認証キーセット
		$auth_key  = APPPATH.'config/authkey/google-jobs-auth.json';

		$client = new \Google_Client();

		// service_account_file.json is the private key that you created for your service account.
		$client->setAuthConfig($auth_key);
		$client->addScope('https://www.googleapis.com/auth/indexing');

		// Get a Guzzle HTTP Client
		$httpClient = $client->authorize();
		$endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';

		// ディレクター・新規掲載の通知
		$content = '{
		  "url": "https://www.qript.co.jp/recruit/director/",
		  "type": "URL_UPDATED"
		}';

		$response = $httpClient->post($endpoint, [ 'body' => $content ]);
		$status_code = $response->getStatusCode();

		// デザイナー・掲載内容変更の通知
		$content = '{
		  "url": "https://www.qript.co.jp/recruit/designer/",
		  "type": "URL_UPDATED"
		}';

		$response = $httpClient->post($endpoint, [ 'body' => $content ]);
		$status_code = $response->getStatusCode();

		// マークアップエンジニア・掲載内容変更の通知
		$content = '{
		  "url": "https://www.qript.co.jp/recruit/me/",
		  "type": "URL_UPDATED"
		}';

		$response = $httpClient->post($endpoint, [ 'body' => $content ]);
		$status_code = $response->getStatusCode();

		// システムエンジニア・掲載内容変更の通知
		$content = '{
		  "url": "https://www.qript.co.jp/recruit/se/",
		  "type": "URL_UPDATED"
		}';

		$response = $httpClient->post($endpoint, [ 'body' => $content ]);
		$status_code = $response->getStatusCode();

		// プログラマー・掲載終了の通知
		$content = '{
		  "url": "https://www.qript.co.jp/recruit/pg/",
		  "type": "URL_DELETED"
		}';

		$response = $httpClient->post($endpoint, [ 'body' => $content ]);
		$status_code = $response->getStatusCode();
	}

}

Google Index APIが使用できない場合

<?php

// 採用情報が公開になっている全情報をxmlファイルに出力し、Googleにクロールする

namespace Fuel\Tasks;

class googlejobs
{

	public static function run()
	{
		$xml_filename = 'sitemap_recruit.xml';

		$xml_text  = '';
		$xml_text  = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
		$xml_text .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'."\n";
		$xml_text .= ''."\n";
		$xml_text .= '<!--  created with free sitemap generation system www.sitemapxml.jp  --> '."\n";
		$xml_text .= '<url>'."\n";
		$xml_text .= '  <loc>https://www.qript.co.jp/</loc>'."\n";
		$xml_text .= '  <priority>1.0</priority>'."\n";
		$xml_text .= '</url>'."\n";

		$xml_text .= '<url>'."\n";
		$xml_text .= '  <loc>https://www.qript.co.jp/recruit/</loc>'."\n";
		$xml_text .= '  <priority>0.8</priority>'."\n";
		$xml_text .= '</url>'."\n";

		// ディレクター
		$xml_text .= '<url>'."\n";
		$xml_text .= '  <loc>https://www.qript.co.jp/recruit/director/</loc>'."\n";
		$xml_text .= '  <priority>0.8</priority>'."\n";
		$xml_text .= '</url>'."\n";

		// デザイナー
		$xml_text .= '<url>'."\n";
		$xml_text .= '  <loc>https://www.qript.co.jp/recruit/director/</loc>'."\n";
		$xml_text .= '  <priority>0.8</priority>'."\n";
		$xml_text .= '</url>'."\n";

		// マークアップエンジニア
		$xml_text .= '<url>'."\n";
		$xml_text .= '  <loc>https://www.qript.co.jp/recruit/me/</loc>'."\n";
		$xml_text .= '  <priority>0.8</priority>'."\n";
		$xml_text .= '</url>'."\n";

		// システムエンジニア
		$xml_text .= '<url>'."\n";
		$xml_text .= '  <loc>https://www.qript.co.jp/recruit/se/</loc>'."\n";
		$xml_text .= '  <priority>0.8</priority>'."\n";
		$xml_text .= '</url>'."\n";

		// プログラマー
		$xml_text .= '<url>'."\n";
		$xml_text .= '  <loc>https://www.qript.co.jp/recruit/pg/</loc>'."\n";
		$xml_text .= '  <priority>0.8</priority>'."\n";
		$xml_text .= '</url>'."\n";

		$xml_text .= ''."\n";
		$xml_text .= '</urlset>'."\n";

		try
		{
			file_put_contents(DOCROOT.$xml_filename, $xml_text, LOCK_EX);
		}
		catch (\Exception $e)
		{
			return false;
		}

		// 新規 cURL リソースを作成します
		$ch = curl_init();

		// URL や他の適当なオプションを設定します
		curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/ping?sitemap='.rawurlencode('https://www.qript.co.jp/'.$xml_filename));
		curl_setopt($ch, CURLOPT_HEADER, 0);

		// URL を取得し、ブラウザに渡します
		$result = curl_exec($ch);

		// cURL リソースを閉じ、システムリソースを解放します
		curl_close($ch);
	}

}

最後に

JSON-LDとGoogleクロールをしたからと言って、Google Jobsに反映されるわけではありません。
SEO対策の内容は重要です。
Google Jobsに反映されない可能性もありますので、SEO対策はキチンとしましょうね。

Google Jobs対応していただきたい方
ご連絡をお待ちしております。

(・囚・)ノ

相談・お問い合わせしてみる

※ひろやんから拝借www

INDEXブログ一覧へ
CONTACTお問い合わせはこちら