# Primary listing image marked with itemprop="image" or in structured data

- **Pattern:** `ab-001032` (`directory-listing-schema.image-handling.primary-image-marked`)
- **Severity:** low
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-001032
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-001032)

## Why it matters

Without a designated primary image in structured data, Google's image picker selects arbitrarily from all images on the page — often choosing a logo, ad, or decorative element over the listing's actual photo for knowledge panel display. Schema-org `image` on a LocalBusiness node tells Google's image indexing pipeline which photo represents the listing. Directories that omit this field see inconsistent image selection in rich results, with some listings showing irrelevant thumbnails in SERP previews. The `itemprop="image"` microdata attribute and the JSON-LD `"image"` property serve the same purpose; the check requires at least one of them for multi-image listings.

## Severity rationale

Low because absent image markup degrades rich-result presentation quality but does not cause data loss, security exposure, or structured-data rejection.

## Remediation

Mark the primary listing image in your JSON-LD `image` field. Use a full absolute URL — relative paths are not valid for schema-org image properties.

```ts
// In buildListingSchema()
const jsonLd = {
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": listing.name,
  "image": listing.primaryImageUrl
    ? `https://yourdomain.com${listing.primaryImageUrl}`
    : undefined,
  // ...
};
```

Alternatively, add `itemprop="image"` to the `<img>` element in your listing template: `<img src={listing.primaryImageUrl} itemprop="image" alt={listing.name} />`. Do not mark multiple images as primary — exactly one image should carry the designation per listing.

## Detection

- **ID:** `primary-image-marked`
- **Severity:** `low`
- **What to look for:** List all listings with multiple images. For each, check if the primary/hero image on a listing page has `itemprop="image"` (for microdata) or is included in the JSON-LD `image` property.
- **Pass criteria:** The primary listing image is marked with `itemprop="image"` or included in JSON-LD `"image"` field — 100% of multi-image listings must have exactly 1 image marked as primary. Report: "X multi-image listings found, all Y have a designated primary image."
- **Fail criteria:** Images are not marked in structured data.
- **Skip (N/A) when:** Listings don't use images or no structured data.
- **Detail on fail:** Example: `"Primary image has no itemprop='image' or JSON-LD image reference"`
- **Remediation:** Mark the primary image in structured data:

  ```tsx
  {
    "@type": "LocalBusiness",
    "image": listing.imageUrl
  }

  <img
    src={listing.imageUrl}
    itemprop="image"
    alt={listing.name}
  />
  ```

---

## External references

- schema-org image

Taxons: findability

HTML version: https://auditbuffet.com/patterns/ab-001032
