Domain 58 / 225
JobPosting 構造化データは Google しごと検索への掲載権を獲得する
JobPosting schema の要点
JobPosting 構造化データは求人ページに実装すると Google しごと検索(Job Search 検索エクスペリエンス)に掲載される権利を得る。必須は title / description / datePosted / hiringOrganization / jobLocation など。Indexing API で即時通知が可能、求人終了時は validThrough を更新するか 410 で削除
なぜこれを学ぶか
JobPosting 構造化データは 求人媒体 / 自社採用ページで Google しごと検索からの応募流入を取れる主要施策。 Indeed や doda と並んで Google しごと検索が日本でも普及し、構造化データなしでは応募者からの可視性が低い。
人材会社・採用ページを持つ企業・求人媒体で必須。
学ばないと起きること
| よくある事故 | 被害 |
|---|---|
| JobPosting なしで求人ページ公開 | Google しごと検索に出ない、応募流入の機会損失 |
| 給与(baseSalary)を書かない | 給与フィルタで検索されたときに弾かれる |
| validThrough を未指定で長期間放置 | 古い求人が検索結果に残り続ける |
| 終了求人を 410 / noindex にしない | 応募できない求人がいつまでも表示 |
| Indexing API を知らず通常クロール待ち | 数日〜数週間のインデックス遅延 |
学ぶメリット
- Google しごと検索への掲載でフィルタ検索の応募者を獲得
- 求人終了の正しい処理を即実行できる
- Indexing API で即時通知できる
- 商談で「JobPosting の必須プロパティ」を即答できる
仕組み
必須プロパティ
| プロパティ | 内容 |
|---|---|
title | 求人タイトル |
description | 詳細説明(HTML 含む) |
datePosted | 掲載日(ISO 8601) |
hiringOrganization | 雇用主 Organization |
jobLocation | 勤務地 Place(オフィス勤務の場合) |
jobLocationType | TELECOMMUTE(リモート時) |
推奨プロパティ
| プロパティ | 内容 |
|---|---|
validThrough | 掲載終了日 |
employmentType | 雇用形態(FULL_TIME / PART_TIME 等) |
baseSalary | 給与情報 |
directApply | 直接応募可能か |
applicantLocationRequirements | 応募者の居住地要件 |
identifier | 求人 ID |
実装例
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "JobPosting",
"title": "シニア フロントエンド エンジニア",
"description": "<p>Next.js / TypeScript の経験 3 年以上。SEO / AEO 関連プロダクトの開発...</p>",
"identifier": {
"@type": "PropertyValue",
"name": "spotyou",
"value": "JOB-2026-001"
},
"datePosted": "2026-05-10",
"validThrough": "2026-08-10T23:59:59+09:00",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "spotyou",
"sameAs": "https://spotyou.ai",
"logo": "https://spotyou.ai/logo.png"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "六本木 1-2-3",
"addressLocality": "港区",
"addressRegion": "東京都",
"postalCode": "106-0032",
"addressCountry": "JP"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "JPY",
"value": {
"@type": "QuantitativeValue",
"minValue": 6000000,
"maxValue": 9000000,
"unitText": "YEAR"
}
},
"directApply": true
}
</script>
キー概念
employmentType の値
| 値 | 雇用形態 |
|---|---|
| FULL_TIME | 正社員 |
| PART_TIME | パート / アルバイト |
| CONTRACTOR | 業務委託 |
| TEMPORARY | 派遣 |
| INTERN | インターン |
| VOLUNTEER | ボランティア |
| PER_DIEM | 日雇い |
| OTHER | その他 |
baseSalary の指定
時給:
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "JPY",
"value": {
"@type": "QuantitativeValue",
"value": 1500,
"unitText": "HOUR"
}
}
月給範囲:
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "JPY",
"value": {
"@type": "QuantitativeValue",
"minValue": 250000,
"maxValue": 400000,
"unitText": "MONTH"
}
}
unitText の値: HOUR / DAY / WEEK / MONTH / YEAR
リモートワークの指定
完全リモート:
"jobLocationType": "TELECOMMUTE"
特定地域からのみ応募可能なリモート:
"jobLocationType": "TELECOMMUTE",
"applicantLocationRequirements": {
"@type": "Country",
"name": "Japan"
}
ハイブリッド(一部出社)の場合は jobLocation で物理オフィスを指定し、description でリモート可能性を明記。
Indexing API での即時通知
公式: 求人系コンテンツは Indexing API で即時通知できる。
POST https://indexing.googleapis.com/v3/urlNotifications:publish
Content-Type: application/json
{
"url": "https://example.com/jobs/job-001",
"type": "URL_UPDATED"
}
通常のクロール待ち(数日〜数週間)を回避し、即座にインデックスされる。
求人終了時の処理
| パターン | 対処 |
|---|---|
| 正常終了(応募締切) | validThrough を過去日付に変更 + Indexing API 通知 |
| 採用充足 | 求人ページを 410 Gone に + Indexing API で URL_DELETED 通知 |
| 一時停止(再開予定あり) | validThrough を一時的に短く設定 |
掲載終了求人が Google しごと検索に残るとユーザー体験が悪化、ペナルティ対象になる。
よくある誤解
| よくある誤解 | 実際のところ | 出典 |
|---|---|---|
| JobPosting 構造化データを入れれば必ず Google しごと検索に出る | 出る権利を得るだけ、品質判定もある | JobPosting 構造化データ |
| 給与情報(baseSalary)は省略可 | 推奨プロパティ、給与フィルタ検索で表示されない | 同上 |
| 終了求人も残しておけば Google が自動判定 | NG。validThrough 更新 / Indexing API / 410 が必要 | 同上 |
| jobLocation は文字列で住所を書ける | Place オブジェクト + PostalAddress で構造化 | 同上 |
| Indexing API は通常 SEO で使う | 公式に求人 / ライブ配信動画でのみ承認 | Indexing API |
| 完全リモートの求人は jobLocation を空に | jobLocationType: TELECOMMUTE を指定 + applicantLocationRequirements 推奨 | JobPosting 構造化データ |
| 同じ求人を複数 URL で公開 | NG。重複扱いで Google しごと検索から外れる | 同上 |
| description は短くシンプルに | HTML を含む詳細説明が推奨、応募者の判断材料 | 同上 |
実務での適用
求人ページのチェックリスト
- JobPosting 構造化データの必須プロパティ完備
- baseSalary(給与)を範囲または具体額で指定
- validThrough を必ず指定
- jobLocation を Place + PostalAddress で構造化
- Indexing API で即時通知
- 求人終了時は validThrough 更新 / 410 / Indexing API URL_DELETED
求人媒体の運用フロー
新規求人公開:
1. JobPosting 構造化データを実装
2. Indexing API で URL_UPDATED 通知
3. Search Console で「拡張」レポート確認
求人終了:
1. validThrough を過去日付に
2. Indexing API で URL_DELETED 通知
3. ページを 410 Gone または採用充足ページにリダイレクト
Search Console での監視
- 「拡張」→「求人情報」レポートでエラー / 警告
- 終了求人が残っていないか定期確認
- インデックス状況とアクティブ求人数の整合
トラブル別の対処
| 症状 | 確認すべきこと |
|---|---|
| Google しごと検索に出ない | JobPosting の必須プロパティ / 品質ガイドライン違反 |
| 終了求人が残り続ける | validThrough 更新 / Indexing API / 410 の実装 |
| Search Console「拡張」エラー | hiringOrganization / jobLocation の必須プロパティ確認 |
| 給与フィルタで表示されない | baseSalary の構造化データ完全性 |
| 検索順位が低い | 求人タイトル / 説明文の質、応募者向け価値の明示 |
公式ソース
自己テスト
Q1. JobPosting の必須プロパティは?
title / description / datePosted / hiringOrganization / jobLocation(または jobLocationType)
Q2. 給与情報(baseSalary)は省略可か?
技術的には省略可だが、推奨プロパティ。給与フィルタ検索に対応しないと応募者から見つけられない
Q3. リモートワークの正しい指定は?
jobLocationType: TELECOMMUTE + 必要に応じて applicantLocationRequirements で居住地要件
Q4. 終了した求人の正しい処理は?
validThrough を過去日付に更新 + Indexing API で URL_DELETED 通知 + ページを 410 Gone
Q5. Indexing API はどんな用途で使えるか?
公式に求人(JobPosting)とライブ配信動画(BroadcastEvent)のみ承認
Q6. 同じ求人を複数 URL で公開すると?
重複扱いで Google しごと検索から外れる。1 求人 1 URL を厳守
Q7. JobPosting の description は短くすべきか?
詳細に書く方が推奨。HTML を含む詳細説明が応募者の判断材料
Q8. employmentType の主な値は?
FULL_TIME / PART_TIME / CONTRACTOR / TEMPORARY / INTERN / VOLUNTEER
これらの内容を採点付きで挑戦したい場合は、本ドメインのプロ試験で 5 問形式で確認できる。