Technical

"The Link You Followed Has Expired" in WordPress: 5 Fixes (2026)

By Daniel Reyes•October 8, 2026•3 min read

Disclosure: some links on this page are affiliate links. We may earn a commission at no extra cost to you. How we test and rate hosts.

Our top pick for most WordPress sites
Bluehost: free domain, free SSL, 24/7 support, 30-day money-back guarantee.
Check Bluehost Deal →

"The link you followed has expired" is WordPress's most misleading error. Nothing expired. You tried to upload a theme or plugin zip that exceeded the server's PHP limits, and WordPress responded with a generic security message instead of saying so. Fix = raise the limits, or bypass the uploader entirely.

Step 0: Check Your Actual Limits

Before editing anything: wp-admin > Tools > Site Health > Info > Server section. Note upload_max_filesize, post_max_size, and max_execution_time. If upload_max_filesize is 2M and your theme zip is 15MB - there's your answer. Media > Add New also displays the effective upload cap.

Fix 1: Raise Limits via .htaccess

Fastest method on Apache hosts. Edit .htaccess in your WordPress root, append:

php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 300
php_value max_input_time 300

Site throws a 500 after saving? Your host runs PHP as CGI/FPM and forbids .htaccess overrides - remove the lines immediately and use fix 3.

Fix 2: Raise via php.ini or .user.ini

If your host allows per-directory PHP config, create or edit php.ini (or .user.ini on CGI setups) in the WordPress root:

upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300

Note: post_max_size must be larger than or equal to upload_max_filesize, or the smaller one wins silently.

Fix 3: The Host's Control Panel

The reliable path on managed/shared hosting. In cPanel: MultiPHP INI Editor (or "Select PHP Version" > Options) - set upload_max_filesize and post_max_size there. These host-level settings override file-level attempts and actually stick.

Fix 4: wp-config.php (Memory Only)

wp-config can't raise upload limits, but it can raise memory - which matters when a large zip extracts successfully but processing it exhausts RAM:

define('WP_MEMORY_LIMIT', '256M');

Fix 5: Skip the Uploader - FTP Install

When limits won't budge, bypass them entirely. Unzip the theme/plugin on your computer, upload the resulting folder via FTP to wp-content/themes/ or wp-content/plugins/, then activate it in wp-admin. No PHP limits apply to FTP - done in five minutes regardless of host.

If Nothing Applies: The Shared Hosting Cap

Some hosts hard-cap upload limits server-side and ignore your files. Verify via Site Health: if your values still show 2M after every fix above, the cap is theirs. Two options: a support ticket asking them to raise it, or the FTP method forever. For one-off uploads, FTP wins; for regular client work, a host with sane defaults wins.

Limits Set for Real Work

Bluehost ships workable upload defaults out of the box - a 30MB theme zip uploads without touching .htaccess. And cPanel's MultiPHP INI Editor is one click away when you need more. From $3.99/mo.

Get Reliable Hosting

Related: HTTP error on image upload - max execution time fix - memory limit fix - 500 internal server error.

Find Your Perfect Hosting Plan

What are you building?

Tell us about your project so we can match the perfect hosting plan.

Question 1 of 425% complete
Interactive Tool

Hosting Cost Calculator

See exactly how much you'll spend on hosting over time. Compare Bluehost vs popular alternatives and discover your potential savings.

Used to calculate transaction fees (Shopify charges 2% on sales)

Shopify Basic (3yr)
$1,044
Bluehost (3yr)
$444
You Save
$600
58% less than Shopify Basic

Frequently Asked Questions

What does 'the link you followed has expired' mean?

Despite the wording, it's not a link problem. It fires when you upload a theme/plugin zip larger than the server's PHP limits (upload_max_filesize, post_max_size) or the processing takes longer than max_execution_time. WordPress fails the upload and shows this generic nonce-expired message.

What's the fastest fix?

Check your current limits first: wp-admin > Tools > Site Health > Info > Server. If upload_max_filesize is below your file size, raise it. Quickest method for most hosts: add 'php_value upload_max_filesize 64M' and 'php_value post_max_size 64M' to .htaccess.

How do I fix it in wp-config.php?

wp-config can't directly set upload limits - it sets memory: define('WP_MEMORY_LIMIT', '256M'). Upload size limits live in .htaccess, php.ini, .user.ini, or the host's control panel.

How do I fix it in .htaccess?

Add at the end: php_value upload_max_filesize 64M, php_value post_max_size 64M, php_value max_execution_time 300, php_value max_input_time 300. If you get a 500 error after saving, your host forbids .htaccess PHP overrides - remove them and use the host panel instead.

Can I bypass the upload entirely?

Yes - upload the theme or plugin via FTP instead. Extract the zip, upload the folder to wp-content/themes or wp-content/plugins via FTP, then activate in wp-admin. Works regardless of PHP limits and is often faster for large files.

Why did my limits reset or not apply?

On shared hosting, PHP limits are often capped server-side - your .htaccess/php.ini values get ignored beyond the cap. Check Site Health > Info > Server for the effective values; if yours are still low, the host must raise them.

Ready to launch?

Get Bluehost from $3.99/month with a free domain, free SSL, and 30-day money-back guarantee.

Start for $3.99 →

Related Articles