The “link you followed has expired” error in WordPress appears when WordPress’s internal security token expires during a file upload or update, or when your server’s PHP limits are too low to complete the action. Here are six fixes, ordered from quickest to most technical.
If you’re in a hurry, Fix 1 takes under two minutes and requires no server access. If the error keeps coming back, work through the list until you find the cause that matches your situation.
Table of contents
- What Does “The Link You Followed Has Expired” Mean?
- What Causes This Error?
- Fix 1: Clear Your Browser Cache and Cookies
- Fix 2: Increase the File Upload Size Limit
- Fix 3: Increase PHP Memory Limit and Execution Time
- Fix 4: Disable Your Caching Plugin
- Fix 5: Edit php.ini, wp-config.php, or .htaccess Directly
- Fix 6: Flush Your WordPress Permalinks
- Frequently Asked Questions
- Summary
What Does “The Link You Followed Has Expired” Mean?
The full error reads: “The link you followed has expired. Please try again.”
You’ll see it in your WordPress admin dashboard, usually right after clicking “Install” on a theme or plugin upload, or during a WordPress core update.
The root cause is a nonce, a one-time security token WordPress generates for every admin action. A nonce has a limited lifespan (by default, around 12 hours for most actions, shorter for file-based operations). WordPress uses it to confirm that the upload or update request came from a legitimate, authenticated session.
When the nonce expires before the action completes (because the file was too large, the server was too slow, or you simply left the page sitting open), WordPress rejects the request and shows this error.
You may also see a variation called “URL signature expired” on some hosting environments. It’s the same underlying issue; the fixes below apply to both.
What Causes This Error?
There are five common causes of the “link you followed has expired” error. Identifying which one applies to you points you straight to the right fix:
- Your session or nonce timed out. You loaded the upload page, got distracted, and came back to click Install several minutes later. The security token had already expired.
- The file is too large for your server. Your host’s upload_max_filesize or post_max_size PHP setting is lower than the file you’re uploading. This is the most common cause when uploading premium themes, which can easily exceed the 8MB default on shared hosting.
- Your server ran out of memory. The PHP memory_limit is too low to process the upload from start to finish.
- The PHP execution time limit was hit. The max_execution_time setting cut the process short before it could finish. This is common on slow connections or with large files.
- A caching plugin served an expired nonce. Plugins like WP Rocket can cache pages along with the security tokens embedded in them. When you try to use an action link from a cached page, the token is already stale and the error fires.
Work through the fixes below in order. The first two take less than a minute each.
Upgrade Your Website with a Premium WordPress Theme
Find a theme that you love and get a 20% discount at checkout with the FLASH20 code
Choose your theme
Fix 1: Clear Your Browser Cache and Cookies
Why this works: One common trigger of the “link you followed has expired” error is your browser serving a cached version of the upload page, complete with an expired nonce baked in. Clearing your cache and cookies forces the browser to load a fresh page with a new, valid token.
This fix takes care of the “you left the page open” scenario entirely.
Steps for Google Chrome:
- Press Ctrl + Shift + Delete (Windows) or Cmd + Shift + Delete (Mac) to open the Clear browsing data panel.
- Set the time range to All time.
- Check Cookies and other site data and Cached images and files.
- Click Clear data.
Firefox: Settings > Privacy & Security > Clear Data > check Cookies and Cache > Clear.
Safari: Develop menu > Empty Caches, then Preferences > Privacy > Manage Website Data > Remove All.
Edge: Settings > Privacy, search, and services > Clear browsing data > Choose what to clear.
After clearing, close the browser tab completely, reopen your WordPress admin, and try the upload again. Don’t sit on the page. Go straight to the upload and click Install.
If this doesn’t fix it, the cause is server-side. For a broader look at cache-related issues, see our guide on how to clear cache in WordPress.
Fix 2: Increase the File Upload Size Limit
Why this works: If the file you’re uploading exceeds your server’s upload_max_filesize or post_max_size limit, PHP rejects it before WordPress can process it. The result is the “link you followed has expired” error rather than a clearer “file too large” message.
Two PHP settings control this:
- upload_max_filesize: The maximum size of a single uploaded file.
- post_max_size: The maximum total size of data in a single POST request. This must always be set higher than upload_max_filesize. A common mistake is setting them equal, which still causes failures.
Safe values for most WordPress sites: upload_max_filesize = 64M and post_max_size = 128M.
For a full walkthrough of every method, see how to increase the maximum file upload size in WordPress. The quickest approach is through cPanel.
Increase limits via cPanel
- Log in to your hosting cPanel (usually at yourdomain.com/cpanel).
- Go to Software > Select PHP Version.
- Click Options or the PHP Settings tab.
- Find upload_max_filesize and post_max_size and raise both to at least 64M and 128M respectively.
- Click Save.

After saving, go back to WordPress and try the upload again.
Increase limits via wp-config.php
If your host doesn’t offer a cPanel interface, add these lines to your wp-config.php file, just before the line that reads /* That’s all, stop editing! */:
@ini_set('upload_max_filesize', '64M');
@ini_set('post_max_size', '128M');
Fix 3: Increase PHP Memory Limit and Execution Time
Why this works: Even if the file fits within the upload size limit, WordPress may still fail if PHP runs out of memory during processing, or if the server terminates the script because it exceeded the allowed execution time.
Two settings to adjust:
- memory_limit: How much RAM PHP can use per request. WordPress recommends at least 256M.
- max_execution_time: How many seconds a PHP script can run before the server kills it. 300 seconds (5 minutes) is a safe value for large uploads.
Via cPanel
Follow the same steps as Fix 2: find memory_limit and max_execution_time in the PHP Settings panel and update both.
Via php.ini
If you have access to your server’s php.ini file, find or add these lines:
memory_limit = 256M
max_execution_time = 300
Not sure where your php.ini file is? Our guide on the WordPress php.ini file walks you through finding and editing it safely.
Via wp-config.php
Add these lines to wp-config.php above the stop editing comment:
@ini_set('memory_limit', '256M');
set_time_limit(300);
For a dedicated walkthrough, see how to increase WordPress memory limit.
Note for managed hosting users: Hosts like Kinsta, WP Engine, and Cloudways typically don’t allow php.ini edits through files. Use their hosting dashboard to adjust PHP settings, or contact their support team directly. It’s usually a quick change on their end.
Fix 4: Disable Your Caching Plugin
Why this works: Caching plugins save snapshots of your pages to serve them faster. The problem is that those snapshots can include security tokens (nonces) that were valid when the page was first cached but have since expired. When you load the upload page from cache and try to use it, WordPress rejects the stale token and shows the “link you followed has expired” error.
WP Rocket is the most common culprit here, but W3 Total Cache, WP Super Cache, and LiteSpeed Cache can all cause this.
Steps:
- Go to Plugins > Installed Plugins in your WordPress dashboard.
- Find your caching plugin and click Deactivate.
- Try the theme or plugin upload again.
If the upload succeeds with the cache plugin off, the plugin was the cause.
WP Rocket users: You don’t need to keep WP Rocket disabled permanently. WP Rocket excludes the WordPress admin area from caching by default, but custom configurations sometimes override this. Go to WP Rocket > Settings > Advanced Rules and confirm that wp-admin is listed in the “Never Cache URL(s)” field. If it isn’t, add /wp-admin/ and save.
For other caching plugins, look for a similar “exclude URLs” or “excluded pages” setting and add /wp-admin/ there.
Fix 5: Edit php.ini, wp-config.php, or .htaccess Directly
If you’ve worked through Fixes 2 and 3 but want to set all PHP limits in one place through direct file editing, here’s a consolidated reference.
Which file to use:
- php.ini is the most reliable method if your host supports local php.ini files. Changes apply at the server level.
- wp-config.php works on most hosts and doesn’t require FTP or file manager access.
- .htaccess is the fallback for Apache servers when php.ini edits aren’t recognized.
Access these files through your hosting control panel’s File Manager or via an FTP client like FileZilla. Always download a backup copy before editing.
For background on the wp-config.php file and how to work with it safely, see the WordPress wp-config.php beginner to pro guide.
php.ini
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
max_execution_time = 300
wp-config.php (above the stop editing comment)
@ini_set('upload_max_filesize', '64M');
@ini_set('post_max_size', '128M');
@ini_set('memory_limit', '256M');
set_time_limit(300);
.htaccess (at the end of the file)
php_value upload_max_filesize 64M
php_value post_max_size 128M
php_value memory_limit 256M
php_value max_execution_time 300
After saving any of these files, go back to your WordPress admin and test the upload. If php.ini changes don’t seem to take effect, your host may use a server-level configuration that overrides local files. In that case, use cPanel or contact your host directly.
Fix 6: Flush Your WordPress Permalinks
Why this works: Saving your permalink settings regenerates the .htaccess rewrite rules WordPress depends on. Corrupted or outdated rewrite rules can contribute to URL-related errors, and this is a fast, harmless way to rule that out.
Steps:
- Go to Settings > Permalinks in your WordPress admin.
- Click Save Changes without changing anything.
That’s it. WordPress rewrites the rules automatically on save.

This takes 30 seconds and is worth trying last if the error partially resolves after the earlier fixes but still appears occasionally.
Frequently Asked Questions
The “link you followed has expired” error fires frequently during theme uploads because theme files are often larger than standard plugin zips, especially premium themes that include demo content, page builder templates, and bundled assets. If your host’s upload_max_filesize is set to the default 8MB (common on shared hosting), any theme file above that limit will trigger this error. Fix 2 is the targeted solution.
File size isn’t always the cause of the “link you followed has expired” error. If you loaded the upload page and then waited several minutes before clicking Install, the nonce associated with that page may have already expired. Clear your browser cache and cookies, reload the upload page fresh, and complete the upload without delay.
Yes, effectively. “URL signature expired” is a variant of the “link you followed has expired” error displayed by some hosting environments and WordPress configurations. Both messages come from the same nonce and session expiration mechanism. Every fix in this article applies to the URL signature expired error as well.
Not reliably. Fixing PHP limits requires server-level changes, and plugins that attempt to do this via wp-config.php work on some hosts and fail silently on others. Direct edits to php.ini or wp-config.php (as shown in Fixes 2, 3, and 5) are more predictable and don’t add a plugin dependency to your site.
No. This error only appears inside the WordPress admin area during specific upload or update actions. Your site’s front end continues to load normally for visitors while you troubleshoot.
Shared hosting providers set conservative PHP limits to manage resources across thousands of accounts on the same server. Managed WordPress hosts typically configure higher defaults, which is why this error is rarer on platforms like Kinsta, WP Engine, or Cloudways.
Contact your hosting provider’s support team and ask them to increase upload_max_filesize, post_max_size, memory_limit, and max_execution_time for your account. On some server configurations, a master php.ini overrides any local changes you make. The host has to apply the increase at the server level.
Summary
The “link you followed has expired” WordPress error almost always comes down to one of three things: an expired nonce, PHP limits that are too low for the task, or a caching plugin serving stale data.
- Start with clearing your browser cache and cookies. It solves the problem more often than you’d expect.
- If the error fires specifically during theme or plugin uploads, increasing upload_max_filesize and post_max_size is the most targeted fix.
- If you use WP Rocket or another caching plugin, try deactivating it temporarily to see if that’s the cause.
- For persistent issues, edit php.ini or wp-config.php to raise all four limits at once, or contact your host.
