An image needs a public, stable URL and crawlable markup before Google can consider it for image search. If your product images are missing, check whether Google can fetch them and find their URLs on the page. Alt text cannot fix a blocked CDN or an image URL that appears only after someone scrolls.
Google's image SEO guidance covers supported formats, standard image elements, and a fallback img src. Start with those checks, then examine responsive variants, lazy loading, and sitemaps.
Keep image URLs stable
Image CDNs (Cloudflare Images, Imgix, Cloudinary, Fastly Image Optimizer) transform images on the fly. If templates generate arbitrary width, quality, crop, and signature combinations, crawlers can discover a noisy set of URLs for the same source image.
Keep transformations deterministic. Use one stable fallback URL in src, a bounded set of stable responsive variants in srcset, and the same URLs whenever the image is reused. Verify the CDN hostname in Search Console where practical and make sure its robots and access rules allow Googlebot-Image.
<img
src="https://cdn.example.com/products/widget-800.webp"
srcset="https://cdn.example.com/products/widget-400.webp 400w,
https://cdn.example.com/products/widget-800.webp 800w,
https://cdn.example.com/products/widget-1200.webp 1200w"
sizes="(max-width: 640px) 100vw, 800px"
alt="Blue widget viewed from the front"
>
Check the format returned by the CDN
Do not hard-code assumptions about a crawler's current Accept header. Let the CDN negotiate a supported format and return the correct Content-Type and Vary: Accept behavior, or use <picture> with an ordinary img src fallback:
<picture>
<source type="image/avif" srcset="/images/widget.avif">
<source type="image/webp" srcset="/images/widget.webp">
<img src="/images/widget.jpg" alt="Blue widget viewed from the front">
</picture>
Google Search supports common formats including JPEG, PNG, WebP, SVG, and AVIF. Correct negotiation improves delivery, but a particular format does not guarantee indexation.
Keep lazy-loaded images discoverable
Native loading="lazy" is a sound performance tool. The crawl problem appears when custom JavaScript waits for a click or scroll before it even adds the image URL to the rendered HTML. Keep relevant URLs in img src or srcset, and use eager loading only for images needed immediately. The Next.js Image reference explains loading and preload options for each version. This example loads the main image eagerly and leaves the rest lazy:
// Next.js Image component with explicit loading behaviour
import Image from 'next/image';
export default function ProductGallery({ product }) {
return (
<div>
<Image
src={product.images[0].url}
alt={product.name}
loading="eager"
width={800}
height={600}
/>
{/* Non-critical images: lazy */}
{product.images.slice(1).map(img => (
<Image
key={img.id}
src={img.url}
alt={img.alt}
loading="lazy"
width={400}
height={300}
/>
))}
</div>
);
}
Match structured data to the visible image
Use image properties supported by the page's actual structured-data type. A product can expose its product images, while a page can identify a preferred representative image with primaryImageOfPage:
{
"@context": "https://schema.org",
"@type": "WebPage",
"url": "https://example.com/products/widget",
"primaryImageOfPage": "https://cdn.example.com/products/widget-1200.webp"
}
Structured data should match visible images and stable public URLs. It supplements crawlable HTML; it does not replace the img element.
Investigate missing images
Do not treat scraping a Google Images results page as a stable indexation API. Monitor Googlebot-Image access and errors in CDN logs, keep the CDN property visible in Search Console, and use URL Inspection or rendered-page checks to confirm that important image URLs remain discoverable. If a critical image disappears, check for URL churn, robots changes, access errors, missing src markup, and sitemap drift.
Add an image sitemap where it helps
Googlebot discovers most images through page content, but image sitemap extensions can expose images that are otherwise harder to find:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://example.com/products/widget</loc>
<image:image>
<image:loc>https://cdn.example.com/products/widget-1200.webp</image:loc>
</image:image>
</url>
</urlset>
The image extension can live in an existing sitemap or a dedicated one. It is particularly useful for images that normal crawling might not discover. Keep landing-page and image URLs public, stable, and aligned with the URLs emitted in HTML. For decorative images, use an empty alt attribute rather than manufacturing descriptive text.
