When WordPress shows “The link you followed has expired” right after you try to upload a theme or plugin ZIP (Plugins → Add New → Upload, or Appearance → Themes → Add New → Upload), the message is misleading. The “link” is usually fine. This message can appear when WordPress cannot verify the upload request. An upload that exceeds the server’s request-size limit is one possible cause. A stale upload form can also fail the check. Start by reopening the upload page and trying again, then compare the ZIP size with your host’s limits.
Work this checklist in order. Prefer staging when you can reproduce the upload there. Take a backup before changing PHP settings on production. This article is about install uploads (theme/plugin ZIPs). For image or video uploads that fail in the Media Library, use our media upload checklist. If one covered WordPress issue is clearly to blame and you want help, use the $99 one-time fix. We confirm the scope before work begins.
Define what failed
- Confirm the message appears during a theme or plugin ZIP upload in Admin, not while clicking an email link or opening a random page.
- Note the ZIP size on disk and whether a much smaller ZIP (for example a tiny test plugin) uploads successfully as a control.
- If Media Library images fail but ZIP installs work (or the reverse), keep the two problems separate. See media upload errors for the library.
- If the failure is an update lock, destination folder, or create-directory error instead, use update failed errors.
Quick triage map
| What you observe | Likely layer | First useful check |
| “Link you followed has expired” on theme/plugin ZIP upload | Request verification or upload-size limit | Reopen the upload form; then Site Health → Info for effective limits; compare to ZIP size |
| Tiny ZIP works; large theme/plugin ZIP fails | Size limits or host cap | Ask host to confirm the cause; raise limits with host approval, or install without the huge bundled demo ZIP |
| All uploads fail including tiny ZIP | Permissions, disk, or broader PHP failure | Ask host about disk space and write access; see also update failed |
| Media Library HTTP error; theme ZIP OK | Media pipeline | Media upload checklist |
| Fatal memory during unzip | Memory limit on extract | Memory exhausted checklist |
Safe diagnostic order
- Reopen the upload page. If the form has been open for a while, sign in again if prompted, reopen the theme or plugin upload screen, and retry once.
- Read the effective limits in Site Health. In Admin go to Tools → Site Health → Info (or the Server section) and note
upload_max_filesize, post_max_size, and max_execution_time. Set post_max_size higher than upload_max_filesize to leave room for the rest of the upload request.
- Compare those limits to the ZIP on disk. If the package is 80MB and uploads are capped at 8MB, the expired-link screen can appear. Theme ZIPs that bundle full demo content are a common surprise.
- Control test with a small ZIP. Upload a tiny, trusted plugin ZIP. If the small ZIP works and the large one fails, size limits are a useful next check. Ask your host to confirm the cause before changing settings.
- Ask the host what you are allowed to raise. Prefer the host panel, pool settings, or a ticket over random
.htaccess / php.ini / wp-config.php snippets from search results. Shared hosts often enforce a hard cap no local file can exceed.
- Apply a measured raise only with host approval, or trim the package. Raise
upload_max_filesize enough to clear the ZIP with a modest margin, and set post_max_size higher than upload_max_filesize so the rest of the request still fits. If logs show an installation timeout, ask your host whether the execution-time limit needs adjustment. Alternatively, install the theme/plugin via the host’s file manager or your host’s supported installation method, or use a vendor ZIP without bundled demos when they offer one. Retest the same upload.
- If limits are already high and tiny ZIPs still fail, stop chasing upload size. Check disk space, permissions on
wp-content/upgrade, and security plugins that block ZIP installs; hand unclear server policy back to the host.
- Retest the full path. Upload the intended theme/plugin ZIP once, activate on staging first when you can, and confirm Admin no longer shows the expired-link screen.
Common causes
- A stale upload form that fails WordPress request verification.
upload_max_filesize or post_max_size below the ZIP size (set post_max_size higher than upload_max_filesize).
- Host hard caps that ignore local
php.ini or .htaccess changes.
- Oversized theme packages that include demo media inside the ZIP.
- If logs show an installation timeout, ask your host whether the execution-time limit needs adjustment.
- Confusing this screen with Media Library errors or update-folder collisions.
When a $99 one-time fix fits
Request the $99 one-time WordPress fix if you want help on one WordPress site clearing a theme/plugin ZIP install that hits “The link you followed has expired”: confirming effective PHP limits, coordinating a host-approved measured raise or an alternate install path, and verifying the upload succeeds. Paste the ZIP size, the Site Health limit values if you have them, and when it started. We confirm the scope before work begins. Send credentials only through the private access link provided after your request is accepted.
Full site rebuilds, custom theme packaging, account-wide host upgrades, and Media Library-only failures are outside this offer. Use media upload errors for library uploads and memory exhausted when the log shows a memory fatal during extract.
Related checks
If a host-approved limit raise still leaves the expired-link screen, send your host the ZIP size, Site Health values, the exact message, and the start time. Suspected compromise needs a security investigation as well as fixing upload limits.