📚 Schema.org ⏱ 31 דק׳ קריאה 📊 5,500 מילים 🔧 15 פרקים 🆕 evergreen עודכן 2026.05.19

JobPosting Schema, מדריך לאתרי קריירה ו-HR

‏רוב אתרי הקריירה בישראל מטמיעים JobPosting schema חלקי, חסרים validThrough, מפספסים את eligibility ל-Google for Jobs אחרי 30 יום, ולא מבינים למה המשרות שלהם נעלמות מהאינדקס. ‏הסיפור הזה חוזר בכל לקוח HR שאני מקבל. ‏15 פרקים שיעבירו אתכם מטיוטה גנרית לסכמה שעובדת ב-Google for Jobs, ‏עם הסבר על ה-deindex aggressive של גוגל, ‏7 דוגמאות JSON-LD מלאות (משרת office, ‏remote, ‏freelance, ‏חוזה, ‏ועוד), ‏ו-checklist חודשי שמונע מהמשרות שלכם להיעלם.

15פרקים מעמיקים
7דוגמאות JSON-LD מלאות
30ימים עד deindex בלי validThrough
20שנות ניסיון בסכמות
פרק 01

💼 מה זה JobPosting schema, ולמה זה התנאי הבסיסי ל-Google for Jobs

תקשיבו, אני אפתח עם הסיפור שאני שומע פעם בחודש. מנהל HR מתקשר, אומר "שמוליק, פרסמנו 80 משרות באתר הקריירה שלנו, ‏אבל הן לא מופיעות ב-Google for Jobs. ‏המתחרים שלנו כן. ‏למה?". ‏אני נכנס לאתר, בודק View Source על משרה אחת. ‏אין JobPosting schema בכלל. ‏או שיש, אבל חסר חצי מה-properties. ‏נחשו למה גוגל לא מציג להם rich result, ‏לא מוסיף אותן לפילטר "jobs" ב-SERP, ‏ולא מעלה אותן ב-Google for Jobs (engine החיפוש הייעודי של גוגל למשרות)? ‏כי JobPosting schema זה תנאי בסיסי, לא bonus. ‏בלי הסכמה הזאת, המשרות שלכם פשוט לא קיימות לגוגל בקטגוריית jobs.

JobPosting הוא Schema.org type שמתאר משרה בודדת. ‏לא את החברה (זה Organization), ‏לא את אתר הקריירה (זה WebSite), ‏אלא משרה ספציפית עם title, ‏description, ‏datePosted, ‏hiringOrganization, ‏ו-jobLocation. ‏גוגל משתמש בסכמה הזאת כדי להבין שמדובר במשרה אמיתית, ‏לחלץ ממנה את כל הפרטים המובנים (תפקיד, ‏מקום, ‏שכר, ‏סוג העסקה), ‏ולהציג אותה ב-Google for Jobs, ‏הרוב הגדול של ה-job seekers בישראל היום מתחילים שם, ‏לא ב-LinkedIn, ‏לא ב-AllJobs, ‏לא ב-Drushim.

⚠️ הנקודה החשובה ביותר

‏Google for Jobs הוא engine חיפוש נפרד שמופיע כסקציה ייחודית מעל תוצאות החיפוש האורגניות. ‏הוא מציג רק משרות עם JobPosting schema תקין. ‏בלי הסכמה, ‏המשרות שלכם לא מופיעות שם, ‏גם אם הן הכי טובות בארץ. ‏זה לא "קצת יותר טוב עם schema", ‏זה "קיים או לא קיים". ‏עסק שמטמיע JobPosting נכון רואה הגעה ל-Google for Jobs תוך 24-48 שעות מהפרסום. ‏עסק בלי, ‏לא רואה אותה אף פעם.

למה זה משנה לגוגל

‏Google for Jobs הושק ב-2017 כתגובה לשליטה של LinkedIn ו-Indeed בשוק המשרות הדיגיטליות. ‏גוגל הבינה שאם היא לא תיכנס לשוק הזה, ‏היא תאבד את הקשר עם job seekers (פלח מאוד רווחי ל-AdSense בעבר). ‏הפתרון, ‏לא לבנות פלטפורמת משרות משלה, ‏אלא ל-aggregate משרות מכל אתרי הקריירה בעולם דרך JobPosting schema. ‏זה win-win, ‏גוגל מקבלת תוכן בלי לתחזק אותו, ‏אתרי קריירה מקבלים תנועה אורגנית גדולה ב-CTR גבוה מאוד (כ-2-3x מתוצאות חיפוש רגילות, ‏לפי דיווחים בענף).

מה אני אכסה במאמר הזה

15 פרקים שמתחילים מהבסיס (required vs recommended properties), עוברים על ה-edge cases הכי מסוכנים (validThrough שמורידה אתכם אחרי 30 יום, ‏remote jobs שדורשים applicantLocationRequirements מיוחד, ‏salary disclosure שבישראל היא נושא רגיש), ‏מציגים 7 דוגמאות JSON-LD מלאות לסוגי משרות שונים, ‏ומסיימים ב-monthly audit checklist שמונע מהמשרות שלכם להיעלם. ‏אם תקראו עד הסוף ותטמיעו את הקוד הנכון, ‏אתם תהיו בקצה הקטן של אתרי קריירה בארץ עם schema מלא, ‏מה שיתן לכם יתרון תחרותי אמיתי מול הצוותים הענקיים של LinkedIn ו-Indeed.

אגב, השם שמוליק דורינבאום מאחורי המקלדת כאן, 20 שנה בעולם ה-SEO. ‏טיפלתי בעשרות אתרי קריירה ופלטפורמות HR שעוברות מ-bulk listings סטטיים ל-JobPosting schema תקין. ‏הדבר הראשון שאני מציג בכל מקרה כזה הוא ההבדל בין ה-30 משרות שכן מופיעות ב-Google for Jobs לבין ה-200 שלא, ‏זה משחק את כל המשחק. ‏אם אחרי המאמר אתם תקועים בהטמעה, ‏יש לכם איך לדבר איתי ישירות.

פרק 02

Required properties, ‏title + description + datePosted + hiringOrganization + jobLocation (עם דוגמת קוד)

אם תזכרו רק 5 properties מהמאמר הזה, ‏שאלה יהיו, title, description, datePosted, hiringOrganization, jobLocation. ‏אלה ה-required של JobPosting לפי הדרישות של גוגל ל-Google for Jobs. ‏בלעדיהם, ‏ה-rich result לא יופיע, ‏המשרה לא תיכלל ב-Google for Jobs engine, ‏ו-Search Console יציג errors מתחת ל-Enhancements > Job postings. ‏תקשיבו, ‏רוב המקדמים שאני בודק חסרים לפחות אחד מהחמישה, ‏בדרך כלל hiringOrganization מובנה או datePosted בפורמט הלא נכון.

title

שם המשרה. ‏לא שם המחלקה, ‏לא שם הצוות, ‏השם של תפקיד הספציפי. ‏לדוגמה "מפתח Front-End React", ‏"מנהל שיווק B2B", ‏"יועץ SEO בכיר". ‏גוגל מציג את ה-title הזה בכותרת ה-card ב-Google for Jobs, ‏אז הוא צריך להיות מדויק וקצר (עד 80 תווים). ‏אסור לכלול שם החברה, ‏מיקום, ‏סוג העסקה, ‏או דחיפות ("דחוף!"). ‏אלה שדות נפרדים. ‏אם תוסיפו אותם ל-title, ‏גוגל יחתוך או יתעלם.

description

תיאור המשרה ב-HTML. ‏גוגל מציג את זה כשמתרחבים על ה-card ב-Google for Jobs. ‏צריך להיות עשיר, ‏לפחות 200 מילים, ‏לכלול qualifications, ‏responsibilities, ‏ו-benefits. ‏מותר וצריך לכלול HTML tags כמו <p>, <ul>, <strong>. ‏אסור לכלול קישורים פעילים (גוגל יסיר אותם), ‏תמונות (irrelevant), ‏או iframes. ‏ה-description הוא הנכס היחיד שמשפיע על דירוג של המשרה מול משרות דומות, ‏השקיעו בו.

datePosted

התאריך שבו המשרה פורסמה לראשונה, ‏בפורמט ISO 8601 (YYYY-MM-DD). ‏לדוגמה "2026-05-30". ‏לא לעדכן אותו כל יום "כדי להיראות טריים", ‏זה אנטי-pattern. ‏גוגל סופר את הזמן מ-datePosted לצורך deindex, ‏אז אם תעדכנו אותו, ‏גוגל יחשוב שהמשרה חדשה ויפסיק להציג אותה אחרי 30 יום מהעדכון. ‏הכוונה ההפוכה ממה שאתם רוצים. ‏השאירו את datePosted כפי שהוא, ‏השתמשו ב-validThrough כדי לציין מתי המשרה פגה.

hiringOrganization

החברה שמגייסת. ‏Object של Organization עם name (חובה), ‏ועם url ו-logo (מומלצים). ‏לדוגמה {"@type": "Organization", "name": "חברת ABC", "sameAs": "https://abc.co.il/", "logo": "https://abc.co.il/logo.png"}. ‏ה-name חייב להיות זהה בדיוק לשם המוצג של החברה ב-Google Business Profile של החברה ובכל אתר הקריירה. ‏ה-inconsistency כאן גורר penalty.

jobLocation

היכן המשרה. ‏Object של Place עם address (PostalAddress object). ‏אם המשרה היא במשרד פיזי, ‏זה streetAddress + addressLocality + addressRegion + postalCode + addressCountry. ‏אם המשרה היא remote, ‏יש לזה טיפול מיוחד (פרק 5 צולל לעומק). ‏גוגל מציג את ה-location ב-card של ה-Job search כסיגנל ראשי לסינון לפי אזור.

דוגמת קוד מינימלית

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "מפתח Front-End React",
  "description": "<p>חברת ABC מחפשת מפתח Front-End לצוות מוצר חדש. ‏אחריות, פיתוח רכיבים ב-React, אינטגרציה עם APIs, ‏שיתוף פעולה עם מעצבים</p><ul><li>3+ שנות ניסיון ב-React</li><li>ידע ב-TypeScript</li><li>ניסיון עם state management</li></ul>",
  "datePosted": "2026-05-30",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "חברת ABC",
    "sameAs": "https://abc.co.il/",
    "logo": "https://abc.co.il/logo.png"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "רחוב הברזל 32",
      "addressLocality": "תל אביב",
      "addressRegion": "תל אביב",
      "postalCode": "6971042",
      "addressCountry": "IL"
    }
  }
}
</script>
⚠️ הטעות הקלאסית, datePosted בפורמט DD/MM/YYYY

‏אני רואה את זה לפחות פעם בשבועיים. ‏מפתח ישראלי כותב את התאריך בפורמט "30/05/2026" כי זה הפורמט בעברית. ‏גוגל לא קולט. ‏ISO 8601 בלבד, ‏"2026-05-30". ‏זה אחד הדברים הראשונים ש-validation עוצר עליו, ‏וזה גם הסיבה שמשרות "נעלמות" אחרי כמה ימים, ‏גוגל לא מצליח לפענח את התאריך, ‏ומתעלם מהמשרה כולה.

הוספת @id ו-url

‏שני properties שאינם required אבל הם best practice. ‏@id ייחודי שמזהה את המשרה על פני כל הסכמות שלכם (חשוב במיוחד ב-bulk job sites עם 1000+ משרות). ‏url שמקשר לעמוד המשרה הספציפי. ‏הפורמט המקובל ל-@id הוא URL מלא של עמוד המשרה + hash, ‏לדוגמה https://careers.example.co.il/job-12345#posting. ‏זה מבטיח ייחודיות גם כשיש לכם כמה גרסאות של אותה משרה (לדוגמה, ‏עברית + אנגלית).

פרק 03

💎 Recommended properties, ‏validThrough + baseSalary + employmentType + identifier (עם דוגמת קוד)

‏הגענו ל-recommended properties, ‏אבל אל תתבלבלו, ‏ה-"recommended" של גוגל ב-JobPosting זה לא באמת אופציונלי. ‏בלי validThrough, ‏המשרה נעלמת אוטומטית מ-Google for Jobs אחרי 30 יום (פרק 4 צולל לזה). ‏בלי baseSalary, ‏היא לא תופיע בפילטר "שכר" של Google for Jobs, ‏וגוגל מורידה לה בדירוג (יש דיווחים מ-Google Search Liaison שהאלגוריתם מתעדף משרות עם שכר גלוי). ‏בלי employmentType, ‏היא לא תופיע בפילטר "סוג עבודה". ‏הסיכום, ‏ה-"recommended" כאן זה ה-real required לפרודקציה.

validThrough

‏התאריך שבו המשרה פגה, ‏בפורמט ISO 8601 עם זמן. ‏לדוגמה "2026-07-30T23:59:59+03:00" (כולל timezone של ישראל, ‏+03:00 בקיץ או +02:00 בחורף). ‏אם תשמיטו, ‏גוגל יסיר את המשרה אוטומטית מ-Google for Jobs אחרי 30 יום מ-datePosted. ‏זאת מדיניות aggressive שלה. ‏הוסיפו validThrough תמיד, ‏גם אם המשרה פגה רק עוד שנה. ‏זה הביטוח שלכם.

baseSalary

‏שכר בסיס, ‏Object של MonetaryAmount עם currency, ‏value (QuantitativeValue עם minValue/maxValue/unitText). ‏גוגל מציגה את זה ב-card של Google for Jobs ובפילטרים. ‏אם השכר טווחי (לדוגמה 15,000 עד 20,000 שח חודשי), ‏השתמשו ב-minValue + maxValue. ‏אם נקודתי, ‏השתמשו ב-value. ‏ה-unitText תמיד "MONTH" (חודשי), ‏"YEAR" (שנתי), ‏"HOUR" (שעתי), ‏וכו'. ‏בישראל זה נושא רגיש כי רוב המעסיקים לא חושפים שכר, ‏פרק 6 צולל לזה.

employmentType

‏סוג העסקה. ‏מחרוזת קבועה מבין הערכים, ‏FULL_TIME, ‏PART_TIME, ‏CONTRACTOR, ‏TEMPORARY, ‏INTERN, ‏VOLUNTEER, ‏PER_DIEM, ‏OTHER. ‏לפעמים array של כמה. ‏לדוגמה "employmentType": ["FULL_TIME", "CONTRACTOR"] אומר שאתם פתוחים גם לעובד מלא וגם לפרילנס. ‏גוגל מציגה את זה כפילטר.

identifier

‏מזהה ייחודי של המשרה אצלכם. ‏Object של PropertyValue עם name (שם השדה, ‏לדוגמה "Job ID") ו-value (המספר/קוד). ‏זה מאפשר לגוגל לזהות שהמשרה זהה גם אם ה-URL משתנה, ‏או אם אתם מפרסמים את המשרה גם ב-Indeed/LinkedIn. ‏לדוגמה {"@type": "PropertyValue", "name": "חברת ABC", "value": "FE-2026-042"}.

applicantLocationRequirements (למשרות remote)

‏לא רלוונטי לכל משרה, ‏רק לכאלה שהן remote. ‏מגדיר מאיזה אזורים אתם מקבלים מועמדים. ‏צריך לבוא יחד עם jobLocationType = "TELECOMMUTE". ‏פרק 5 על remote jobs צולל לזה לעומק.

qualifications, responsibilities, skills, educationRequirements, experienceRequirements

‏5 שדות text שמתארים את דרישות התפקיד. ‏גוגל לא תמיד מציג אותם ב-rich result, ‏אבל הם מסייעים ל-matching של job seekers. ‏גם AI engines כמו ChatGPT משתמשים בהם כדי להמליץ על משרות לפי קורות חיים. ‏השקיעו בהם, ‏הם זולים והם משפיעים על relevance score.

דוגמת קוד מלאה עם recommended

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "מפתח Front-End React",
  "description": "<p>חברת ABC מחפשת מפתח Front-End לצוות מוצר חדש</p>",
  "identifier": {
    "@type": "PropertyValue",
    "name": "חברת ABC",
    "value": "FE-2026-042"
  },
  "datePosted": "2026-05-30",
  "validThrough": "2026-07-30T23:59:59+03:00",
  "employmentType": "FULL_TIME",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "חברת ABC",
    "sameAs": "https://abc.co.il/",
    "logo": "https://abc.co.il/logo.png"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "רחוב הברזל 32",
      "addressLocality": "תל אביב",
      "addressRegion": "תל אביב",
      "postalCode": "6971042",
      "addressCountry": "IL"
    }
  },
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "ILS",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 18000,
      "maxValue": 26000,
      "unitText": "MONTH"
    }
  },
  "qualifications": "3+ שנות ניסיון ב-React, ידע ב-TypeScript",
  "responsibilities": "פיתוח רכיבי UI, ‏אינטגרציה עם REST APIs, ‏code review",
  "skills": "React, TypeScript, Redux, ‏Git, ‏Jest",
  "educationRequirements": {
    "@type": "EducationalOccupationalCredential",
    "credentialCategory": "תואר ראשון במדעי המחשב או ניסיון מקביל"
  },
  "experienceRequirements": {
    "@type": "OccupationalExperienceRequirements",
    "monthsOfExperience": 36
  }
}
</script>
פרק 04

validThrough הקריטי, ‏למה גוגל מוחקת את המשרה אחרי 30 יום (וזה לא באג)

‏זה החלק שמורט הכי הרבה לקוחות HR. ‏הם פרסמו 100 משרות, ‏הן הופיעו ב-Google for Jobs לכמה שבועות, ‏ואז נעלמו. ‏מה קרה? ‏זה לא באג, ‏זאת מדיניות מכוונת של גוגל. ‏היא מסירה אוטומטית כל JobPosting שלא הוגדר לו validThrough, ‏אחרי 30 יום מ-datePosted. ‏בלי אזהרה, ‏בלי הודעה ב-Search Console. ‏פשוט נעלמות. ‏תקשיבו, ‏זה אחד הדברים הכי מתסכלים ב-Google for Jobs, ‏ויחד עם זה, ‏הוא קל לפתרון אם יודעים עליו.

למה גוגל עושה את זה

‏גוגל רוצה ש-Google for Jobs יציג רק משרות פעילות. ‏job seeker שמגיע למשרה שכבר מולאה ומגיש מועמדות מקבל חוויית משתמש גרועה, ‏וזה פוגע באמון בכל הפלטפורמה. ‏לכן גוגל הניחה את הסף, ‏אם המעסיק לא טרח להגדיר תאריך תפוגה, ‏היא מנחשת שהמשרה כנראה כבר לא רלוונטית אחרי 30 יום ומסיר אותה. ‏זה logical, ‏אבל הוא מענישה את מי שלא יודעים על המדיניות.

איך מטמיעים נכון

‏הוסיפו validThrough לכל משרה. ‏הפורמט הוא ISO 8601 datetime עם timezone. ‏לדוגמה "2026-08-30T23:59:59+03:00". ‏הזמן הסופי של היום (23:59:59) חשוב כי אחרת המשרה תיעלם בחצות של אותו יום ולא בסוף היום. ‏ה-timezone +03:00 הוא של ישראל בשעון קיץ (אפריל-אוקטובר), ‏+02:00 בשעון חורף (נובמבר-מרץ).

כמה זמן validThrough נכון

‏תלוי בעסק. ‏המקובל הוא 60-90 יום מ-datePosted. ‏פחות מ-30 יום זה מבזבז את ה-eligibility (המשרה לא תספיק להופיע מספיק זמן ב-Google for Jobs). ‏יותר משנה זה suspicious (גוגל אוהבת freshness). ‏60-90 יום זה ה-sweet spot.

מה לעשות אם המשרה ממולאת מוקדם

‏שינו את validThrough לתאריך שבו המשרה מולאה. ‏אל תסירו את ה-schema לחלוטין, ‏זה גורם ל-redirect chain בעייתי. ‏אל תעדכנו את datePosted להיום (זה שינוי משמעותי שגוגל ירשום אותו). ‏פשוט עדכנו validThrough להיום, ‏המשרה תיעלם תוך 24 שעות מ-Google for Jobs.

אופציה מתקדמת, ‏jobImmediateStart

‏property בשם jobImmediateStart (boolean) אומר לגוגל שהמשרה מתחילה מיד. ‏גוגל מתעדף משרות עם jobImmediateStart=true בדירוג. ‏לא חובה, ‏אבל אם המשרה באמת מיידית, ‏הוסיפו אותה.

⚠️ הטעות הגדולה, ‏עדכון datePosted כל יום

‏אנשי HR לפעמים חושבים שעדכון datePosted להיום "מרענן" את המשרה. ‏הפוך, ‏זה גורם לגוגל לאפס את הספירה ולחשוב שהמשרה חדשה. ‏אבל זה גם מאפס את ה-historical signals שגוגל אספה (clicks, ‏time on page, ‏וכו'), ‏אז המשרה מתחילה מאפס בדירוג. ‏נוסף לכך, ‏אם תעדכנו datePosted כל יום במשך 60 יום, ‏גוגל יחשוב שמדובר ב-spam ויסיר את כל אתר הקריירה שלכם מ-Google for Jobs באופן זמני. ‏אל תעשו את זה. ‏השאירו את datePosted קבוע, ‏עדכנו רק validThrough כשנדרש.

איך לעקוב אחרי deindex

‏ב-Search Console, ‏Enhancements > Job postings, ‏יש דוח שמציג כל ה-job postings שגוגל זיהתה. ‏אם משרה נעלמת, ‏היא תופיע כ-"Removed". ‏בדקו פעם בשבוע. ‏הסיבות הנפוצות לדיאינדקס, ‏(1) validThrough חסר ועברו 30 יום, ‏(2) המשרה הוסרה מהאתר וגוגל מצאה 404, ‏(3) ה-schema נשבר בעדכון אחרון של הקוד, ‏(4) המשרה מסומנת כ-duplicate של משרה אחרת באתר.

פרק 05

🌍 Remote jobs, ‏jobLocationType TELECOMMUTE ו-applicantLocationRequirements (עם דוגמת קוד)

‏משרות remote הן edge case מסובך ב-JobPosting schema. ‏בעבר היו אנשי HR שמילאו את jobLocation עם הכתובת של המשרד הראשי, ‏גם אם המשרה היא 100% remote. ‏זה גרם לבלבול אצל job seekers ("למה המשרה הזאת ברחובות אם היא remote?") וגם אצל גוגל ("איך זה משרה ברחובות אם המעסיק מקבל מועמדים מכל הארץ?"). ‏הפתרון של גוגל, ‏property חדש בשם jobLocationType עם הערך "TELECOMMUTE", ‏בשילוב עם applicantLocationRequirements שמגדיר מאיזה אזורים מתקבלים מועמדים.

הסכמה למשרה 100% remote

‏עבור משרה שהיא לחלוטין remote, ‏אסור לכלול jobLocation (זה ייגרום ל-validation error כשגם jobLocationType="TELECOMMUTE"). ‏במקום, ‏הוסיפו רק jobLocationType ו-applicantLocationRequirements. ‏לדוגמה, ‏משרה שמקבלת מועמדים מכל ישראל,

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "מפתח Full-Stack remote",
  "description": "<p>חברת stratup israely מחפשת מפתח Full-Stack שיעבוד מהבית או מ-co-working space. ‏הצוות מבוזר ברחבי הארץ, ‏ישיבות שבועיות ב-Zoom</p>",
  "datePosted": "2026-05-30",
  "validThrough": "2026-07-30T23:59:59+03:00",
  "employmentType": "FULL_TIME",
  "jobLocationType": "TELECOMMUTE",
  "applicantLocationRequirements": {
    "@type": "Country",
    "name": "Israel"
  },
  "hiringOrganization": {
    "@type": "Organization",
    "name": "Startup ABC",
    "sameAs": "https://startup-abc.co.il/"
  }
}
</script>

הסכמה למשרה hybrid (remote + ימים במשרד)

‏כאן צריך גם jobLocation וגם jobLocationType="TELECOMMUTE" וגם applicantLocationRequirements. ‏גוגל יבין שהמשרה היא בעיקרה remote אבל יש דרישה להגעה פיזית מדי פעם, ‏אז המיקום הפיזי רלוונטי כדי לסנן מועמדים שגרים רחוק מדי.

{
  "@type": "JobPosting",
  "title": "מנהל מוצר Hybrid",
  "jobLocationType": "TELECOMMUTE",
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "תל אביב",
      "addressRegion": "תל אביב",
      "addressCountry": "IL"
    }
  },
  "applicantLocationRequirements": {
    "@type": "AdministrativeArea",
    "name": "מרכז ושפלת החוף"
  }
}

multiple countries

‏אם המשרה מקבלת מועמדים מכמה מדינות, ‏השתמשו ב-array של Country objects:

"applicantLocationRequirements": [
  {"@type": "Country", "name": "Israel"},
  {"@type": "Country", "name": "United States"},
  {"@type": "Country", "name": "Germany"}
]
💡 ה-distinction החשובה

‏jobLocation מתאר "איפה הצוות נמצא פיזית" (אם רלוונטי). ‏applicantLocationRequirements מתאר "מאיפה אנחנו מקבלים מועמדים". ‏שני דברים שונים. ‏לדוגמה, ‏חברה ישראלית עם משרד בתל אביב שמחפשת developer remote מאירופה, ‏jobLocation = תל אביב (המשרד), ‏jobLocationType = TELECOMMUTE, ‏applicantLocationRequirements = רשימת מדינות אירופאיות. ‏ה-job seeker באירופה יבין שהוא יכול להגיש מועמדות גם בלי לעבור לישראל.

הטעות הקלאסית, ‏jobLocation עם המשרד הראשי במשרה 100% remote

‏אני רואה את זה לפחות פעם בשבועיים. ‏חברה ישראלית מפרסמת משרה 100% remote, ‏וב-jobLocation היא ממלא את הכתובת של המשרד הראשי כי "זאת הכתובת של החברה". ‏job seeker מחו"ל מסתכל ב-Google for Jobs, ‏רואה "רחובות, ישראל", ‏ולא מגיש מועמדות כי הוא חושב שמדובר במשרה במשרד פיזי בישראל. ‏זה פספוס של מועמדים טובים. ‏הגדרה נכונה של jobLocationType+applicantLocationRequirements פותרת את הבעיה.

פרק 06

💰 baseSalary disclosure, ‏הדיון על שקיפות שכר וההשפעה על Google

‏זה אחד הנושאים הכי שנויים במחלוקת ב-JobPosting schema. ‏גוגל ברורה, ‏היא מתעדפת משרות עם baseSalary גלוי. ‏ארה"ב חוקקה חוקים בכמה מדינות (NY, CA, CO) שמחייבים פרסום שכר במשרות. ‏האיחוד האירופאי הולך לכיוון דומה. ‏ישראל, ‏לא. ‏רוב המעסיקים הישראלים לא חושפים שכר. ‏הסיבות, ‏"אסטרטגיה", ‏"הימנעות מתחרות פנימית", ‏"גמישות במשא ומתן". ‏הסיבות הללו מתחשבות, ‏אבל הן באות במחיר של דירוג נמוך יותר ב-Google for Jobs.

למה גוגל מעדיפה משרות עם שכר גלוי

‏גוגל ל-Google for Jobs מצהירה במפורש בתיעוד, ‏"השכר הוא הפילטר הראשון של job seekers". ‏משרות עם שכר גלוי מקבלות יותר קליקים, ‏זמן ארוך יותר על העמוד, ‏ופחות נטישות. ‏האלגוריתם של Google for Jobs לומד את זה ומתעדף משרות עם שכר. ‏לפי דיווחים מ-Search Engine Journal ו-Search Engine Land, ‏אתרי קריירה שעברו לפרסם שכר ראו עלייה של 15-25% ב-impressions ב-Google for Jobs תוך חודשיים.

איך לגלות שכר ב-baseSalary

‏אם המעסיק אישר לחשוף שכר, ‏הסכמה היא פשוטה. ‏MonetaryAmount עם currency=ILS, ‏ו-value שהוא QuantitativeValue. ‏אם השכר נקודתי, ‏השתמשו ב-value. ‏אם טווחי, ‏ב-minValue ו-maxValue.

"baseSalary": {
  "@type": "MonetaryAmount",
  "currency": "ILS",
  "value": {
    "@type": "QuantitativeValue",
    "minValue": 22000,
    "maxValue": 32000,
    "unitText": "MONTH"
  }
}

unitText, ‏האפשרויות

  • HOUR, ‏שכר שעתי (מקובל ב-freelance, ‏ייעוץ, ‏מורים פרטיים)
  • DAY, ‏שכר יומי (מקובל ב-day-rate consultants)
  • WEEK, ‏שכר שבועי (נדיר בישראל)
  • MONTH, ‏שכר חודשי (הרגיל למשרות שכירים בישראל)
  • YEAR, ‏שכר שנתי (מקובל ב-tech ובמשרות בכירות)
⚠️ הטעות שמורידה מ-Google for Jobs, ‏baseSalary בלי currency

‏אם תוסיפו baseSalary עם value=20000 בלי "currency": "ILS", ‏גוגל לא יודע אם זה ש"ח, ‏דולר, ‏יורו, ‏או יוּן. ‏הוא לא מנחש, ‏הוא מתעלם מהסכמה לגמרי. ‏זה גורם לדיאינדקס מ-Google for Jobs. ‏currency חייב להיות קוד ISO 4217 בן 3 אותיות, ‏ILS, ‏USD, ‏EUR, ‏GBP. ‏לעולם לא "שח" או "שקל" או "₪".

מה לעשות אם המעסיק לא רוצה לגלות שכר

‏יש שלוש אופציות, ‏(1) ‏לוותר על baseSalary לחלוטין. ‏המשרה תופיע ב-Google for Jobs אבל בלי שכר, ‏ותקבל פחות clicks. ‏(2) ‏לפרסם טווח רחב מאוד (לדוגמה minValue=10000 maxValue=50000). ‏זה לא נותן ערך אמיתי ל-job seeker אבל מאפשר eligibility מלא. ‏לא מומלץ, ‏גוגל יכולה לזהות את זה כ-misleading. ‏(3) ‏לפרסם טווח ריאלי אבל רחב יותר ממה שהמעסיק רצה. ‏לדוגמה אם הוא רוצה לשלם 18-22 אלף, ‏פרסמו 16-25 אלף. ‏זה ה-compromise המעשי שאני ממליץ עליו אצל לקוחות.

פרק 07

🇮🇱 ההקשר הישראלי, ‏איך לטפל בחשיפת שכר בעברית

‏ישראל היא מקרה מיוחד בעולם המשרות. ‏רוב המעסיקים לא חושפים שכר, ‏לא בגלל חוק (אין חוק שאוסר), ‏אלא בגלל מנהג מקומי. ‏המנהג הזה מקבע את עצמו, ‏כי כל מעסיק חושב "אם אני אגלה, ‏המתחרים יידעו מה אני משלם". ‏זה classic prisoner's dilemma. ‏כולם היו מרוויחים אם היו מגלים, ‏אבל אף אחד לא רוצה להיות הראשון. ‏הסיכום, ‏כ-80-90% מהמשרות בישראל אין להן שכר מפורסם. ‏זה עובד נגדכם ב-Google for Jobs כי גוגל מתעדפת משרות עם שכר.

השוק הישראלי משתנה

‏השנים האחרונות יש שינוי. ‏חברות tech בינלאומיות שמגייסות בישראל (Microsoft Israel, ‏Google Israel, ‏Meta Israel, ‏Apple Israel) מתחילות לפרסם שכר כי זאת מדיניות גלובלית שלהן. ‏זה יוצר לחץ על חברות ישראליות מקומיות לעשות את אותו דבר. ‏אתרים כמו AllJobs ו-JobMaster עוד לא דורשים שכר חובה, ‏אבל זה רק שאלת זמן. ‏אם אתם אתר קריירה גדול, ‏שקלו להפוך את שדה השכר ל-soft requirement, ‏אופציונלי אבל מעודד אקטיבית.

הניסוח של שכר בעברית בתוך description

‏אם המעסיק לא רוצה לפרסם baseSalary structured אבל מסכים לציין שכר ב-description, ‏הוסיפו אותו ב-HTML של description. ‏זה לא יופיע בפילטר השכר של Google for Jobs (שאוסף רק מ-baseSalary), ‏אבל זה ייחשף ל-job seekers שלוחצים על המשרה. ‏ניסוחים מקובלים בעברית, ‏"שכר תחילי 18,000 ש\"ח", ‏"טווח שכר 22-30 אלף ש\"ח ברוטו", ‏"שכר תואם תכנון".

שכר באלפי שקלים, ‏הטעות הנפוצה

‏רוב הישראלים אומרים "שכר 25" (כלומר 25,000 ש"ח). ‏ב-baseSalary, ‏ה-value חייב להיות במספר מלא, ‏לא בקיצור. ‏לדוגמה minValue=25000 ולא minValue=25. ‏25 בקיצור ייפורש על ידי גוגל כ-25 ש"ח, ‏וזה ייצור curiosity-killing פילטור ("משרה ב-25 ש"ח לחודש? ‏מי תגיש מועמדות?"). ‏ולעיתים גוגל יתעלם לגמרי מהסכמה כי הערך נראה לא ריאלי.

💡 הטיפ המעשי

‏אם אתם מנהלים אתר קריירה עם מאות משרות, ‏נסו לעבור בהדרגה לחשיפת שכר. ‏התחילו בקטגוריה ספציפית (לדוגמה משרות tech) שבה זה יותר מקובל. ‏מדדו את ה-impact ב-Search Console (impressions ב-Google for Jobs לפני ואחרי). ‏עם נתוני המעבר, ‏יהיה לכם case ל-management להרחיב את המדיניות.

מטבע, ‏ILS תמיד

‏עבור משרות בישראל, ‏currency תמיד "ILS" (Israeli New Shekel, ‏קוד ISO 4217). ‏לעולם לא "NIS" (קיצור לא רשמי), ‏לא "שקל", ‏לא "₪". ‏גם אם השכר מצוין בדולר (לדוגמה ייעוץ לחברה אמריקאית), ‏ופרילנס ישראלי, ‏השתמשו ב-USD. ‏גוגל ימיר אוטומטית ב-Google for Jobs לפי שער ההמרה הנוכחי לטובת job seekers ב-IL.

פרק 08

📋 Employment types, ‏FULL_TIME / PART_TIME / CONTRACTOR / TEMPORARY / INTERN

‏employmentType הוא string ערך קבוע מבין רשימה ספציפית. ‏גוגל לא מקבל ערכים אחרים, ‏ולא מתרגם בין שפות. ‏אם תכתבו "משרה מלאה" בעברית, ‏גוגל יתעלם. ‏הערכים החוקיים, ‏באנגלית, ‏באותיות גדולות, ‏עם underscore.

FULL_TIME

‏משרה מלאה, ‏המקובל בישראל הוא 42-45 שעות שבועיות. ‏לרוב משרות שכירים בענף ה-tech, ‏ההייטק, ‏הפיננסים, ‏וכמעט כל "משרה ממשלתית" יש סיווג FULL_TIME. ‏אם המשרה היא 100% (משרה מלאה לפי הגדרת השעות של המעסיק), ‏זה FULL_TIME גם אם בפועל מספר השעות שונה ממקום למקום.

PART_TIME

‏משרה חלקית, ‏לרוב 50-80% משרה. ‏מקובל בעבודות סטודנטים, ‏עבודות נוספות, ‏הוראה חלקית. ‏אם השעות גמישות לחלוטין, ‏שקלו CONTRACTOR במקום.

CONTRACTOR

‏פרילנסר, ‏עוסק מורשה/פטור, ‏חברה ניהול. ‏לא שכיר, ‏עובד נגד חשבונית. ‏מקובל ב-tech freelance, ‏ייעוץ, ‏עיצוב, ‏תוכן. ‏אם המעסיק מקבל גם שכירים וגם פרילנסרים, ‏השתמשו ב-array (["FULL_TIME", "CONTRACTOR"]).

TEMPORARY

‏משרה זמנית עם תאריך התחלה וסיום ידועים מראש. ‏לדוגמה החלפת חופשת לידה, ‏פרויקט של 6 חודשים, ‏עזרה עונתית. ‏שונה מ-CONTRACTOR בכך שזה שכיר אבל לזמן מוגבל. ‏מקובל ב-academia, ‏בנקאות, ‏ועזרה זמנית במחלקות.

INTERN

‏סטאז'/התמחות. ‏לרוב סטודנטים בשנות לימודי לתואר ראשון או שני, ‏או בוגרים שעוד לא נכנסו לשוק העבודה הראשי. ‏בישראל זה מקובל בעיקר ב-tech ("intern at Google"), ‏ובמקצועות שדורשים התמחות חובה (רפואה, ‏עריכת דין, ‏ראיית חשבון). ‏שכר מקובל הוא 70-80% מהמשרה המלאה המקבילה.

VOLUNTEER

‏מתנדבים. ‏ללא תשלום. ‏מקובל בעמותות, ‏ארגונים חברתיים, ‏ופרויקטים קהילתיים. ‏גוגל מציג את זה בנפרד ב-Google for Jobs (יש פילטר "Volunteer").

PER_DIEM

‏עבודה לפי יום. ‏מקובל בפועלי בניין, ‏עוזרים בעונות חקלאיות, ‏מנהלי אירועים. ‏שכר משולם ליום עבודה, ‏לא לחודש.

OTHER

‏כל מה שלא נכנס בקטגוריות אחרות. ‏שימוש נדיר, ‏רק כאשר באמת אין התאמה.

שילובים

// משרה מלאה רגילה
"employmentType": "FULL_TIME"

// משרה שיכולה להיות גם שכיר וגם פרילנס
"employmentType": ["FULL_TIME", "CONTRACTOR"]

// משרה חלקית או התמחות
"employmentType": ["PART_TIME", "INTERN"]
⚠️ הטעות הקלאסית, ‏ערכים בעברית או בקטנות

‏אני רואה את זה הרבה ב-CMSs ישראליים שלא תוכננו ל-JobPosting schema. ‏הם מאפשרים למפרסם לבחור "משרה מלאה" מ-dropdown, ‏ושומרים את הערך הזה ב-DB. ‏ה-schema generator שלהם פולט "employmentType": "משרה מלאה", ‏או "employmentType": "full_time" (קטנות). ‏גוגל מתעלם. ‏הערך חייב להיות בדיוק FULL_TIME עם underscore ובאותיות גדולות. ‏ה-CMS שלכם צריך לתרגם בין הערך שהמשתמש בחר לבין הערך התקני של schema לפני שהוא פולט את ה-JSON-LD.

פרק 09

🏢 דוגמת קוד מלאה, ‏משרת office מלאה ב-tech

‏הנה דוגמה מלאה למשרת office ב-tech ישראלי. ‏כוללת את כל ה-properties שגוגל אוהב, ‏כולל baseSalary מפורסם, ‏identifier, ‏jobBenefits שמוצגים ב-Google for Jobs כ-feature. ‏תקשיבו, ‏זאת הגישה ה-best in class. ‏רוב המשרות בארץ עדיין עם schema חלקי. ‏תיתנו למשרות שלכם schema מלא, ‏ותתחילו לראות אותן מופיעות גבוה ב-Google for Jobs מעל למשרות של מתחרים גדולים יותר.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "Senior Backend Developer",
  "description": "<p>חברת StreamFlow מחפשת Senior Backend Developer לצוות platform שמטפל ב-2M requests ביום. ‏הצוות בנוי מ-8 מהנדסים, ‏עובדים ב-Hybrid (3 ימים במשרד, 2 מהבית). ‏הטכנולוגיה, ‏Node.js + PostgreSQL + Redis + Kubernetes.</p><h3>מה תעשו</h3><ul><li>פיתוח micro-services ב-Node.js</li><li>תכנון schemas ב-PostgreSQL ו-optimization של queries</li><li>Code review של חברי הצוות</li><li>Mentorship לחברים junior</li><li>Participation ב-on-call rotation (פעם בחודש)</li></ul><h3>מה אנחנו מחפשים</h3><ul><li>5+ שנות ניסיון בפיתוח backend ב-Node.js</li><li>ניסיון מעמיק ב-PostgreSQL (queries מורכבים, optimization, indices)</li><li>ניסיון ב-distributed systems</li><li>ידע ב-Kubernetes ו-Docker</li><li>יכולת mentorship מוכחת</li></ul>",
  "identifier": {
    "@type": "PropertyValue",
    "name": "StreamFlow",
    "value": "BE-SENIOR-2026-007"
  },
  "datePosted": "2026-05-30",
  "validThrough": "2026-08-30T23:59:59+03:00",
  "employmentType": "FULL_TIME",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "StreamFlow Technologies",
    "sameAs": "https://streamflow.co.il/",
    "logo": "https://streamflow.co.il/logo-square.png"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "רחוב יגאל אלון 94",
      "addressLocality": "תל אביב",
      "addressRegion": "תל אביב",
      "postalCode": "6789139",
      "addressCountry": "IL"
    }
  },
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "ILS",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 35000,
      "maxValue": 48000,
      "unitText": "MONTH"
    }
  },
  "qualifications": "5+ שנות ניסיון ב-Node.js, ‏PostgreSQL, ‏ניסיון ב-distributed systems",
  "responsibilities": "פיתוח micro-services, ‏code review, ‏mentorship",
  "skills": "Node.js, PostgreSQL, Redis, Kubernetes, Docker, distributed systems",
  "educationRequirements": {
    "@type": "EducationalOccupationalCredential",
    "credentialCategory": "תואר ראשון במדעי המחשב או ניסיון מקביל"
  },
  "experienceRequirements": {
    "@type": "OccupationalExperienceRequirements",
    "monthsOfExperience": 60
  },
  "jobBenefits": "קרן השתלמות, ‏ביטוח בריאות פרטי, ‏סופי שבוע ארוכים, ‏meal allowance",
  "workHours": "Sunday to Thursday, ‏09:00-18:00, ‏Friday 09:00-13:00",
  "jobLocationType": "TELECOMMUTE",
  "applicantLocationRequirements": {
    "@type": "AdministrativeArea",
    "name": "מרכז ושפלת החוף"
  }
}
</script>

מה מיוחד פה

  • description עשיר עם HTML, ‏headings (h3), ‏unordered lists (ul/li). ‏גוגל מרנדר את זה ב-Google for Jobs כשמתרחבים על ה-card.
  • identifier ייחודי, ‏BE-SENIOR-2026-007 שמאפשר tracking של המשרה גם בין אתרים שונים (LinkedIn, ‏Indeed) שמשתמשים באותו identifier.
  • jobLocationType="TELECOMMUTE" עם jobLocation שמלא, ‏המשרה היא hybrid, ‏3 ימים במשרד 2 מהבית. ‏גוגל יבין שהמיקום הפיזי רלוונטי אבל המשרה תופיע גם בפילטר "Remote".
  • applicantLocationRequirements="מרכז ושפלת החוף", ‏אנחנו מקבלים מועמדים רק מאזור המרכז כי הם יצטרכו להגיע למשרד 3 ימים בשבוע. ‏מסנן אוטומטי לאנשים מהצפון או הדרום.
  • baseSalary טווח רחב, ‏35-48 אלף. ‏זה מאפשר flexibility במשא ומתן ועוזר ל-job seekers להבין שהמשרה ריאלית לטווח רחב של ניסיון.
  • workHours כתוב במחרוזת חופשית, ‏גוגל לא מציג את זה רגיל ב-Google for Jobs, ‏אבל זה assists ל-AI engines (ChatGPT, ‏Perplexity) שיכולים להציג את זה ב-summary של המשרה.
💡 לבדוק את ה-schema ב-Rich Results Test

‏אחרי הטמעה, ‏פתחו את schema.org basics וקראו את הסקציה על validation. ‏הריצו את הקוד דרך Rich Results Test של גוגל (search.google.com/test/rich-results). ‏אם הוא מציג "eligible for Job posting rich results", ‏אתם במצב טוב. ‏אם יש warnings, ‏תקנו אותם, ‏גם אם הם "רק warnings". ‏כל warning מצמצם את הסיכוי להופיע, ‏במיוחד warnings על validThrough (recommended חזק) ו-baseSalary (recommended).

פרק 10

🏠 דוגמת קוד מלאה, ‏משרת remote 100%

‏הנה דוגמה למשרה שהיא 100% remote, ‏ללא דרישה להגיע למשרד בכלל. ‏שימו לב, ‏אין jobLocation בכלל, ‏רק jobLocationType="TELECOMMUTE" + applicantLocationRequirements. ‏זה ההבדל המהותי מהדוגמה הקודמת. ‏המשרה מקבלת מועמדים מכל ישראל ומחו"ל.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "Frontend Engineer (Fully Remote)",
  "description": "<p>חברת NotionLike מחפשת Frontend Engineer לעבודה remote 100%. ‏הצוות מבוזר ב-5 מדינות, ‏ישיבות שבועיות ב-Zoom, ‏async communication ב-Slack. ‏אין דרישה לימי משרד, ‏אין דרישה ל-timezone ספציפי, ‏עובדים גמיש.</p><h3>מה תעשו</h3><ul><li>פיתוח רכיבי UI מורכבים ב-React + TypeScript</li><li>עבודה צמודה עם designers</li><li>optimization של performance לאלפי משתמשים בו זמנית</li><li>כתיבת unit + integration tests</li></ul><h3>מה אנחנו מחפשים</h3><ul><li>3+ שנות ניסיון ב-React</li><li>TypeScript proficiency</li><li>ניסיון בעבודה async ב-distributed team</li><li>יכולת self-management גבוהה</li><li>אנגלית רהוטה (השפה של הצוות)</li></ul>",
  "identifier": {
    "@type": "PropertyValue",
    "name": "NotionLike",
    "value": "FE-REMOTE-2026-013"
  },
  "datePosted": "2026-05-30",
  "validThrough": "2026-08-30T23:59:59+00:00",
  "employmentType": "FULL_TIME",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "NotionLike",
    "sameAs": "https://notionlike.com/",
    "logo": "https://notionlike.com/logo.png"
  },
  "jobLocationType": "TELECOMMUTE",
  "applicantLocationRequirements": [
    {"@type": "Country", "name": "Israel"},
    {"@type": "Country", "name": "United States"},
    {"@type": "Country", "name": "Germany"},
    {"@type": "Country", "name": "United Kingdom"},
    {"@type": "Country", "name": "Portugal"}
  ],
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 90000,
      "maxValue": 130000,
      "unitText": "YEAR"
    }
  },
  "qualifications": "3+ years React, ‏TypeScript proficiency, ‏async work experience",
  "responsibilities": "Build complex UI components, ‏work with designers, ‏optimize performance",
  "skills": "React, TypeScript, CSS-in-JS, Jest, ‏async communication",
  "experienceRequirements": {
    "@type": "OccupationalExperienceRequirements",
    "monthsOfExperience": 36
  },
  "jobBenefits": "Unlimited vacation, ‏home office stipend, ‏health insurance allowance, ‏ESOP"
}
</script>

מה מיוחד פה

  • אין jobLocation בכלל, ‏כי המשרה היא 100% remote. ‏אם הייתי מוסיף jobLocation עם כתובת של משרד כלשהו, ‏גוגל היה מבלבל job seekers ומציג את המיקום הפיזי. ‏העדפה ברורה, ‏השמטה.
  • applicantLocationRequirements כ-array של 5 מדינות, ‏המעסיק מוכן לקבל מועמדים מ-IL, ‏US, ‏DE, ‏GB, ‏PT. ‏גוגל יציג את המשרה ל-job seekers מהארצות הללו ב-Google for Jobs.
  • currency="USD" ו-unitText="YEAR", ‏המעסיק שותל שכר בדולר שנתי (פורמט סטנדרטי ב-tech בינלאומי). ‏גוגל ימיר את זה לשקלים אוטומטית לפי שער ההמרה הנוכחי כשמציג ל-job seeker בישראל.
  • validThrough עם timezone UTC (+00:00), ‏כי המעסיק לא בישראל, ‏ולא רוצה להתחייב ל-timezone ספציפי. ‏UTC הוא ה-default המקובל ב-tech בינלאומי.
  • jobBenefits כולל "Unlimited vacation" ו-"ESOP", ‏benefits שנפוצים בחברות tech בינלאומיות. ‏גוגל לא תמיד מציגה אותם ב-card, ‏אבל הם מעלים את ה-CTR כשהם מופיעים.
💡 הטיפ המעשי

‏אם אתם חברה ישראלית שמגייסת לתפקיד remote לעובדים מחו"ל, ‏הוסיפו לתחילת ה-description "This is a fully remote position. Israeli candidates and international candidates from EU/US/UK welcome." באנגלית. ‏זה מבהיר ל-job seekers ולגוגל שהמשרה באמת בינלאומית ולא מוגבלת לישראל. ‏הוא גם משפר את ה-relevance score של המשרה לחיפושים באנגלית.

פרק 11

💼 דוגמת קוד מלאה, ‏משרת freelance / CONTRACTOR

‏משרות freelance הן edge case מעניין. ‏הן לא משרות שכירים, ‏אז הרבה מ-properties הרגילות לא רלוונטיות. ‏אין שעות עבודה קבועות, ‏אין benefits שכירים, ‏אין דרישת הגעה למשרד. ‏עם זאת, ‏גוגל מציגה אותן ב-Google for Jobs באותו פילטר עם CONTRACTOR. ‏הנה דוגמה למשרה freelance של מעצב UX לפרויקט של 3 חודשים.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "מעצב UX לפרויקט redesign (3 חודשים)",
  "description": "<p>חברת FintechIL מחפשת מעצב UX לפרויקט redesign של הדשבורד הראשי שלה. ‏פרויקט מוגדר, ‏3 חודשים, ‏אפשרות הארכה לפרויקטים נוספים. ‏עובדים מול PM ו-Frontend lead. ‏העבודה רובה async עם sync calls פעמיים בשבוע.</p><h3>מה תעשו</h3><ul><li>Discovery research עם משתמשים קיימים (3 שבועות)</li><li>Wireframes ו-prototypes ב-Figma (4 שבועות)</li><li>High-fidelity designs (3 שבועות)</li><li>Handoff ל-frontend ו-QA support (2 שבועות)</li></ul>",
  "identifier": {
    "@type": "PropertyValue",
    "name": "FintechIL",
    "value": "UX-CONTRACT-Q2-2026"
  },
  "datePosted": "2026-05-30",
  "validThrough": "2026-06-30T23:59:59+03:00",
  "employmentType": "CONTRACTOR",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "FintechIL",
    "sameAs": "https://fintechil.co.il/"
  },
  "jobLocationType": "TELECOMMUTE",
  "applicantLocationRequirements": {
    "@type": "Country",
    "name": "Israel"
  },
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "ILS",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 400,
      "maxValue": 550,
      "unitText": "HOUR"
    }
  },
  "qualifications": "5+ שנות ניסיון UX/UI, ‏ניסיון מוכח עם פרויקטים פיננסיים, ‏Figma proficiency",
  "responsibilities": "Discovery research, ‏wireframes, ‏prototypes, ‏high-fidelity designs, ‏handoff",
  "skills": "Figma, ‏user research, ‏wireframing, ‏prototyping, ‏design systems, ‏fintech UX",
  "experienceRequirements": {
    "@type": "OccupationalExperienceRequirements",
    "monthsOfExperience": 60
  },
  "workHours": "Flexible, ‏estimated 80-100 hours/month for 3 months"
}
</script>

מה מיוחד פה

  • employmentType="CONTRACTOR", ‏זה freelance, ‏לא שכיר. ‏גוגל יציג את המשרה בפילטר "Contract" של Google for Jobs ולא בפילטר "Full-time". ‏זה חשוב כי שני ה-job seeker pools שונים.
  • unitText="HOUR", ‏שכר שעתי במקום חודשי. ‏מקובל ב-freelance. ‏גוגל ימיר את זה לחישוב חודשי (לפי 168 שעות) כשמציג בפילטר השכר.
  • validThrough קצר (30 יום בלבד), ‏כי הפרויקט עצמו קצר ויש דחיפות. ‏אין סיבה לתת לפרסום לחיות 90 יום אם הפרויקט מתחיל בעוד שבועיים.
  • workHours כ-"Flexible", ‏לא שעות קבועות. ‏המעסיק רק מציין כמה שעות בחודש בערך. ‏מקובל ב-freelance.
  • jobLocationType="TELECOMMUTE" + applicantLocationRequirements=Israel, ‏המשרה remote, ‏אבל רק לישראלים (אולי בגלל דרישות חשבונית/מע"מ).
  • בלי benefits, ‏freelance לא מקבל benefits שכירים (קרן השתלמות, ‏ביטוח בריאות, ‏חופשה). ‏השמטה היא הגישה הנכונה, ‏לא להמציא benefits שלא קיימים.
⚠️ הטעות הקלאסית של freelance, ‏אי הוספת employmentType

‏הרבה אתרי freelance לא מוסיפים employmentType בכלל, ‏או מוסיפים FULL_TIME בטעות. ‏זה גורם לבלבול אצל job seekers שמחפשים specifically freelance עבודה. ‏הם רואים את המשרה בפילטר Full-time, ‏לוחצים, ‏מבינים שזה לא, ‏ויוצאים. ‏זה מעלה את bounce rate ופוגע ב-relevance score. ‏הקפידו על CONTRACTOR לכל פרילנס.

פרק 12

🔍 Validation עם Rich Results Test ו-Google for Jobs requirements

‏אחרי שתטמיעו את ה-schema, ‏חובה להריץ validation. ‏גוגל מציע 2 כלים, ‏Rich Results Test (search.google.com/test/rich-results) ו-Schema Validator (validator.schema.org). ‏שניהם חינמיים, ‏שניהם מקבלים URL או קוד מודבק. ‏ההבדל ביניהם, ‏Rich Results Test בודק eligibility ל-rich results של גוגל ספציפית, ‏Schema Validator בודק תאימות תחבירית של ה-schema בלי קשר לגוגל.

השלבים לתפעול Rich Results Test

  1. פתחו search.google.com/test/rich-results

    ‏הכניסו את ה-URL של עמוד המשרה, או בחרו "Code" וה-deduce את הסכמה ידנית.

  2. חכו ל-test לסיים

    ‏לוקח 10-30 שניות. ‏גוגל מוריד את העמוד, ‏מפענח את הסכמה, ‏ובודק אותה מול הדרישות.

  3. בדקו את התוצאה

    ‏"Eligible for Job posting rich results" = מעולה, ‏המשרה תופיע ב-Google for Jobs. ‏"Not eligible" = יש שגיאות חמורות. ‏"Eligible with warnings" = תופיע אבל לא optimal.

  4. תקנו warnings

    ‏כל warning הוא הזדמנות. ‏גם אם המשרה תקפה טכנית, ‏warning מציין שיש משהו שגוגל מעדיף שתשפרו. ‏ככל שיש פחות warnings, ‏הדירוג גבוה יותר.

השגיאות הנפוצות ב-Rich Results Test

  • Missing field 'validThrough', ‏הוספתם datePosted אבל לא validThrough. ‏warning בלבד, ‏אבל אחרי 30 יום תיעלם המשרה.
  • Invalid value for 'datePosted', ‏פורמט לא נכון. ‏חייב להיות ISO 8601 (YYYY-MM-DD).
  • Invalid currency code, ‏השתמשתם ב-"שח" או "NIS" במקום "ILS". ‏גוגל לא מקבל.
  • Missing 'value' for baseSalary, ‏הוספתם MonetaryAmount בלי QuantitativeValue. ‏צריך value או minValue+maxValue.
  • jobLocation should not be present when jobLocationType is TELECOMMUTE without applicantLocationRequirements, ‏סתירה לוגית. ‏אם 100% remote, ‏השמיטו jobLocation.
  • employmentType value not recognized, ‏השתמשתם בערך לא תקני (לדוגמה "משרה מלאה" או "full time" בקטנות).
  • Description shorter than 50 characters, ‏description קצר מדי. ‏גוגל רוצה לפחות 200 מילים בפועל, ‏אבל זורק warning כבר ב-50 תווים.

בדיקה ב-Search Console

‏אחרי שה-schema הוטמע ו-validated, ‏ב-Google Search Console יש דוח ייעודי, ‏Enhancements > Job postings. ‏הוא מציג, ‏(1) ‏כמה משרות גוגל זיהתה, ‏(2) ‏כמה מהן eligible ל-rich results, ‏(3) ‏כמה errors יש, ‏(4) ‏אילו URLs ספציפיים בעייתיים. ‏בדקו את הדוח הזה אחת לשבוע. ‏אם יש errors חדשים אחרי הטמעה, ‏זה כנראה שינוי בקוד שלכם שבר את ה-schema.

💡 ה-bulk validation

‏אם יש לכם אתר קריירה עם מאות משרות, ‏לא תוכלו להריץ Rich Results Test על כל אחת. ‏הפתרון, ‏השתמשו ב-Screaming Frog (כלי crawler) שיכול לחלץ את ה-schema מכל העמודים ולבדוק validation ב-bulk. ‏החריגות יתפסו את שלכם בידיים. ‏אופציה אחרת, ‏Google Structured Data Testing Tool API שניתן להפעיל מקוד שלכם ולקבל validation אוטומטי לכל משרה חדשה.

פרק 13

📊 Indeed/LinkedIn vs your-site, ‏אפשר לדרג על אותה משרה בשני המקומות

‏אחד הדברים שמפתיע אנשי HR, ‏אפשר לדרג על אותה משרה גם ב-Indeed/LinkedIn וגם באתר הקריירה שלכם. ‏גוגל לא מעניש על duplication בין אתרים, ‏הוא רק מציג את הגרסה הטובה ביותר ב-Google for Jobs. ‏אם שתי הגרסאות (LinkedIn ו-שלכם) טובות, ‏גוגל יציג את שתיהן (לפעמים אחת בלבד, ‏אבל עם קישור ל-"Apply on more sites"). ‏זה אומר שיש לכם הזדמנות לתפוס את ה-job seeker גם דרך LinkedIn וגם דרך האתר שלכם, ‏מה ש-doubles את ה-exposure.

למה זה עובד אחרת מ-duplicate content רגיל

‏ב-SEO רגיל, ‏duplicate content בין שני אתרים הוא בעיה. ‏גוגל מסירה אחד מהם או מבזרת את ה-authority. ‏ב-JobPosting, ‏זה לא ככה. ‏גוגל מבין שזה נורמלי שאותה משרה תופיע ב-3-4 אתרים שונים (LinkedIn, ‏Indeed, ‏אתר החברה, ‏job board ייעודי). ‏זה לא duplicate, ‏זה syndication. ‏גוגל יציג את כולם, ‏ויאפשר ל-job seeker לבחור איפה להגיש מועמדות.

איך גוגל מחליטה איזו גרסה להציג ראשונה

‏גוגל יש לה אלגוריתם מורכב, ‏אבל הסיגנלים הראשיים, ‏(1) ‏איכות ה-schema (כמה properties יש, ‏האם הם מלאים, ‏האם validThrough תקין), ‏(2) ‏authority של הדומיין (אתר חברה גדולה ידורג גבוה ממיני job board), ‏(3) ‏freshness (משרה שפורסמה אתמול עדיפה על משרה שפורסמה לפני חודשיים, ‏גם אם זאת אותה משרה), ‏(4) ‏completeness (משרה עם baseSalary + benefits + skills מלאים מנצחת משרה עם רק title + description), ‏(5) ‏clicks היסטוריים (משרות שנקראות יותר בעבר עולות גבוה).

למה לפרסם גם באתר שלכם וגם ב-LinkedIn

  • השליטה במידע, ‏ב-LinkedIn יש מגבלות פורמט, ‏מספר תווים, ‏ועיצוב. ‏באתר שלכם אתם שולטים ב-100%.
  • ה-CTA יותר חזק, ‏ב-LinkedIn job seekers נשארים ב-LinkedIn ולא מבקרים באתר שלכם. ‏באתר שלכם הם רואים גם משרות אחרות, ‏גם תוכן על החברה, ‏גם blogposts. ‏זה משפיע על brand awareness.
  • ה-applicant data שלכם, ‏ב-LinkedIn applicants עוברים דרך LinkedIn ויש להם פחות שליטה על ה-data שלכם. ‏באתר שלכם אתם אוספים את ה-data ישירות (ATS שלכם).
  • SEO לטווח ארוך, ‏גם אם משרה מסוימת ממולאת, ‏העמוד שלכם נשאר ויכול לדרג על keywords ארוכי-זנב ("מפתח Backend ב-StreamFlow", ‏"קריירה ב-StreamFlow").

איך להבטיח שגוגל מציגה את שתיהן

‏הקפידו על schema זהה במידת האפשר בין שני האתרים. ‏אם ה-identifier זהה (אותו FE-2026-042 גם ב-LinkedIn וגם אצלכם), ‏גוגל יבין שזאת אותה משרה ויציג את שתי הגרסאות בקרוסלה. ‏אם identifier שונה, ‏גוגל יחשוב שזאת 2 משרות נפרדות ויציג אותן כאילו הן 2 משרות.

💡 הטיפ המתקדם, ‏Indeed/LinkedIn aggregation

‏רוב אתרי הקריירה הגדולים בישראל (Drushim, ‏AllJobs, ‏JobMaster) מבצעים scraping של אתרי החברות ומפרסמים את המשרות גם אצלם, ‏בלי שתבקשו. ‏זה מעלה את ה-reach (משרה אחת מופיעה ב-7 אתרים שונים) אבל מצמצם את ה-control. ‏אם אתם רוצים לחסום את זה, ‏הוסיפו <meta name="robots" content="noai, nosnippet"> לעמוד המשרה, ‏זה לא יחסום את ה-scraping אבל יציג ל-aggregators שאתם מעדיפים שהם לא יציגו את התוכן שלכם.

פרק 14

🚫 הטעויות הנפוצות (missing validThrough, ‏baseSalary בלי currency, ‏identifier חסר)

‏אחרי כל ההסברים הטכניים, ‏בואו נסכם את הטעויות שאני רואה הכי הרבה אצל לקוחות. ‏אם תימנעו מ-5 אלה, ‏המשרות שלכם יישארו ב-Google for Jobs לאורך זמן. ‏תקשיבו, ‏חלק מהטעויות נראות תמימות אבל הן ההבדל בין משרה שמופיעה לבין משרה שנמחקת אחרי 30 יום.

טעות 1, ‏missing validThrough

‏הכי שכיחה. ‏המקדם הטמיע את הסכמה עם datePosted אבל שכח את validThrough. ‏המשרה מופיעה ב-Google for Jobs לחודש, ‏ואז נעלמת. ‏אנשי HR לא מבינים מה קרה. ‏הם חושבים שזה באג של גוגל. ‏זה לא, ‏זאת מדיניות. ‏הוסיפו validThrough תמיד, ‏גם אם זה +90 יום מהיום.

טעות 2, ‏baseSalary בלי currency

‏המקדם הוסיף baseSalary עם value אבל שכח את currency. ‏גוגל מתעלם מה-schema לחלוטין (לא רק מה-salary), ‏ולא מציג eligibility ל-rich results. ‏currency חייב להיות ISO 4217, ‏ILS למשרות בישראל, ‏USD לבינלאומיות. ‏לעולם לא "שח".

טעות 3, ‏identifier חסר

‏המקדם לא הוסיף identifier. ‏זה לא error חמור (המשרה עדיין eligible), ‏אבל זה מונע tracking יעיל. ‏גוגל לא יודע לקשר את המשרה לגרסה אחרת שלה ב-LinkedIn/Indeed, ‏ולכן יציג אותן כ-2 משרות נפרדות במקום כקרוסלה אחת.

טעות 4, ‏datePosted בפורמט DD/MM/YYYY

‏מפתח ישראלי כותב את התאריך בפורמט "30/05/2026" כי זה הפורמט בעברית. ‏גוגל לא קולט. ‏ISO 8601 בלבד, ‏"2026-05-30".

טעות 5, ‏employmentType בעברית או בקטנות

‏"משרה מלאה" או "full_time" בקטנות. ‏גוגל מתעלם. ‏חייב להיות FULL_TIME עם underscore ובאותיות גדולות.

טעויות נוספות (מהיר)

  • jobLocation עם המשרד הראשי במשרה 100% remote
  • jobLocationType="TELECOMMUTE" בלי applicantLocationRequirements
  • currency code לא תקני ("NIS" במקום "ILS")
  • description קצר מדי (פחות מ-200 מילים)
  • description עם קישורים פעילים (גוגל מסירה אותם)
  • hiringOrganization name לא תואם לשם החברה ב-GBP
  • שכפול JobPosting schema באותו עמוד (גוגל סופר רק אחת)
  • תאריכים בפורמט מקומי במקום ISO 8601
  • baseSalary בלי unitText (MONTH/HOUR/YEAR)
  • baseSalary value=25 במקום value=25000 (קיצור ל-25 אלף)
⚠️ הטעות הקטסטרופלית, ‏עדכון datePosted כל יום

‏אנשי HR לפעמים חושבים שעדכון datePosted להיום "מרענן" את המשרה ועוזר לה לדרג יותר. ‏זה הפוך. ‏עדכון datePosted מאפס את כל הסיגנלים ההיסטוריים של המשרה (clicks, ‏time on page, ‏CTR), ‏ומחזיר אותה להתחלה בדירוג. ‏אם תעדכנו datePosted כל יום במשך 60 יום, ‏גוגל יחשוב שמדובר ב-spam (manipulation of freshness signals) ויסיר את כל אתר הקריירה שלכם מ-Google for Jobs באופן זמני. ‏אל תעשו את זה. ‏השאירו את datePosted קבוע. ‏עדכנו רק validThrough כשנדרש.

פרק 15

📅 Monthly audit checklist + bulk job site implementation

‏אם תקראתם עד כאן, ‏יש לכם את כל הידע התיאורטי. ‏עכשיו צריך תהליך מעשי שתבצעו אחת לחודש כדי לוודא שאתר הקריירה שלכם נשאר ב-Google for Jobs. ‏הנה ה-workflow שאני עובד לפיו אצל לקוחות HR, ‏עם checklist חודשי לתחזוקה.

10 הצעדים להטמעה ראשונית של JobPosting במערכת bulk

  1. זיהוי ה-CMS/ATS שלכם

    ‏WordPress + WP Job Manager? ‏Drupal? ‏Greenhouse? ‏Workday? ‏Bullhorn? ‏בנייה מותאמת? ‏ה-CMS משפיע על איך מטמיעים.

  2. יצירת template של JSON-LD

    ‏הגדירו template שאוסף מ-DB את כל ה-fields ופולט JSON-LD תקין. ‏השתמשו ב-helper libraries (jsonld-php, json-ld.js) כדי להבטיח escape תקין של תווי עברית.

  3. הזרקה ל-<head> של כל עמוד משרה

    ‏ה-schema צריך להיות בתוך <script type="application/ld+json"> בתוך <head>. ‏לא ב-body, ‏לא ב-footer.

  4. הגדרת default values

    ‏לכל field שאופציונלי, ‏הגדירו default ב-CMS. ‏לדוגמה employmentType="FULL_TIME" אם המפרסם לא בחר, ‏currency="ILS" תמיד.

  5. הוספת validation בהגשה

    ‏בטופס יצירת משרה, ‏ולידציה ב-frontend ו-backend על השדות הקריטיים (title, ‏datePosted, ‏validThrough). ‏אל תאפשרו לפרסם משרה בלי validThrough.

  6. בדיקה ב-Rich Results Test

    ‏לפני go-live, ‏בדקו 5-10 משרות לדוגמה ב-RRT. ‏וודאו 0 errors.

  7. הוספת sitemap-jobs.xml

    ‏sitemap נפרד שמכיל רק URLs של משרות. ‏זה עוזר לגוגל לסרוק אותן מהר יותר.

  8. הגשה ל-Search Console

    ‏הוסיפו את ה-sitemap-jobs.xml ל-GSC. ‏גוגל יתחיל לסרוק.

  9. monitoring ב-GSC

    ‏אחרי 7-14 יום, ‏בדקו ב-Enhancements > Job postings. ‏שתי המשרות אמורות להופיע כ-Valid.

  10. אוטומציה של validThrough

    ‏אם משרה ממולאת, ‏ה-ATS שלכם צריך לעדכן validThrough אוטומטית להיום. ‏אל תסמכו על אנשי HR לעשות את זה ידנית.

צ'ק ליסט תחזוקה חודשית

  • בדיקת Search Console > Enhancements > Job postings, ‏ספירת errors
  • בדיקת כמה משרות חדשות נוספו, ‏וכמה נמחקו
  • בדיקה ידנית של 5 משרות אקראיות ב-Rich Results Test
  • השוואה עם Google for Jobs בפועל, ‏חיפוש 3 משרות שלכם בגוגל, ‏וודאו שהן מופיעות
  • בדיקת validThrough, ‏האם יש משרות שתפוגנה בקרוב? ‏אם כן, ‏האם הן עוד פעילות?
  • בדיקת clicks ב-GSC ל-jobs queries, ‏האם ה-traffic עולה או יורד?
  • סקר על משרות שנמחקו, ‏מהאתר ומ-Google for Jobs, ‏ניהול inventory
  • בדיקה שאין JobPosting schema על עמודים שאינם משרות (לדוגמה עמוד קטגוריות)
  • בדיקת שינויים בקוד שעלולים לשבור את ה-schema (אחרי כל deploy)
  • בדיקת changelog של schema.org, ‏האם יש properties חדשים שכדאי להוסיף?
✅ אם הולכים לפי זה, ‏המשרות נשארות ב-Google for Jobs

‏JobPosting schema זה לא משהו שמטמיעים פעם ושוכחים. ‏משרות נוספות ונמחקות כל הזמן, ‏validThrough תוקפת, ‏שינויים בקוד שוברים את הסכמה. ‏checklist חודשי של 30 דקות שומר על האתר שלכם פעיל ב-Google for Jobs. ‏רוב אתרי הקריירה בישראל מטמיעים פעם ושוכחים, ‏ואז נכשלים. ‏תהיו מקצועיים יותר. ‏calendar reminder אחת לחודש, ‏פתחו את GSC, ‏ופעלו לפי ה-checklist.

📖 מילון מושגים

JobPosting
Schema.org type שמתאר משרה בודדת. ‏התנאי הבסיסי ל-eligibility ל-Google for Jobs, ‏engine החיפוש הייעודי של גוגל למשרות.
Google for Jobs
engine חיפוש נפרד של גוגל שמופיע כסקציה ייחודית מעל תוצאות החיפוש האורגניות. ‏מציג רק משרות עם JobPosting schema תקין.
validThrough
תאריך תפוגה של משרה, ‏בפורמט ISO 8601 datetime עם timezone. ‏אם חסר, ‏גוגל מוחקת את המשרה אוטומטית מ-Google for Jobs אחרי 30 יום מ-datePosted.
datePosted
תאריך פרסום המשרה לראשונה, ‏בפורמט ISO 8601 (YYYY-MM-DD). ‏חובה. ‏אסור לעדכן אותו כל יום, ‏זה מאפס סיגנלים היסטוריים.
baseSalary
שכר בסיס של המשרה, ‏MonetaryAmount object עם currency ו-value (QuantitativeValue). ‏גוגל מתעדפת משרות עם baseSalary גלוי.
employmentType
סוג העסקה. ‏ערכים קבועים, ‏FULL_TIME, ‏PART_TIME, ‏CONTRACTOR, ‏TEMPORARY, ‏INTERN, ‏VOLUNTEER, ‏PER_DIEM, ‏OTHER. ‏באנגלית, ‏אותיות גדולות.
jobLocationType TELECOMMUTE
ערך שמציין שהמשרה היא remote. ‏צריך לבוא יחד עם applicantLocationRequirements. ‏במשרה 100% remote, ‏אין להשתמש ב-jobLocation.
applicantLocationRequirements
Object של Country או AdministrativeArea שמגדיר מאיזה אזורים מתקבלים מועמדים למשרה remote. ‏יכול להיות array של כמה.
identifier
מזהה ייחודי של המשרה, ‏PropertyValue object עם name (שם החברה) ו-value (קוד המשרה). ‏עוזר לקישור בין גרסאות באתרים שונים.
hiringOrganization
Organization object שמתאר את החברה המגייסת. ‏חובה. ‏צריך לכלול name, ‏ומומלץ url + logo. ‏ה-name חייב להיות זהה לשם החברה ב-GBP.
פרק 16

שאלות נפוצות

מה זה JobPosting schema בקצרה?
Schema.org type שמתאר משרה בודדת באתר קריירה. ‏זה התנאי הבסיסי כדי שהמשרה תופיע ב-Google for Jobs, ‏engine החיפוש הייעודי של גוגל למשרות. ‏ה-schema כולל properties חובה (title, ‏description, ‏datePosted, ‏hiringOrganization, ‏jobLocation) ו-recommended (validThrough, ‏baseSalary, ‏employmentType, ‏identifier).
האם JobPosting schema חובה כדי שהמשרה תופיע ב-Google for Jobs?
כן, ‏לחלוטין. ‏Google for Jobs הוא engine נפרד שאוסף משרות רק מאתרים שמטמיעים JobPosting schema תקין. ‏בלי הסכמה, ‏המשרה לא תופיע שם, ‏גם אם היא מופיעה בתוצאות החיפוש האורגניות הרגילות. ‏זה לא "קצת יותר טוב עם schema", ‏זה "קיים או לא קיים" ב-Google for Jobs.
למה המשרות שלי נעלמות מ-Google for Jobs אחרי 30 יום?
כנראה כי לא הוספתם validThrough לסכמה. ‏גוגל מסירה אוטומטית כל JobPosting בלי validThrough אחרי 30 יום מ-datePosted. ‏זאת מדיניות מכוונת כדי שהמשרות יישארו רלוונטיות. ‏הפתרון, ‏הוסיפו validThrough לכל משרה, ‏בפורמט ISO 8601 datetime עם timezone (לדוגמה 2026-08-30T23:59:59+03:00).
האם חובה לפרסם שכר ב-baseSalary?
לא חובה אבל מאוד מומלץ. ‏גוגל מתעדפת משרות עם שכר גלוי בדירוג ב-Google for Jobs. ‏אם המעסיק לא רוצה לחשוף, ‏יש שלוש אופציות, ‏(1) ‏לוותר על baseSalary לחלוטין, ‏(2) ‏לפרסם טווח רחב מאוד, ‏(3) ‏לפרסם טווח ריאלי אבל רחב יותר ממה שהוא רצה. ‏אופציה 3 היא ה-compromise המעשי שאני ממליץ.
איך מטפלים במשרה 100% remote ב-schema?
השתמשו ב-jobLocationType="TELECOMMUTE" יחד עם applicantLocationRequirements (Country או AdministrativeArea). ‏אסור לכלול jobLocation במשרה 100% remote (זה ייגרום ל-validation error). ‏במשרה hybrid (חלקה במשרד), ‏השתמשו בשניהם, ‏jobLocation עם המיקום הפיזי, ‏jobLocationType="TELECOMMUTE", ‏ו-applicantLocationRequirements שמגדיר מאיפה מקבלים מועמדים.
מה הפורמט הנכון של datePosted?
ISO 8601, ‏YYYY-MM-DD. ‏לדוגמה "2026-05-30". ‏לעולם לא DD/MM/YYYY או MM/DD/YYYY. ‏גוגל מתעלם מתאריכים בפורמט הלא תקני. ‏גם אסור לעדכן את datePosted כל יום, ‏זה מאפס את הסיגנלים ההיסטוריים של המשרה ומוריד אותה בדירוג. ‏השתמשו ב-validThrough כדי לציין מתי המשרה פגה, ‏לא ב-datePosted לרענון.
האם אפשר לדרג על אותה משרה גם ב-LinkedIn וגם באתר שלי?
כן, ‏בהחלט. ‏גוגל לא מעניש על duplication בין אתרים ב-JobPosting (שונה מ-SEO רגיל). ‏זה נחשב syndication, ‏לא duplicate content. ‏גוגל יציג את הגרסה הטובה ביותר ב-Google for Jobs, ‏ולעיתים את שתי הגרסאות בקרוסלה. ‏השתמשו באותו identifier בשתי הגרסאות כדי שגוגל יזהה שזאת אותה משרה.
מה הערכים החוקיים של employmentType?
FULL_TIME, ‏PART_TIME, ‏CONTRACTOR, ‏TEMPORARY, ‏INTERN, ‏VOLUNTEER, ‏PER_DIEM, ‏OTHER. ‏באנגלית, ‏אותיות גדולות, ‏עם underscore. ‏לעולם לא "משרה מלאה" בעברית או "full_time" בקטנות, ‏גוגל מתעלם. ‏אפשר array של כמה, ‏לדוגמה employmentType=["FULL_TIME", "CONTRACTOR"] למשרה שפתוחה גם לשכירים וגם לפרילנסרים.
מה ההבדל בין jobLocation ל-applicantLocationRequirements?
jobLocation מתאר את המיקום הפיזי של המשרה (איפה הצוות נמצא). ‏applicantLocationRequirements מתאר מאיפה אתם מקבלים מועמדים. ‏שני דברים שונים. ‏לדוגמה, ‏חברה בתל אביב שמחפשת developer remote מאירופה, ‏jobLocation=תל אביב, ‏jobLocationType=TELECOMMUTE, ‏applicantLocationRequirements=רשימת מדינות אירופאיות. ‏ה-job seeker באירופה יבין שהוא יכול להגיש מועמדות בלי לעבור לישראל.
מה לעשות אם המשרה ממולאת לפני validThrough?
עדכנו את validThrough לתאריך הנוכחי (היום). ‏המשרה תיעלם תוך 24 שעות מ-Google for Jobs. ‏אל תסירו את ה-schema לחלוטין (זה גורר 404 שגוגל יתעד), ‏ואל תעדכנו את datePosted להיום (זה מאפס סיגנלים). ‏רק validThrough.
האם חובה לכלול identifier בכל משרה?
לא חובה ל-eligibility, ‏אבל מומלץ מאוד. ‏identifier מאפשר לגוגל לקשר בין גרסאות שונות של אותה משרה באתרים שונים (LinkedIn, ‏Indeed, ‏שלכם). ‏בלי identifier, ‏גוגל יראה אותן כמשרות נפרדות וייתכן שתאבדו את ה-aggregation. ‏השתמשו בפורמט PropertyValue עם name (שם החברה) ו-value (קוד המשרה אצלכם).
מה הוא ההבדל בין description ל-qualifications?
description הוא תיאור עשיר ב-HTML של המשרה, ‏אורך מומלץ 200+ מילים, ‏גוגל מציגה אותו כשמתרחבים על ה-card ב-Google for Jobs. ‏qualifications הוא text קצר שמתאר את הדרישות הספציפיות (לדוגמה "3+ שנות ניסיון ב-React"). ‏אפשר וצריך לכלול את שניהם, ‏description מכיל את הכל, ‏qualifications מסכם רק את הדרישות. ‏יחד הם משפרים את ה-matching של job seekers.
איך לוודא ש-currency ב-baseSalary נכון לישראל?
תמיד ILS (Israeli New Shekel, ‏קוד ISO 4217). ‏לעולם לא NIS (קיצור לא רשמי), ‏לא "שקל", ‏לא "₪". ‏אם השכר בדולר (פרילנס לחברה אמריקאית), ‏השתמשו ב-USD. ‏גוגל ימיר אוטומטית לשקלים כשמציג ל-job seeker בישראל.
האם AI engines כמו ChatGPT משתמשים ב-JobPosting schema?
כן. ‏ChatGPT, ‏Perplexity, ‏וגוגל AI Overviews משתמשים ב-structured data כדי להבין מה המשרה כוללת ולהמליץ עליה בתשובה לשאלת משתמש. ‏כשמישהו שואל את ChatGPT "איזה משרת Frontend ב-tech בתל אביב מתאימה לי", ‏המנוע סורק אתרים עם JobPosting schema עשיר ומציג את המתאימות. ‏משרה עם schema מלא מקבלת יתרון.
איך עושים bulk validation של מאות משרות?
השתמשו ב-Screaming Frog (כלי crawler) שיכול לחלץ את ה-schema מכל העמודים ולבדוק validation ב-bulk. ‏אופציה אחרת, ‏Google Structured Data Testing Tool API שניתן להפעיל מקוד שלכם ולקבל validation אוטומטי לכל משרה חדשה. ‏השלישית, ‏Search Console > Enhancements > Job postings שמציג את כל ה-errors שגוגל זיהתה אצלכם.
שמוליק דורינבאום

צריכים לקפוץ למישהו שכבר ראה את הסרט?

שמוליק דורינבאום, 20 שנה ב SEO, 1,200 בוגרים בקורס. אם יש לכם אתר ולא בטוחים מאיפה להתחיל או שאתם תקועים במצב לא טוב, שלחו הודעה. תשובה תוך 24 שעות, בלי דמי ייעוץ למפגש הראשון.

שלחו הודעה

אתר שלא עולה בגוגל זה חוב, לא נכס

אם אתם פה, אתם כבר מבינים שמשהו לא בסדר. שלחו הודעה, נדבר. בלי התחייבות, בלי לחץ.

✓ תשובה חוזרת תוך 24 שעות · ✓ ללא התחייבות