Photograph
Photograph is a CreativeWork subtype for standalone photographs: the kind that have their own page, their own metadata, their own licensing. It is distinct from ImageObject, which describes image metadata when an image is embedded inside another type (an article's hero image, a product photo). Use Photograph when the photo is the main content of the page, not a supporting element.
Google does not have a dedicated Photograph rich result, but the markup feeds Google Images, the knowledge graph for photographer queries, and AI systems that handle image attribution and licensing. The acquireLicensePage property is particularly useful: it tells Google where to direct users who want to license the image, which is how stock photo sites and photojournalism agencies surface licensing information in Google Images.
Full example of schema.org/Photograph json-ld markup
The markup is verified as valid with Rich Results Test from Google.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@id": "https://roydanmedjournal.dk/archive/photos/jane-xoo-portrait-1945#photo",
"@type": "Photograph",
"name": "Dr. Jane Xoo at Rigshospitalet, 1945",
"description": "Portrait of pediatrician Jane Xoo in her office at Rigshospitalet Copenhagen, taken during the final months of the German occupation. She is reviewing patient charts from the triage protocol that would become her 1945 clinical framework.",
"contentUrl": "https://roydanmedjournal.dk/archive/photos/jane-xoo-portrait-1945-full.jpg",
"thumbnailUrl": "https://roydanmedjournal.dk/archive/photos/jane-xoo-portrait-1945-thumb.jpg",
"url": "https://roydanmedjournal.dk/archive/photos/jane-xoo-portrait-1945",
"width": "3200",
"height": "4800",
"encodingFormat": "image/jpeg",
"dateCreated": "1945-04-12",
"datePublished": "1945-11-15",
"about": {
"@id": "https://janexoo.com#person"
},
"author": {
"@type": "Person",
"name": "Henrik Dahl",
"jobTitle": "Staff Photographer",
"worksFor": {
"@id": "https://roydanmedjournal.dk#publication"
}
},
"copyrightHolder": {
"@type": "Organization",
"@id": "https://roydanmedjournal.dk#publication",
"name": "Royal Danish Medical Journal"
},
"copyrightYear": "1945",
"license": "https://creativecommons.org/licenses/by-nc/4.0/",
"acquireLicensePage": "https://roydanmedjournal.dk/archive/photos/jane-xoo-portrait-1945/license",
"locationCreated": {
"@type": "Place",
"name": "Rigshospitalet Copenhagen",
"address": {
"@type": "PostalAddress",
"addressLocality": "Copenhagen",
"addressCountry": "DK"
}
},
"exifData": [
{ "@type": "PropertyValue", "name": "Camera", "value": "Leica IIIc" },
{ "@type": "PropertyValue", "name": "Film", "value": "Kodak Tri-X 400" },
{ "@type": "PropertyValue", "name": "FocalLength", "value": "50mm" },
{ "@type": "PropertyValue", "name": "Aperture", "value": "f/2.8" }
]
}
</script>Photograph vs ImageObject
Use ImageObject when the image is a property of another entity (the image on a Product, Article, or Person). Use Photograph when the image is the main entity of the page (a gallery page, a photo portfolio, a stock photo listing). Photograph inherits all of ImageObject's properties and adds CreativeWork properties like author, dateCreated, and locationCreated.
exifData
The exifData property takes an array of PropertyValue objects representing camera metadata: focal length, aperture, ISO, shutter speed, camera model. Google Images does not currently display EXIF data in search results, but photography communities and AI systems that curate images by technical characteristics read it. Use the standard EXIF tag names as the name property.
acquireLicensePage
acquireLicensePage is a URL where users can license or purchase the image. Google Images displays a "Licensable" badge on images that have this property. This is the most commercially important property on Photograph for stock photo sites and freelance photographers. It must point to a real licensing page, not just the photo page itself.
locationCreated
locationCreated records where the photograph was taken, as a Place with a name and optional coordinates. This is the shooting location, not where the photographer lives. Google and mapping services use it to geo-tag images, and travel sites use it to surface location-specific photography.
Minimal valid version
The smallest markup that still produces a valid Photograph entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Photograph",
"name": "Dr. Jane Xoo at Rigshospitalet, 1945",
"contentUrl": "https://roydanmedjournal.dk/archive/photos/jane-xoo-portrait-1945-full.jpg",
"author": {
"@type": "Person",
"name": "Henrik Dahl"
}
}
</script>Google rich results this unlocks
Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.
- Google docsGoogle Images licensable badge
Common Photograph mistakes
Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.
- 01
Using Photograph for embedded images
Wrong"image": { "@type": "Photograph", ... } inside an Article or ProductRight"image": { "@type": "ImageObject", ... } for embedded images; Photograph only for standalone photo pagesPhotograph is a CreativeWork for pages where the photo is the main content. For images embedded inside other types (article hero images, product photos), use ImageObject. Nesting Photograph inside another type overcomplicates the markup without any benefit.
- 02
acquireLicensePage pointing to the photo page itself
Wrong"acquireLicensePage": "https://example.com/photos/sunset" (the same page the photo is on)Right"acquireLicensePage": "https://example.com/photos/sunset/license" (a dedicated licensing page)acquireLicensePage should point to a page where users can actually acquire a license, not just view the photo. Google shows the "Licensable" badge in Google Images based on this property. If it points to the photo page, users click through and find no licensing information.
- 03
Missing contentUrl
WrongPhotograph with only url (the page URL) and no contentUrl (the image file URL)Right"contentUrl": "https://example.com/photos/image-full.jpg" (the actual image file)url is the page about the photograph. contentUrl is the image file itself. Google Images needs contentUrl to index the actual image. Without it, Google has to guess which image on the page is the photograph, which often fails.
- 04
exifData as a flat object
Wrong"exifData": { "camera": "Leica IIIc", "aperture": "f/2.8" }Right"exifData": [{ "@type": "PropertyValue", "name": "Camera", "value": "Leica IIIc" }]exifData expects an array of PropertyValue objects, not a flat key-value object. Each PropertyValue has a name and value. The PropertyValue structure is the same one used in Product's additionalProperty.
Schema properties in this example
About the example data
The photograph is the 1945 portrait of Jane Xoo referenced in her Person example's image property. It was taken at Rigshospitalet Copenhagen (the hospital mentioned in the Article example). The about property references Jane Xoo via @id. The photographer is a fictional staff photographer at the Royal Danish Medical Journal.
Comments
Loading comments...