Shopify product images missing after import — photos didn't come through
The import completed, the product exists, and the photo slot is just empty — no broken-image icon, no line in the import summary. That's because Shopify's image import works by fetching a URL, and a small number of specific things can make that fetch fail invisibly. Drop your file in below to check it.
What Shopify actually does with Image Src
The Image Src column in a Shopify product CSV isn't a file attachment — it's a URL. At import time, Shopify visits that URL and fetches whatever bytes come back, then stores them as the product's image. That means the value in the cell has to be a fully-qualified, publicly reachable http/https address pointing directly at an image file. Shopify cannot read a local file path like C:\Users\you\Desktop\photo.jpg, and it can't open anything that isn't the raw image itself. When the fetch fails for any reason, the row still imports — the product is created, just without a picture — and nothing in the import summary calls that out.
Breaker 1: share links instead of direct image URLs
The single most common cause is pasting a "share" link copied from Google Drive or Dropbox instead of a direct link to the file. A share link is designed to open a preview page in a browser — when Shopify's importer requests that URL, what comes back is an HTML page with a viewer around the image, not the image bytes themselves. Shopify can't extract a picture out of a webpage, so the fetch effectively returns nothing usable, and the import proceeds with a blank image field. The same failure mode applies to any link that sits behind a login or an expiring/private URL — Shopify's fetch has no credentials and can't get past it.
Breaker 2: Excel hyperlink display text drifting from the real link
A subtler version of the same problem happens entirely inside the spreadsheet. Excel automatically converts a typed URL into a clickable hyperlink object, separate from the text that's displayed in the cell. If someone later shortens or edits that visible text for readability — turning a long URL into something like "photo1.jpg" — without realizing the underlying hyperlink still points somewhere else, the CSV export can end up writing the visible display text into the cell rather than the actual link target. The cell looks fine on screen, but the value Shopify actually reads is not a URL at all.
Multiple images and how to check
A product with more than one photo needs one CSV row per image, all sharing the same Handle, with an Image Position column controlling the display order. To verify any Image Src value before uploading, paste it into a fresh, logged-out browser tab: it should load only the image itself, filling the tab, not a webpage with a preview or a login prompt around it. Upload the file above and the checker will flag any Image Src cell that isn't a direct, fetchable URL before it reaches your store.