Docs
Remove noindex from a live site
Remove noindex from a live site
A noindex tells search engines to drop the page from their results. On a staging site that is exactly what you want. On the live site it is the most expensive one-word mistake in SEO: the site still loads, every visitor still sees it, but within days to weeks Google removes its pages, and the first sign is usually a traffic report a month later. It nearly always arrives the same way: the site goes live with the staging settings still on.
The site checklist marks this as Fix and sends a warning when a page that was indexable becomes noindex.
Where noindex comes from
| Where | What it looks like | Who adds it |
|---|---|---|
| a meta tag in the HTML | <meta name="robots" content="noindex, nofollow"> |
the CMS, an SEO plugin, the theme or the app's layout |
the X-Robots-Tag header |
X-Robots-Tag: noindex |
the web server, .htaccess, a CDN rule or the app |
The checklist reads both and shows which one it found. nofollow, noarchive and the like on their own do not remove a page; only noindex (also inside none) does.
Check it yourself
Replace example.com with your site:
curl -sIL https://example.com | grep -i '^x-robots-tag'
curl -sL https://example.com | grep -ioE '<meta[^>]+name="?(robots|googlebot)"?[^>]*>'
The first command prints the header, the second the robots meta tags. When neither prints anything with noindex in it, the page is indexable. Check a few inner pages too, not only the home page: a template or a single page can carry its own noindex.
How to fix
Find where the noindex comes from (the table above) and remove it there. If you are not sure, start with the CMS or app tab, and use the server tabs when the header is the source.
WordPress
The whole site. Open Settings → Reading and untick Search engine visibility (Discourage search engines from indexing this site), then Save Changes. This is the checkbox that stays ticked after a site moves from staging to live.
A single page or post with Yoast SEO. Edit the page, in the Yoast SEO box open Advanced, and set Allow search engines to show this page in search results? to Yes (or the default, when the default is Yes). Whole content types are under Yoast SEO → Settings → Content types (Show … in search results).
A single page or post with Rank Math. Edit the page, open the Rank Math panel, tab Advanced, and under Robots Meta untick No Index. Site-wide defaults are under Rank Math SEO → Titles & Meta.
Then clear the page cache (WP Rocket, LiteSpeed Cache, W3 Total Cache, your host's cache): a cached page still carries the old tag.
If the tag is still there, search the theme and plugins for it: a "maintenance" or "coming soon" plugin, or a line in functions.php that hooks wp_robots, can add it too.
cPanel
The meta tag comes from the CMS (see the WordPress tab). The header can come from an .htaccess file:
- Open Files → File Manager, go to the site's folder (usually
public_html) and turn on Show Hidden Files in Settings. - Edit
.htaccessand look for a line withX-Robots-Tag, for example:
Header set X-Robots-Tag "noindex, nofollow"
- Delete the line (or the whole
<IfModule mod_headers.c>block around it) and save.
Check the .htaccess files in subfolders too. If nothing is there and the header persists, ask your host whether they add it for staging or temporary domains.
nginx
Look for the header in the whole configuration:
sudo grep -rn -i 'x-robots-tag' /etc/nginx/
You are looking for a line like this, often left over from a staging server block that was copied for production:
add_header X-Robots-Tag "noindex, nofollow" always;
Delete it from the live site's server block (on Debian and Ubuntu under /etc/nginx/sites-available/, on Rocky, Alma and CentOS under /etc/nginx/conf.d/), then test and reload:
sudo nginx -t && sudo systemctl reload nginx
If the site is a proxied app (Node, Python), the app can send the header itself: see the Node.js or Laravel tab.
Apache and LiteSpeed
Look for the header in the server configuration and in .htaccess:
sudo grep -rn -i 'x-robots-tag' /etc/apache2/ /var/www/
(/etc/httpd/ instead of /etc/apache2/ on Rocky, Alma and CentOS.) Remove a line like this:
Header set X-Robots-Tag "noindex, nofollow"
If it was in the virtual host, apply the change:
sudo apachectl configtest && sudo systemctl reload apache2
A change in .htaccess applies at once, also on LiteSpeed shared hosting.
Cloudflare
Cloudflare does not add noindex to your own domain, but a rule someone made there can. Open the domain and check:
- Rules → Transform Rules → Modify Response Header: a rule that sets
X-Robots-Tag. Delete or disable it. - Workers Routes: a Worker on the domain can add the header or rewrite the page.
On Cloudflare Pages, preview addresses on *.pages.dev are sent with X-Robots-Tag: noindex on purpose; your custom domain is not. If the live domain has it, look in the project's _headers file.
When the header is gone, purge the cache: Caching → Configuration → Purge Everything.
Node.js and Next.js
In the Next.js App Router, look for robots in metadata or generateMetadata, most often in the root app/layout.js:
export const metadata = {
robots: { index: false, follow: false }, // delete this, or make it depend on the environment
};
Also check headers() in next.config.js for an X-Robots-Tag entry, and in the Pages Router any <meta name="robots"> in next/head. If you want staging hidden, tie it to an environment variable that is only set there, so production cannot inherit it.
On Vercel, preview deployments get X-Robots-Tag: noindex automatically; the production domain does not. In Express, search for X-Robots-Tag in middleware.
Laravel
Look in the layout (usually resources/views/layouts/app.blade.php) for a robots meta tag, and in app/Http/Middleware for anything that sets X-Robots-Tag. A common pattern is a condition on the environment:
@unless (app()->isProduction())
<meta name="robots" content="noindex, nofollow">
@endunless
That is a good pattern, but it fails when production runs with the wrong environment. Make sure the live server's .env has APP_ENV=production, then run php artisan config:cache so the cached configuration picks it up.
Shopify
Shopify does not put noindex on a public store. If the checklist finds one:
- Online Store → Preferences → Password protection: while the password page is on, the store is not public at all. Turn it off when the store goes live.
- Online Store → Themes → … → Edit code: search
theme.liquidand the snippets fornoindex. Some themes and apps add it on purpose to certain templates (search results, filtered collections), which is fine; on the home page and products it is not. - An SEO app can hide pages too; check its settings.
Wix
In the dashboard, open the SEO settings and make sure Let search engines index your site is on. For a single page: in the editor open the page's settings, SEO basics, and turn on Let search engines index this page. Then publish the site.
Webflow
Webflow hides only its own *.webflow.io staging address (Site settings → SEO → Disable Webflow subdomain indexing); that setting does not touch your domain. If your domain has noindex, it comes from custom code: check Site settings → Custom code (Head code) and each page's Page settings → Custom code, remove the robots meta tag and Publish.
Squarespace
Check that the site is public (site availability, not private or password protected), then open the page's Page settings → SEO and turn off the option that hides the page from search engines. Code injection (Settings → Advanced → Code Injection, on plans that have it) can also carry a robots meta tag.
Hide staging with a password, not with noindex
A noindex on staging is a setting you must remember to remove on launch day. A password (HTTP basic auth or the host's "password protect directory") keeps search engines and everyone else out, and when the site moves there is nothing to forget, because the live server never had it.
Getting back into Google
Removing the tag does not bring the pages back the same minute. Google has to visit them again:
- In Google Search Console, paste the address into URL inspection at the top. It shows whether Google still sees
noindex; click Test live URL to check the current version. - Click Request indexing for the home page and the most important pages.
- Submit the sitemap under Indexing → Sitemaps (see Add a sitemap) so Google finds the rest.
Most pages return within days; on a large site, a couple of weeks.
Confirm the fix
Run the two curl commands from Check it yourself again, then open the target in PulseKeeper and click Check now on the Checklist tab. The item turns OK within a few minutes instead of at the next daily run.