Indeed XML Feed și Google Jobs JSON-LD: Cum lucru actual
Două distribuție canal prim
Post job Indeed sau Google Jobs ai două opțiuni:
- Post direct—log Indeed.com, umple form, click publish
- Syndicate feed—furnizează propriul job listing format machine-readable (XML sau JSON-LD); job board pull feed și indexează
Post direct ușor dar limitat. Syndicate bit tehnic mai dar dă precis control: actualizare job status, salariu sau cerință propriul sistem și se vede Indeed în ore fără re-enter date.
Echipe hire serios foloseşte feed.
Indeed XML format
Indeed accept proprietary XML feed. Iată structură:
<?xml version="1.0" encoding="UTF-8"?>
<source>
<publisher>Nume compania</publisher>
<publisherurl>https://compania.com</publisherurl>
<lastBuildDate>2026-05-21T10:00:00Z</lastBuildDate>
<job>
<title>Senior Backend Engineer</title>
<date>2026-05-21T08:00:00Z</date>
<repourl>https://compania.com/jobs/senior-backend-engineer</repourl>
<description><![CDATA[
<p>Căutăm senior backend engineer...</p>
<ul>
<li>5+ ani Python/Go experiență</li>
</ul>
]]></description>
<salary>120000</salary>
<hiringOrganization>Compania ta</hiringOrganization>
<jobLocation>
<countryName>RO</countryName>
<stateName>București</stateName>
<cityName>București</cityName>
</jobLocation>
<employmentType>FULL_TIME</employmentType>
<jobCategory>ENGINEER</jobCategory>
</job>
</source>
Element cheie:
<title>: Titlu job (necesar)<description>: Descriere job complet. Wrap<![CDATA[...]]>dacă conține HTML sau caracter special. Nu pune HTML în CDATA—ține text curat sau adaugă HTML markup.<salary>: Salariu bază USD. Regiuni unele accept range salariu dar Indeed prim index valori unic.<jobLocation>: Oraș, stat, țară. Remote dacă, fie omit fie set oraș "Remote."<date>: Post job când (ISO 8601 format). Indeed asta foloseşte prioritize nou post.<repourl>: Link înapoi cariere pagina job specific. Cineva click "Apply," aterizează aici.<employmentType>: FULL_TIME, PART_TIME, CONTRACT, TEMPORARY
Google Jobs: JSON-LD
Google alt format JobPosting data structurată JSON-LD. Asta embed HTML script cum <script type="application/ld+json"> tag.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Senior Backend Engineer",
"description": "Căutăm senior backend engineer...",
"identifier": {
"@type": "PropertyValue",
"name": "Compania ta",
"value": "job_123"
},
"datePosted": "2026-05-21",
"hiringOrganization": {
"@type": "Organization",
"name": "Compania ta",
"sameAs": "https://compania.com",
"logo": "https://compania.com/logo.png"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "București",
"addressRegion": "București",
"postalCode": "010000",
"addressCountry": "RO"
}
},
"baseSalary": {
"@type": "PriceSpecification",
"currency": "USD",
"minValue": 120000,
"maxValue": 160000,
"unitText": "YEAR"
},
"employmentType": "FULL_TIME",
"validThrough": "2026-06-21"
}
</script>
Camp critic Google index:
datePosted: Trebuie prezent și recent. Google de-rank vech post.hiringOrganization: Nume companie și (optional) logo. Folosit brand employer snippet.baseSalary: Salariu range (min/max). Optional dar îmbunătățire CTR.validThrough: Job closing dată. Google elimina post după dată asta.jobLocation: Adresă poștală complet sau remote.
CDATA capcane și caracter special
XML caracter special cum <, > și & break feed. Wrap descriere în <![CDATA[...]]>:
<description><![CDATA[
Căutăm developer cu 5+ ani experiență.
Experiență: Java, Spring Boot, Docker.
]]></description>
În CDATA poți includ plain HTML:
<description><![CDATA[
<p>Căutăm developer cu 5+ ani experiență.</p>
<ul>
<li>Java 8+</li>
<li>Spring Boot</li>
<li>Docker</li>
</ul>
]]></description>
Fără CDATA, <p> și <li> tag break XML parser. Indeed-ul feed validator va respinge întreg feed.
Salariu encoding
Indeed XML: Valoare salariu unic singur. Ai range, foloseşte midpoint sau low end.
<salary>140000</salary>
Google Jobs: Suportă range:
"baseSalary": {
"@type": "PriceSpecification",
"currency": "USD",
"minValue": 120000,
"maxValue": 160000,
"unitText": "YEAR"
}
Job orar, foloseşte:
"baseSalary": {
"@type": "PriceSpecification",
"currency": "USD",
"minValue": 45,
"maxValue": 65,
"unitText": "HOUR"
}
Frecvență actualizare și refresh
URL feed o dată setup, Indeed crawl periodic (obișnuit zilnic, uneori mai frecvent job schimbat des). Închideți job, elimina feed sau set closing dată. Indeed va auto de-index.
Google Jobs crawl HTML pagine unde embed JobPosting JSON-LD. Fiecare timp candidat vizitează job pagina, Google crawler indexează. Elimini JSON-LD markup, job dispare Google Jobs în zile.
Validare și debug
Pentru Indeed XML:
- Foloseşte Indeed Feed Validator test feed înainte conecta
- Eroare comun: CDATA malformată, câmp necesar missing, format dată invalid
Pentru Google Jobs:
- Foloseşte Google Structured Data Testing Tool sau newer Rich Result Test
- Verifica datePosted missing, format dată invalid sau CDATA-like string encoding problem
Cum ClarityHire generează feed
ClarityHire auto-generează amândoi Indeed XML feed /api/jobs/feed.xml și Google Jobs JSON-LD template embed job pagine /careers/jobs/[job-id].
Actualizezi job (titlu, salariu, descriere), feed refresh automat. Închis job elimina feed în 2 ore. Sistem respecta job visibility flag: draft job nu apare feed.
TL;DR
Indeed așteptă XML CDATA-wrap descriere, salariu și locație. Google Jobs așteptă JSON-LD markup HTML cu datePosted, validThrough și salariu range. Amândoi ISO dată format (YYYY-MM-DD sau ISO 8601 timestamp). CDATA-ul prieten când wrap HTML descriere XML. Validează înainte deploy. Auto-elimina închis job feed. Test Google Rich Result Test și Indeed validator.
O dată setup, job distribu Indeed și Google fără re-entry. Setup ia zi; leverage continuu imens.