XooCode(){

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.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/Photograph
<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.

schema.org/Photograph (minimal)
<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.

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.

  1. 01

    Using Photograph for embedded images

    Wrong
    "image": { "@type": "Photograph", ... } inside an Article or Product
    Right
    "image": { "@type": "ImageObject", ... } for embedded images; Photograph only for standalone photo pages

    Photograph 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.

  2. 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.

  3. 03

    Missing contentUrl

    Wrong
    Photograph 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.

  4. 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.

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...

Leave a comment