jobLocation
jobLocation · Required
Appears in
What is it?
The physical location where the employee will report to work. This is a nested Place object containing a PostalAddress with the office or worksite address. Google requires this for all non remote positions and uses it to match job listings with location based searches.
Why this matters for AEO
Location is one of the top filters in job queries. When someone asks "What developer jobs are available in Austin?" an AI engine matches jobLocation.address.addressLocality against "Austin" to surface relevant listings. Without structured location data, AI assistants cannot reliably include a job in geographic results, even if the city name appears in the description text.
What the specs say
Schema.org:Place. A (typically single) geographic location associated with the job position. schema.org/jobLocation
Google: Required. "The physical location(s) of the business where the employee will report to work (such as an office or worksite), not the location where the job was posted." Google Search Central
How to find your value
- Office address — The physical address of the workspace
- HR records — The "work location" field in the job requisition
- Google Maps — Verify the exact address, city, state, and postal code
- Multiple locations — Create separate jobLocation entries for each office
For remote positions, use jobLocationType set to "TELECOMMUTE" instead. For hybrid roles, include the physical office address in jobLocation and add jobLocationType: "TELECOMMUTE" to indicate remote flexibility.
Format and code
Type: Place (nested object with PostalAddress)
Full address:
{
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "1600 Amphitheatre Pkwy",
"addressLocality": "Mountain View",
"addressRegion": "CA",
"postalCode": "94043",
"addressCountry": "US"
}
}
}
Minimum required fields:
Google requires at minimum addressLocality (city) and addressRegion (state/province). Including addressCountry is strongly recommended for international disambiguation.
{
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "Seattle",
"addressRegion": "WA",
"addressCountry": "US"
}
}
}
Multiple locations:
{
"jobLocation": [
{
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "New York",
"addressRegion": "NY",
"addressCountry": "US"
}
},
{
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"addressCountry": "US"
}
}
]
}
Invalid patterns:
"jobLocation": "Mountain View, CA"
A plain string fails validation. jobLocation must be a Place object.
"jobLocation": {
"@type": "Place",
"address": "1600 Amphitheatre Pkwy, Mountain View, CA"
}
The address property must be a PostalAddress object, not a string.
Webflow implementation
Static pages
Add the full location object in Page Settings > Custom Code:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Account Executive",
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "140 Broadway",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10005",
"addressCountry": "US"
}
}
}
</script>
CMS template pages
Map individual address components from CMS fields:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "JobPosting",
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "{{wf {"path":"city","type":"PlainText"} }}",
"addressRegion": "{{wf {"path":"state","type":"PlainText"} }}",
"addressCountry": "{{wf {"path":"country","type":"PlainText"} }}"
}
}
}
</script>
Create separate CMS fields for city, state/region, and country. Avoid a single combined "Location" field since JSON-LD requires each address component as a separate property.
In Schema HQ
Your Webflow CMS address fields into the nested Place > PostalAddress structure automatically. It handles the nesting, validates each component, and ensures the output passes Google's Rich Results Test without manual JSON assembly. is mapped automatically
Real examples
Google documentation (Google Search Central):
{
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "1600 Amphitheatre Pkwy",
"addressLocality": "Mountain View",
"addressRegion": "CA",
"postalCode": "94043",
"addressCountry": "US"
}
}
}
Tustin Recruiting (tustinrecruiting.com):
{
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "Remote",
"addressRegion": "",
"addressCountry": "US"
}
}
}
Note: The Tustin Recruiting example uses "Remote" as the locality, which is a common but incorrect pattern. For remote jobs, omit jobLocation and use jobLocationType: "TELECOMMUTE" instead.
Web Data Commons analysis shows jobLocation appears in 98% of JSON-LD JobPostings, second only to title and datePosted in adoption.
Related fields
- jobLocationType: marks remote positions with TELECOMMUTE
- applicantLocationRequirements: where remote applicants can be based
- hiringOrganization: the company at this location
- title: the position available at this location
- address: the PostalAddress pattern used inside jobLocation
FAQ
Is jobLocation required for remote jobs?
No. For 100% remote positions, use jobLocationType: "TELECOMMUTE" instead. Google will generate a Search Console error if you set jobLocationType to TELECOMMUTE but omit applicantLocationRequirements. For hybrid roles, include both jobLocation (physical office) and jobLocationType: "TELECOMMUTE".
Can a job have multiple locations?
Yes. Use an array of Place objects. Each location appears separately in Google job search results, increasing visibility across multiple geographic queries.
What is the minimum address detail required?
Google requires at least addressLocality (city) and addressRegion (state or province). Adding addressCountry is strongly recommended, especially for companies operating in multiple countries. streetAddress and postalCode are optional but improve precision.