How to use original filename instead of hash in Sanity image URLs?
Great news! Sanity supports what's called "vanity filenames" for exactly this SEO use case. You can append a friendly filename to your image URL after the hash, and it will work perfectly with all the usual transformation parameters.
The URL format is:
https://cdn.sanity.io/images/<projectId>/<dataset>/<hashedFileName>/<originalFilename>?<params>
So your URL would become:
https://cdn.sanity.io/images/1234567/production/754c8d64997b668642bd2500f833722c6293cf8b-1766x1065.png/my-friendly-image-name.png?q=75&fit=clip&auto=format
The hash still needs to be there (it's how Sanity identifies the asset), but by adding /your-seo-friendly-name.png after it, you get the SEO benefits Google is looking for. The CDN will serve the image correctly, and all your transformation parameters (like q=75, fit=clip, auto=format) continue working as expected.
Implementation: The exact approach depends on how you're building your image URLs, but typically you'd:
- Query the original filename from your image asset (it's stored in the asset document)
- Append it to the end of your image URL before the query parameters
- Or use any other field you've designated for SEO-friendly names
This works for both the /images/ and /files/ CDN endpoints, and you can use modern image formats like WebP when you include auto=format - the vanity filename won't interfere with format conversion.
Unfortunately, this feature isn't prominently documented yet (which is why you couldn't find it), but it's fully supported and widely used for exactly the Google Images SEO best practices you're trying to follow.
Show original thread3 replies
Sanity – Build the way you think, not the way your CMS thinks
Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.