When you upload photos to Apple Photos/iCloud Photos on the web and it just spins, sits at 0%, or fails with no message, it’s usually a small handoff issue: a blocked pop-up/permission, a stalled tab process, or a network rule that interrupts large file transfers.

Padlock blocking a photo upload arrow into a cloud tray

Start with the quickest “no-regrets” fix, then move to deeper checks only if you need them.

Support-boundary playbook: each section ends with a clear stop point so you don’t waste time (or accidentally break sign-ins) chasing the wrong layer.

1. Fastest fix: hard-reload the upload page and try one small image

This sounds basic, but it’s the quickest way to reset a stuck upload pipeline without touching cookies or your library.

  • Open the iCloud Photos web page in the same tab where it’s stuck.
  • Do a hard reload (not just refresh). If you’re not sure how in your browser, close the tab and reopen the page instead.
  • Try uploading one small JPG/PNG first (not a huge HEIC burst, Live Photo, or a large video).

If a small image uploads but large ones don’t, skip ahead to section 4 (network and file-size friction).

Stop point: If nothing uploads at all after a clean reload and a single small file test, go to section 2.

2. Confirm the basics that break uploads: storage, sign-in state, and time

Web uploads can fail “quietly” when the session is half-valid or storage is at the limit.

  • Check iCloud storage: if you’re at/near full, uploads may stall. Free space or upgrade, then retry.
  • Sign out/in (web only): sign out of iCloud.com in that browser, then sign in again.
  • Check device time/time zone: make sure the computer’s date/time is set automatically. Incorrect time can break authentication and background transfer handshakes.

Keep this step contained to the browser you’re using for uploads.

Stop point: If you can’t stay signed in (looping, repeated prompts), don’t keep retrying uploads. Fix sign-in stability first; then come back to uploads.

3. Quick permission reset without nuking everything: allow pop-ups and cross-site cookies for iCloud

iCloud web flows can depend on redirects and cookie handoffs. If your browser blocks them, you may see endless spinners or “nothing happens” after selecting files.

Cookie and pop-up permission tiles with an allow toggle

  • Disable strict tracking protection for iCloud.com (site-specific if your browser allows it).
  • Allow pop-ups/redirects for iCloud.com and Apple ID domains during the upload attempt.
  • Allow cross-site cookies temporarily or add an exception for iCloud.com.

Then retry one small file.

Stop point: If you must keep strict blocking enabled (work policy or personal preference), skip to section 5 and try a different browser profile just for the upload.

4. When “0% forever” is really network friction: VPNs, proxies, and Wi‑Fi rules

Large photo uploads are sensitive to interruptions. A VPN, privacy relay, corporate proxy, or “helpful” router setting can cause uploads to restart or hang.

Router and VPN shield causing an interrupted cloud upload connection

  • Temporarily pause VPN/proxy and retry.
  • Switch networks (home Wi‑Fi → phone hotspot, or vice versa) to see if it’s a network policy issue.
  • Try a different DNS only if you already know how (this is optional). If DNS changes are unfamiliar, skip it.
  • Avoid uploading from network drives or cloud-synced folders; copy the photo locally first, then upload.

If uploads work on a different network, the fix is usually at the network layer (firewall rules, content filters, or VPN stability), not your Apple account.

Stop point: If you’re on a managed/work network and it fails there but works elsewhere, stop troubleshooting the browser. Ask IT whether iCloud upload endpoints are blocked.

5. Clean test without losing your main browser setup: a fresh profile or private window

Extensions and old site data can interfere with upload dialogs or background transfers.

  • Try a private/incognito window and sign in to iCloud.com there.
  • If private mode works, create a fresh browser profile dedicated to iCloud web use (minimal extensions).
  • Disable extensions that can break uploads: ad blockers, script blockers, “privacy” header modifiers, download managers.

Only if needed: clear site data for iCloud.com (not your entire browser history) and sign in again.

Stop point: If uploads work in a fresh profile but not your main one, don’t keep guessing. Re-enable extensions one by one to find the conflict.

6. File-specific blockers: HEIC quirks, huge batches, and naming issues

Sometimes the page is fine, but a particular file (or batch) is the trigger.

  • Upload in small batches (5–20 files) instead of hundreds at once.
  • Test a different format: if HEIC stalls, export one photo as JPG/PNG and try again.
  • Watch for unusual filenames: very long names or special characters can cause edge-case failures on web uploaders.
  • Try a different album (or upload to the root/library) to rule out an album permission glitch.

Stop point: If only certain files fail repeatedly across browsers and networks, stop changing settings. Isolate the failing file(s) and convert/export them, then retry.

7. The clear support boundary: what to collect before contacting Apple

If you’ve confirmed it fails across networks or across browsers (fresh profile), it’s time to stop burning hours and move to support with a clean, reproducible description.

  • The browser name/version and OS version
  • Whether it fails on another network (yes/no)
  • Whether it fails in a private window or fresh profile (yes/no)
  • Approximate file type and size (example: HEIC 8MB, JPG 2MB)
  • Any error text (even partial) and the time it occurred

Stop point: If your uploads contain sensitive photos, avoid screen recordings. A short written summary is usually enough.

Final thoughts

The fastest wins are usually: hard-reload, test one small file, then temporarily loosen site-specific cookie/pop-up blocking for iCloud.

If it only fails on one network or only with certain files, that’s your sign to stop tweaking everything and focus on the layer that’s actually responsible.