Wie Indeed XML-Feeds und Google for Jobs JSON-LD tatsächlich funktionieren
Die zwei Hauptverteilungskanäle
Wenn Sie eine Stelle auf Indeed oder Google for Jobs posten, haben Sie zwei Optionen:
- Direkt posten — melden Sie sich bei Indeed.com an, füllen Sie ein Formular aus, klicken Sie auf Veröffentlichen
- Via Feed syndizieren — stellen Sie Ihre eigene Stellenausschreibung in einem maschinenlesbaren Format bereit (XML oder JSON-LD); die Stellenbörse extrahiert von Ihrem Feed und indexiert ihn
Direktes Posten ist einfach, aber begrenzt. Syndizierung ist ein wenig technischer, gibt Ihnen aber präzise Kontrolle: Sie können Status, Gehalt oder Anforderungen einer Stelle in Ihrem System aktualisieren, und es wird auf Indeed innerhalb weniger Stunden widergespiegelt, ohne Daten erneut einzugeben.
Die meisten seriösen Einstellungsteams nutzen Feeds.
Das Indeed XML-Format
Indeed akzeptiert einen proprietären XML-Feed. Hier ist die Struktur:
<?xml version="1.0" encoding="UTF-8"?>
<source>
<publisher>Your Company Name</publisher>
<publisherurl>https://yourcompany.com</publisherurl>
<lastBuildDate>2026-05-21T10:00:00Z</lastBuildDate>
<job>
<title>Senior Backend Engineer</title>
<date>2026-05-21T08:00:00Z</date>
<repourl>https://yourcompany.com/jobs/senior-backend-engineer</repourl>
<description><![CDATA[
<p>We are hiring a senior backend engineer...</p>
<ul>
<li>5+ years Python/Go experience</li>
</ul>
]]></description>
<salary>120000</salary>
<hiringOrganization>Your Company</hiringOrganization>
<jobLocation>
<countryName>US</countryName>
<stateName>California</stateName>
<cityName>San Francisco</cityName>
</jobLocation>
<employmentType>FULL_TIME</employmentType>
<jobCategory>ENGINEER</jobCategory>
</job>
</source>
Wichtige Elemente:
<title>: Stellentitel (erforderlich)<description>: Vollständige Stellenbeschreibung. Wrap mit<![CDATA[...]]>, falls Sie HTML oder Sonderzeichen enthalten. Setzen Sie HTML nicht inside das CDATA — halten Sie es sauberen Text oder fügen Sie das HTML-Markup hinzu.<salary>: Grundgehalt in USD. Einige Regionen akzeptieren Gehaltsspannen, aber Indeed indexiert primär einzelne Werte.<jobLocation>: Stadt, Bundesstaat, Land. Falls remote, entweder weglassen oder Stadt auf "Remote" setzen.<date>: Wenn die Stelle gepostet wurde (ISO 8601 Format). Indeed nutzt dies, um neuere Postings zu priorisieren.<repourl>: Link zurück zu Ihrer Karriereseite für diese spezifische Stelle. Wenn jemand "Bewerben" klickt, landen sie hier.<employmentType>: FULL_TIME, PART_TIME, CONTRACT, TEMPORARY
Google for Jobs: JSON-LD
Google hat ein anderes Format namens JobPosting strukturierte Daten in JSON-LD. Dies ist in Ihr HTML als <script type="application/ld+json"> Tag eingebettet.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Senior Backend Engineer",
"description": "We are hiring a senior backend engineer...",
"identifier": {
"@type": "PropertyValue",
"name": "Your Company",
"value": "job_123"
},
"datePosted": "2026-05-21",
"hiringOrganization": {
"@type": "Organization",
"name": "Your Company",
"sameAs": "https://yourcompany.com",
"logo": "https://yourcompany.com/logo.png"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94105",
"addressCountry": "US"
}
},
"baseSalary": {
"@type": "PriceSpecification",
"currency": "USD",
"minValue": 120000,
"maxValue": 160000,
"unitText": "YEAR"
},
"employmentType": "FULL_TIME",
"validThrough": "2026-06-21"
}
</script>
Kritische Felder für Google zum Indexieren:
datePosted: Muss vorhanden und aktuell sein. Google stuft alte Postings herab.hiringOrganization: Unternehmensname und (optional) Logo. Wird für das Employer-Brand-Snippet verwendet.baseSalary: Gehaltsspanne (min/max). Optional, aber verbessert CTR.validThrough: Bewerbungsfrist. Google entfernt Postings nach diesem Datum.jobLocation: Vollständige Postadresse oder remote.
CDATA-Fallstricke und Sonderzeichen
In XML brechen Sonderzeichen wie <, > und & den Feed. Wrap Ihre Beschreibung mit <![CDATA[...]]>:
<description><![CDATA[
We are looking for a developer with 5+ years experience.
Experience with: Java, Spring Boot, Docker.
]]></description>
Innerhalb von CDATA können Sie Plain HTML einfügen:
<description><![CDATA[
<p>We are looking for a developer with 5+ years experience.</p>
<ul>
<li>Java 8+</li>
<li>Spring Boot</li>
<li>Docker</li>
</ul>
]]></description>
Ohne CDATA brechen die <p> und <li> Tags den XML-Parser. Ideals Feed-Validator wird den gesamten Feed ablehnen.
Gehalt-Kodierung
Indeed XML: Nur Einzelgehalt-Wert. Falls Sie eine Spanne haben, nutzen Sie den Mittelpunkt oder das untere Ende.
<salary>140000</salary>
Google for Jobs: Unterstützt Spannweiten:
"baseSalary": {
"@type": "PriceSpecification",
"currency": "USD",
"minValue": 120000,
"maxValue": 160000,
"unitText": "YEAR"
}
Falls Ihre Stelle stündlich ist, nutzen Sie:
"baseSalary": {
"@type": "PriceSpecification",
"currency": "USD",
"minValue": 45,
"maxValue": 65,
"unitText": "HOUR"
}
Aktualisierungshäufigkeit und Refreshes
Einmal, dass Sie eine Feed-URL eingerichtet haben, crawlt Indeed ihn regelmäßig (normalerweise täglich, manchmal häufiger, falls Stellen oft ändern). Wenn eine Stelle schließt, entfernen Sie sie aus dem Feed oder setzen Sie ein Schließungsdatum. Indeed de-indexiert es automatisch.
Google for Jobs crawlt die HTML-Seiten, auf denen Sie JobPosting JSON-LD einbetten. Jedes Mal, wenn ein Kandidat Ihre Stellenseite besucht, indexiert Googles Crawler sie. Falls Sie das JSON-LD-Markup entfernen, verschwindet die Stelle aus Google for Jobs innerhalb weniger Tage.
Validierung und Debugging
Für Indeed XML:
- Nutzen Sie Ideals Feed Validator um Ihren Feed zu testen, bevor Sie ihn verbinden
- Häufige Fehler: fehlerhaftes CDATA, fehlende erforderliche Felder, ungültiges Datumsformat
Für Google for Jobs:
- Nutzen Sie Googles Structured Data Testing Tool oder das neuere Rich Results Test
- Überprüfen Sie auf fehlende datePosted, ungültige Datumsformate, oder CDATA-ähnliche String-Kodierungsprobleme
Wie ClarityHire Feeds generiert
ClarityHire auto-generiert sowohl einen Indeed XML-Feed unter /api/jobs/feed.xml als auch eine Google for Jobs JSON-LD Vorlage, die Sie auf Ihren Stellenseiten unter /careers/jobs/[job-id] einbetten.
Wenn Sie eine Stelle aktualisieren (Titel, Gehalt, Beschreibung), aktualisieren sich die Feeds automatisch. Geschlossene Stellen werden innerhalb von 2 Stunden aus Feeds entfernt. Das System respektiert die visibility Flag Ihrer Stelle: Entwurf-Stellen erscheinen nicht in Feeds.
TL;DR
Indeed erwartet XML mit CDATA-umwickelten Beschreibungen, Gehalt und Standort. Google for Jobs erwartet JSON-LD-Markup auf Ihrem HTML mit datePosted, validThrough und Gehaltsspannen. Beide nutzen ISO-Datumsformate (YYYY-MM-DD oder ISO 8601 Timestamps). CDATA ist Ihr Freund beim Umwickeln von HTML-Beschreibungen in XML. Validieren Sie vor dem Bereitstellung. Auto-entfernen Sie geschlossene Stellen aus Feeds. Testen Sie mit Googles Rich Results Test und Ideals Validator.
Einmal eingerichtet, verteilen sich Ihre Stellen auf Indeed und Google ohne Neueintrag. Das Setup dauert einen Tag; die laufende Hebelwirkung ist immens.