EnjoySEOs Header
EnjoySEOs

Noindex Checker

Check pages for noindex meta tags, X-Robots-Tag directives, and other indexing signals. Analyze URLs, pasted HTML, and uploaded files with free browser-based tools.

Check page URLs

Direct browser requests only succeed when the target site allows cross-origin access. If a request is blocked, paste the page source in the Paste HTML tab instead.

Nothing is uploaded anywhere. URL checks are direct browser requests made only when you press Check URLs.

Advanced options

Import a CSV

No file selected.

Recognised columns (header row optional): url, html, headers. Without a header row the first column is treated as the URL, the second as HTML, and the third as response headers.

Results

URL Fetch HTTP Meta robots X-Robots-Tag robots.txt Assessment Evidence

Evidence for the selected record

Export

These are browser-generated technical reports. They are not Google Search Console exports and do not represent official search-engine indexing data.

', 'x-robots-tag: noindex'], ['https://example.com/indexable/', '', ''], ['https://example.com/no-meta/', 'No meta', ''] ]); importCsvText(sample, 'sample-data.csv (sample)'); announce('Sample CSV loaded. These are example records, not real crawl data.'); }); /* --------------------------------------------------------------- HTML panel --------------------------------------------------------------- */ var htmlAnalysis = null; var htmlDetailMode = 'summary'; function renderHtmlResult(){ var box = $('enic-html-out'); var addBtn = $('enic-html-add'); if(!box) return; box.textContent = ''; if(!htmlAnalysis){ box.appendChild(el('p', 'enic-mini', 'Paste HTML or upload a file, then press Analyze HTML.')); if(addBtn) addBtn.disabled = true; return; } var a = htmlAnalysis; if(a.empty){ box.appendChild(el('div', 'enic-msg warn', 'No HTML content was supplied, so there is nothing to analyse.')); if(addBtn) addBtn.disabled = true; return; } var summaryCls = a.anyNoindex ? 'bad' : (a.conflicts.length ? 'warn' : 'ok'); var summaryText; if(a.anyNoindex) summaryText = 'Noindex detected in the supplied HTML meta robots tags.'; else if(a.conflicts.length) summaryText = 'Conflicting meta robots directives detected. Review them carefully.'; else if(!a.tags.length) summaryText = 'No robots meta tags were found. This does not prove the page is indexable.'; else summaryText = 'No noindex directive was found in the inspected meta robots tags.'; box.appendChild(el('div', 'enic-msg ' + summaryCls, summaryText)); var kv = el('div', 'enic-kv'); function addKv(k, v){ var row = el('div', 'enic-kvrow'); row.appendChild(el('span', 'enic-kvk', k)); row.appendChild(el('span', 'enic-kvv', v)); kv.appendChild(row); } addKv('Robots meta tags found', String(a.tags.length)); addKv('Index directive', a.groups.some(function(g){ return g.effect === 'index'; }) ? 'Present' : 'Not present'); addKv('Noindex directive', a.anyNoindex ? 'Present (' + a.noindexBots.join(', ') + ')' : 'Not present'); addKv('Conflicts', a.conflicts.length ? String(a.conflicts.length) : 'None detected'); box.appendChild(kv); if(htmlDetailMode === 'summary'){ if(a.groups.length){ var wrap = el('div'); wrap.appendChild(el('h4', 'enic-h4', 'Detected directives')); a.groups.forEach(function(g){ var line = el('div', 'enic-directive'); line.appendChild(el('span', 'enic-dname', g.name)); line.appendChild(el('span', 'enic-ddesc', (g.directives.length ? g.directives.map(function(d){ return d.raw; }).join(', ') : 'no directives') + ' โ€” content: ' + g.contents.map(function(c){ return '"' + c + '"'; }).join(' ; '))); wrap.appendChild(line); }); box.appendChild(wrap); } }else{ if(a.tags.length){ var wrap2 = el('div'); wrap2.appendChild(el('h4', 'enic-h4', 'Every robots meta tag found')); a.tags.forEach(function(t, i){ var line = el('div', 'enic-directive'); line.appendChild(el('span', 'enic-dname', '#' + (i + 1) + ' ' + t.name)); var desc = el('span', 'enic-ddesc'); desc.appendChild(document.createTextNode('Source: . ')); desc.appendChild(document.createTextNode('Content attribute present: ' + (t.hasContent ? 'yes' : 'no') + '. ')); desc.appendChild(document.createTextNode('Located in : ' + (t.inHead ? 'yes' : 'no') + '.')); line.appendChild(desc); wrap2.appendChild(line); }); box.appendChild(wrap2); } if(a.groups.length){ var wrap3 = el('div'); wrap3.appendChild(el('h4', 'enic-h4', 'Directive breakdown')); a.groups.forEach(function(g){ g.directives.forEach(function(d){ var line = el('div', 'enic-directive'); line.appendChild(el('span', 'enic-dname', g.name + ' โ†’ ' + d.name)); line.appendChild(el('span', 'enic-ddesc', describeDirective(d.name) + (d.value ? ' Value: ' + d.value : ''))); wrap3.appendChild(line); }); }); box.appendChild(wrap3); } } if(a.conflicts.length){ var mc = el('div', 'enic-msg warn'); mc.appendChild(el('strong', null, 'Conflicts')); var ulc = el('ul'); a.conflicts.forEach(function(c){ ulc.appendChild(el('li', null, c)); }); mc.appendChild(ulc); box.appendChild(mc); } if(a.warnings.length){ var mw = el('div', 'enic-msg warn'); mw.appendChild(el('strong', null, 'Worth checking')); var ulw = el('ul'); a.warnings.forEach(function(w){ ulw.appendChild(el('li', null, w)); }); mw.appendChild(ulw); box.appendChild(mw); } if(a.notes.length){ var un = el('ul', 'enic-list'); a.notes.forEach(function(n){ un.appendChild(el('li', null, n)); }); box.appendChild(un); } box.appendChild(el('p', 'enic-mini', 'Only meta robots signals in the supplied HTML are evaluated here. X-Robots-Tag response headers and robots.txt are not part of this analysis.')); if(addBtn) addBtn.disabled = false; } on($('enic-html-go'), 'click', function(){ var text = $('enic-html').value; htmlAnalysis = analyzeHtmlMeta(text); renderHtmlResult(); announce(htmlAnalysis.anyNoindex ? 'Noindex detected in the supplied HTML.' : 'HTML analysis complete.'); }); on($('enic-html-reset'), 'click', function(){ $('enic-html').value = ''; $('enic-html-label').value = ''; $('enic-html-file').value = ''; $('enic-html-filename').textContent = 'No file selected.'; htmlAnalysis = null; renderHtmlResult(); announce('HTML analyser cleared.'); }); on($('enic-html-sum'), 'click', function(){ htmlDetailMode = 'summary'; this.setAttribute('aria-pressed', 'true'); $('enic-html-det').setAttribute('aria-pressed', 'false'); renderHtmlResult(); }); on($('enic-html-det'), 'click', function(){ htmlDetailMode = 'detailed'; this.setAttribute('aria-pressed', 'true'); $('enic-html-sum').setAttribute('aria-pressed', 'false'); renderHtmlResult(); }); on($('enic-html-file'), 'change', function(){ var f = this.files && this.files[0]; var nameEl = $('enic-html-filename'); if(!f){ if(nameEl) nameEl.textContent = 'No file selected.'; return; } if(f.size > 2097152){ if(nameEl) nameEl.textContent = 'File is larger than 2 MB and was not read.'; announce('The HTML file is too large.'); this.value = ''; return; } if(nameEl) nameEl.textContent = 'Loaded: ' + f.name + ' (' + Math.round(f.size / 1024) + ' KB)'; var reader = new FileReader(); reader.onload = function(){ $('enic-html').value = String(reader.result || ''); htmlAnalysis = analyzeHtmlMeta($('enic-html').value); renderHtmlResult(); announce('File loaded and analysed.'); }; reader.onerror = function(){ announce('The file could not be read.'); }; reader.readAsText(f); }); on($('enic-html-clearfile'), 'click', function(){ $('enic-html-file').value = ''; $('enic-html-filename').textContent = 'No file selected.'; announce('Uploaded file removed.'); }); on($('enic-html-add'), 'click', function(){ if(!htmlAnalysis) return; var label = $('enic-html-label').value.trim(); var rec = { id: uniqueId(), url: label || 'Pasted HTML (' + new Date().toLocaleTimeString() + ')', source: 'html', fetch: 'manual', error: '', httpStatus: null, finalUrl: '', redirected: false, contentType: '', html: htmlAnalysis, header: null, headerNote: 'X-Robots-Tag was not checked for this record.', htmlNote: '', robots: null }; state.records.push(refreshRecord(rec)); state.selectedId = rec.id; state.page = 1; renderAll(); announce('Added to the results table.'); }); /* --------------------------------------------------------------- Headers panel --------------------------------------------------------------- */ var headerAnalysis = null; var headerParsed = null; function renderHeaderResult(){ var box = $('enic-hdr-out'); var addBtn = $('enic-hdr-add'); if(!box) return; box.textContent = ''; if(!headerAnalysis){ box.appendChild(el('p', 'enic-mini', 'Paste HTTP response headers, then press Analyze headers.')); if(addBtn) addBtn.disabled = true; return; } var a = headerAnalysis; var parsed = headerParsed || { statusLine: '', headers: [], xRobots: [], malformed: [] }; if(!parsed.headers.length && !parsed.statusLine){ box.appendChild(el('div', 'enic-msg warn', 'No usable header lines were found in the supplied text.')); if(addBtn) addBtn.disabled = true; return; } var cls = a.anyNoindex ? 'bad' : (a.conflicts.length ? 'warn' : 'ok'); var txt; if(a.anyNoindex) txt = 'Noindex detected in the supplied X-Robots-Tag header values.'; else if(a.conflicts.length) txt = 'Conflicting X-Robots-Tag directives detected.'; else if(!a.present) txt = 'No X-Robots-Tag header line was supplied, so no noindex directive was found.'; else txt = 'The supplied X-Robots-Tag header values contain no noindex directive.'; box.appendChild(el('div', 'enic-msg ' + cls, txt)); var kv = el('div', 'enic-kv'); function addKv(k, v){ var row = el('div', 'enic-kvrow'); row.appendChild(el('span', 'enic-kvk', k)); row.appendChild(el('span', 'enic-kvv', v)); kv.appendChild(row); } if(parsed.statusLine) addKv('Status line', parsed.statusLine); addKv('Header lines parsed', String(parsed.headers.length)); addKv('X-Robots-Tag lines', String(parsed.xRobots.length)); addKv('Noindex', a.anyNoindex ? 'Present (' + a.noindexBots.join(', ') + ')' : 'Not found'); if(a.conflicts.length) addKv('Conflicts', String(a.conflicts.length)); box.appendChild(kv); if(a.groups.length){ var wrap = el('div'); wrap.appendChild(el('h4', 'enic-h4', 'X-Robots-Tag breakdown')); a.groups.forEach(function(g){ var line = el('div', 'enic-directive'); line.appendChild(el('span', 'enic-dname', g.name)); line.appendChild(el('span', 'enic-ddesc', effectLabel(g.effect) + ' โ€” ' + g.directives.map(function(d){ return d.raw; }).join(', '))); wrap.appendChild(line); }); box.appendChild(wrap); } if(parsed.headers.length){ var wrap2 = el('div'); wrap2.appendChild(el('h4', 'enic-h4', 'All parsed headers')); parsed.headers.forEach(function(h){ var line = el('div', 'enic-directive'); line.appendChild(el('span', 'enic-dname', h.name)); line.appendChild(el('span', 'enic-ddesc', h.value)); wrap2.appendChild(line); }); box.appendChild(wrap2); } if(parsed.malformed.length){ var mm = el('div', 'enic-msg warn'); mm.appendChild(el('strong', null, 'Malformed lines')); var ulm = el('ul'); parsed.malformed.forEach(function(m){ ulm.appendChild(el('li', null, m)); }); mm.appendChild(ulm); box.appendChild(mm); } if(a.warnings.length){ var mw = el('div', 'enic-msg warn'); mw.appendChild(el('strong', null, 'Worth checking')); var ulw = el('ul'); a.warnings.forEach(function(w){ ulw.appendChild(el('li', null, w)); }); mw.appendChild(ulw); box.appendChild(mw); } box.appendChild(el('p', 'enic-mini', 'These headers were supplied manually. They are not the result of a live fetch and do not describe the HTML meta robots tags.')); if(addBtn) addBtn.disabled = false; } on($('enic-hdr-go'), 'click', function(){ var text = $('enic-hdr').value; if(!text.trim()){ headerAnalysis = null; headerParsed = null; renderHeaderResult(); announce('No header text was supplied.'); return; } headerParsed = parseHeaderText(text); headerAnalysis = analyzeXRobots(headerParsed.xRobots); renderHeaderResult(); announce(headerAnalysis.anyNoindex ? 'Noindex detected in the supplied headers.' : 'Header analysis complete.'); }); on($('enic-hdr-reset'), 'click', function(){ $('enic-hdr').value = ''; $('enic-hdr-label').value = ''; headerAnalysis = null; headerParsed = null; renderHeaderResult(); announce('Header analyser cleared.'); }); on($('enic-hdr-add'), 'click', function(){ if(!headerAnalysis) return; var label = $('enic-hdr-label').value.trim(); var rec = { id: uniqueId(), url: label || 'Manual headers (' + new Date().toLocaleTimeString() + ')', source: 'headers', fetch: 'manual', error: '', httpStatus: null, finalUrl: '', redirected: false, contentType: '', html: null, htmlNote: 'HTML meta robots was not checked for this record.', header: headerAnalysis, robots: null }; state.records.push(refreshRecord(rec)); state.selectedId = rec.id; state.page = 1; renderAll(); announce('Added to the results table.'); }); /* --------------------------------------------------------------- robots.txt panel --------------------------------------------------------------- */ on($('enic-rbt-agent'), 'change', function(){ var custom = $('enic-rbt-custom'); var isCustom = this.value === 'custom'; custom.disabled = !isCustom; if(!isCustom) custom.value = ''; }); function currentRobotsAgent(){ var sel = $('enic-rbt-agent').value; if(sel === 'custom'){ var c = $('enic-rbt-custom').value.trim(); return c || '*'; } return sel; } function renderRobotsResult(){ var box = $('enic-rbt-out'); if(!box) return; box.textContent = ''; var text = $('enic-rbt').value; if(!text.trim()){ box.appendChild(el('p', 'enic-mini', 'Paste robots.txt content, then press Analyze robots.txt.')); return; } var targetInput = $('enic-rbt-url').value.trim(); var path = pathFromUrl(targetInput); if(path === null){ box.appendChild(el('div', 'enic-msg warn', 'Enter a full URL or a path starting with "/" so the rules can be matched against it.')); return; } var parsed; try{ parsed = parseRobotsTxt(text); } catch(e){ box.appendChild(el('div', 'enic-msg err', 'The robots.txt content could not be parsed.')); return; } var agent = currentRobotsAgent(); var t = testRobots(parsed, agent, path); var cls = t.result === 'blocked' ? 'warn' : 'ok'; var label = t.result === 'blocked' ? 'Likely blocked by robots.txt' : 'Likely allowed to crawl'; var msg = el('div', 'enic-msg ' + cls); msg.appendChild(el('strong', null, label)); msg.appendChild(document.createTextNode(' โ€” practical local analysis for ' + agent + ' on ' + path + '.')); box.appendChild(msg); var kv = el('div', 'enic-kv'); function addKv(k, v){ var row = el('div', 'enic-kvrow'); row.appendChild(el('span', 'enic-kvk', k)); row.appendChild(el('span', 'enic-kvv', v)); kv.appendChild(row); } addKv('Crawler tested', agent); addKv('Path tested', path); addKv('Groups found', String(parsed.groups.length)); addKv('Group matched', t.matched === 'specific' ? 'Specific user-agent match' : (t.matched === 'wildcard' ? 'Wildcard (*) group' : 'No matching group')); if(t.rule) addKv('Matched rule', t.rule); addKv('Reason', t.reason); box.appendChild(kv); box.appendChild(el('p', 'enic-mini', 'robots.txt controls crawling, not indexing. A URL blocked by robots.txt can still be indexed from external signals. This tool never treats a robots.txt block as a noindex directive.')); if(parsed.unsupported.length){ var mw = el('div', 'enic-msg warn'); mw.appendChild(el('strong', null, 'Patterns this tool does not evaluate')); var ulw = el('ul'); parsed.unsupported.slice(0, 10).forEach(function(w){ ulw.appendChild(el('li', null, w)); }); if(parsed.unsupported.length > 10){ ulw.appendChild(el('li', null, 'โ€ฆand ' + (parsed.unsupported.length - 10) + ' more.')); } mw.appendChild(ulw); box.appendChild(mw); } } on($('enic-rbt-go'), 'click', function(){ renderRobotsResult(); announce('robots.txt analysis complete.'); }); on($('enic-rbt-reset'), 'click', function(){ $('enic-rbt').value = ''; $('enic-rbt-url').value = ''; $('enic-rbt-custom').value = ''; $('enic-rbt-agent').value = 'googlebot'; $('enic-rbt-custom').disabled = true; $('enic-rbt-fetchmsg').textContent = ''; renderRobotsResult(); announce('robots.txt panel cleared.'); }); on($('enic-rbt-fetch'), 'click', function(){ var targetInput = $('enic-rbt-url').value.trim(); var msgEl = $('enic-rbt-fetchmsg'); if(!targetInput){ if(msgEl) msgEl.textContent = 'Enter a URL first.'; return; } var origin; try{ var u = /^https?:\/\//i.test(targetInput) ? new URL(targetInput) : new URL('https://' + targetInput.replace(/^\/+/, '')); origin = u.origin; }catch(e){ if(msgEl) msgEl.textContent = 'That does not look like a valid URL.'; return; } var robotsUrl = origin + '/robots.txt'; if(msgEl) msgEl.textContent = 'Requesting ' + robotsUrl + ' โ€ฆ'; announce('Requesting robots.txt.'); fetch(robotsUrl, { method: 'GET', mode: 'cors', credentials: 'omit', redirect: 'follow', cache: 'no-store' }) .then(function(res){ if(!res.ok && res.status >= 400) throw new Error('HTTP ' + res.status); return res.text(); }) .then(function(text){ $('enic-rbt').value = text; if(msgEl) msgEl.textContent = 'robots.txt loaded from ' + robotsUrl + '.'; renderRobotsResult(); announce('robots.txt loaded.'); }) .catch(function(){ if(msgEl) msgEl.textContent = 'Unable to fetch ' + robotsUrl + ': CORS or network restriction. Paste the file contents manually instead.'; announce('robots.txt could not be fetched.'); }); }); /* --------------------------------------------------------------- Exports --------------------------------------------------------------- */ function resultRows(filtered){ var list = filtered ? getFiltered() : state.records; var rows = [[ 'url', 'source', 'fetch_result', 'http_status', 'final_url', 'redirected', 'meta_robots', 'x_robots_tag', 'robots_txt', 'assessment', 'evidence', 'error' ]]; list.forEach(function(r){ rows.push([ r.url || '', r.source || '', fetchCell(r), r.httpStatus ? String(r.httpStatus) : '', r.finalUrl || '', r.redirected ? 'yes' : 'no', metaCell(r), headerCell(r), robotsCell(r), r.overall || '', r.evidence || '', r.error || '' ]); }); return rows; } on($('enic-exp-csv-all'), 'click', function(){ if(!state.records.length){ announce('There are no results to export.'); return; } download(toCSV(resultRows(false)), 'noindex-checker-results.csv', 'text/csv;charset=utf-8'); announce('CSV export started.'); }); on($('enic-exp-csv-filtered'), 'click', function(){ var list = getFiltered(); if(!list.length){ announce('There are no filtered results to export.'); return; } download(toCSV(resultRows(true)), 'noindex-checker-filtered.csv', 'text/csv;charset=utf-8'); announce('Filtered CSV export started.'); }); on($('enic-exp-json'), 'click', function(){ if(!state.records.length){ announce('There are no results to export.'); return; } var payload = { tool: 'EnjoySEOs Noindex Checker', generated: new Date().toISOString(), limitations: [ 'Only technical indexing directives were inspected.', 'This is not a search-engine index status report.', 'Cross-origin pages and headers may not be readable by the browser.', 'An absent noindex directive does not prove that a page is indexed or indexable.' ], recordCount: state.records.length, records: state.records.map(function(r){ return { url: r.url, source: r.source, fetch: r.fetch, httpStatus: r.httpStatus, finalUrl: r.finalUrl, redirected: r.redirected, contentType: r.contentType, error: r.error, overall: r.overall, evidence: r.evidence, htmlMeta: r.html ? { checked: r.html.checked, empty: r.html.empty, anyNoindex: r.html.anyNoindex, noindexBots: r.html.noindexBots, indexBots: r.html.indexBots, tags: r.html.tags, groups: r.html.groups.map(function(g){ return { name: g.name, contents: g.contents, effect: g.effect, directives: g.directives.map(function(d){ return d.raw; }) }; }), conflicts: r.html.conflicts, warnings: r.html.warnings, notes: r.html.notes } : null, xRobotsTag: r.header ? { checked: r.header.checked, present: r.header.present, anyNoindex: r.header.anyNoindex, noindexBots: r.header.noindexBots, rawValues: r.header.rawValues, groups: r.header.groups.map(function(g){ return { name: g.name, contents: g.contents, effect: g.effect, directives: g.directives.map(function(d){ return d.raw; }) }; }), conflicts: r.header.conflicts, warnings: r.header.warnings } : null, headerNote: r.headerNote || '', htmlNote: r.htmlNote || '', robotsTxt: r.robots || null }; }) }; download(JSON.stringify(payload, null, 2), 'noindex-checker-report.json', 'application/json;charset=utf-8'); announce('JSON report download started.'); }); on($('enic-exp-txt'), 'click', function(){ if(!state.records.length){ announce('There are no results to export.'); return; } var lines = []; lines.push('EnjoySEOs Noindex Checker โ€” detected directives'); lines.push('Generated: ' + new Date().toISOString()); lines.push(''); state.records.forEach(function(r){ lines.push('URL: ' + (r.url || '')); lines.push('Assessment: ' + (r.overall || 'Unknown')); lines.push('Evidence: ' + (r.evidence || 'โ€”')); if(r.html && r.html.checked && r.html.groups.length){ r.html.groups.forEach(function(g){ lines.push(' HTML meta [' + g.name + '] effect=' + g.effect + ' content="' + g.contents.join(' ; ') + '"'); }); }else if(r.html){ lines.push(' HTML meta: not analysed'); } if(r.header && r.header.checked && r.header.groups.length){ r.header.groups.forEach(function(g){ lines.push(' X-Robots-Tag [' + g.name + '] effect=' + g.effect + ' directives=' + g.directives.map(function(d){ return d.raw; }).join(', ')); }); }else if(r.header){ lines.push(' X-Robots-Tag: not analysed'); }else if(r.headerNote){ lines.push(' X-Robots-Tag: ' + r.headerNote); } if(r.robots){ lines.push(' robots.txt [' + (r.robots.agent || '') + '] ' + (r.robots.result || 'unknown') + ' โ€” ' + (r.robots.reason || '')); } lines.push(''); }); download(lines.join('\n'), 'noindex-checker-directives.txt', 'text/plain;charset=utf-8'); announce('Directives text download started.'); }); on($('enic-exp-html'), 'click', function(){ if(!state.records.length){ announce('There are no results to export.'); return; } var rows = state.records.map(function(r){ return '' + esc(r.url) + '' + esc(fetchCell(r)) + '' + esc(metaCell(r)) + '' + esc(headerCell(r)) + '' + esc(robotsCell(r)) + '' + esc(r.overall || '') + '' + esc(r.evidence || '') + ''; }).join(''); var html = '' + '' + 'EnjoySEOs Noindex Checker Report' + '' + '

EnjoySEOs Noindex Checker Report

' + '

Generated: ' + esc(new Date().toISOString()) + '

' + '

Technical directive inspection only. This is not a search-engine index status report.

' + '' + '' + '' + rows + '
Results
URLFetchMeta robotsX-Robots-Tagrobots.txtAssessmentEvidence
'; download(html, 'noindex-checker-report.html', 'text/html;charset=utf-8'); announce('HTML report download started.'); }); on($('enic-copy-ev'), 'click', function(){ var rec = null; for(var i = 0; i < state.records.length; i++){ if(state.records[i].id === state.selectedId){ rec = state.records[i]; break; } } if(!rec){ announce('Select a row first.'); return; } var lines = []; lines.push('URL: ' + (rec.url || '')); lines.push('Source: ' + (rec.source || '')); lines.push('Fetch result: ' + fetchCell(rec)); if(rec.httpStatus) lines.push('HTTP status: ' + rec.httpStatus); if(rec.finalUrl && rec.finalUrl !== rec.url) lines.push('Final URL: ' + rec.finalUrl); lines.push('Meta robots: ' + metaCell(rec)); lines.push('X-Robots-Tag: ' + headerCell(rec)); lines.push('robots.txt: ' + robotsCell(rec)); lines.push('Assessment: ' + (rec.overall || '')); lines.push('Evidence: ' + (rec.evidence || '')); if(rec.error) lines.push('Error: ' + rec.error); copyPlain(lines.join('\n'), this, 'Copy selected evidence'); announce('Evidence copied to the clipboard.'); }); on($('enic-copy-sum'), 'click', function(){ var recs = state.records; if(!recs.length){ announce('There are no results to summarise.'); return; } function count(status){ return recs.filter(function(r){ return r.overall === status; }).length; } var lines = []; lines.push('EnjoySEOs Noindex Checker โ€” summary'); lines.push('Generated: ' + new Date().toISOString()); lines.push('Total records: ' + recs.length); lines.push('Fetched successfully: ' + recs.filter(function(r){ return r.fetch === 'ok'; }).length); lines.push('Noindex detected: ' + count('Noindex Detected')); lines.push('No noindex detected: ' + count('No Noindex Detected')); lines.push('Conflicting directives: ' + count('Conflicting Directives')); lines.push('Crawl blocked by robots.txt: ' + count('Crawl Blocked')); lines.push('Partial or unknown: ' + (count('Partial Check') + count('Unknown'))); lines.push('Failed requests: ' + recs.filter(function(r){ return r.fetch === 'failed'; }).length); lines.push(''); lines.push('Technical directive inspection only. Not a search-engine index status report.'); copyPlain(lines.join('\n'), this, 'Copy summary'); announce('Summary copied to the clipboard.'); }); /* --------------------------------------------------------------- Init --------------------------------------------------------------- */ (function init(){ renderHtmlResult(); renderHeaderResult(); renderRobotsResult(); renderAll(); setProgress(0, 0, 0); })(); })();
Explore more
More free SEO tools

Keep going with other free EnjoySEOs tools. No signup, no limits.

Word CounterCount words, sentences and reading time instantly.Content & Text Character CounterCheck characters with and without spaces.Content & Text Text Comparison ToolSpot differences between two blocks of text.Content & Text SEO Content AnalyzerReview your copy for on-page SEO signals.Content & Text SEO Readability CheckerScore how easy your content is to read.Content & Text Heading CheckerAudit H1โ€“H6 structure and hierarchy.Content & Text Image Alt Text CheckerFind images with missing or weak alt text.Content & Text Keyword Density CheckerSee word and phrase frequency at a glance.Keywords Keyword Clustering ToolGroup related keywords into topic clusters.Keywords Keyword Combination ToolMix keyword lists into every combination.Keywords Schema Markup GeneratorCreate JSON-LD for common schema types.Schema Markup Schema Markup ValidatorValidate structured data before you publish.Schema Markup Local Business Schema GeneratorMarkup for your business name, address and hours.Schema Markup FAQ Schema GeneratorTurn questions and answers into FAQ markup.Schema Markup Product Schema GeneratorProduct, price and offer structured data.Schema Markup Breadcrumb Schema GeneratorBreadcrumb trail markup, ready to paste.Schema Markup Robots.txt GeneratorBuild crawler rules and copy robots.txt.Crawling & Indexing Robots.txt TesterTest whether a URL is allowed or blocked.Crawling & Indexing Noindex CheckerCheck pages for noindex directives.Crawling & Indexing Canonical Tag CheckerVerify the canonical URL on any page.Crawling & Indexing Canonical Tag GeneratorGenerate clean rel=canonical tags.Crawling & Indexing Disavow File GeneratorBuild a disavow file for Google Search Console.Crawling & Indexing XML Sitemap GeneratorCreate a valid sitemap from your URLs.Sitemaps XML Sitemap ValidatorCatch errors in your sitemap file.Sitemaps XML Sitemap VisualizerSee your sitemap structure at a glance.Sitemaps Sitemap URL ExtractorPull every URL out of a sitemap.Sitemaps Meta Description GeneratorWrite meta descriptions that fit the snippet.Meta & Social SEO Title GeneratorDraft title tags with the right length.Meta & Social Meta Tag CheckerInspect the meta tags on any page.Meta & Social Meta Tag GeneratorTitle, canonical, robots and social tags.Meta & Social Google SERP SimulatorPreview your snippet on desktop and mobile.Meta & Social Open Graph PreviewSee Facebook and LinkedIn share cards.Meta & Social Open Graph Tag GeneratorGenerate og: tags for better sharing.Meta & Social Hreflang GeneratorCreate hreflang tags or sitemap entries.International Hreflang CheckerValidate language and region annotations.International Internal Link CheckerReview internal links and anchors on a page.Links & URLs Bulk URL CleanerClean, dedupe and normalise URL lists.Links & URLs HTML Link ExtractorExtract every link from pasted HTML.Links & URLs UTM BuilderAdd campaign tracking parameters to links.Links & URLs URL Parameter BuilderAppend custom query parameters to URLs.Links & URLs Htaccess Redirect GeneratorApache 301 rules, copy-ready.Redirects Nginx Redirect GeneratorNginx redirect blocks in seconds.Redirects
Technical SEO Guide

Check Noindex Directives and Review Your Page's Indexing Signals

A noindex directive tells compatible search engines not to include a page or resource in their search results. Use the EnjoySEOs Noindex Checker to help identify noindex-related signals and review whether a page may be restricted from search indexing. Checking these settings can help you find accidental exclusions, troubleshoot visibility problems, and verify the intended indexing configuration of important URLs.

What Is a Noindex Checker?

A Noindex Checker is an SEO utility that helps you investigate whether a webpage includes instructions intended to keep it out of search engine indexes. Depending on the checker and the information it can access, this may include a robots meta tag in the HTML or an X-Robots-Tag HTTP response header.

These directives are useful when a page should remain accessible to visitors but should not appear in search results. They may be appropriate for certain internal pages, staging content that is otherwise publicly accessible, duplicate or temporary URLs, and pages that provide little value as standalone search results.

The same settings can cause SEO problems when they are applied to the wrong pages. An important service page, article, product page, or landing page with an unintended noindex directive may be excluded from search results after a search engine crawls and processes it.

Important: Finding a noindex directive is not automatically an error. The correct configuration depends on whether the page is intended to appear in search results. Always compare the detected signal with the page's intended indexing status.

Why Check Pages for Noindex?

  • Identify accidental exclusions: Find indexing directives that may have been left on important pages.
  • Troubleshoot search visibility: Investigate one possible reason a URL is missing from search results.
  • Review technical SEO settings: Confirm that page-level indexing instructions match your site's strategy.
  • Audit website changes: Recheck pages after theme changes, plugin updates, migrations, or staging-to-production launches.
  • Validate selected URLs: Review important landing pages, articles, product pages, and other content that should be indexable.

What Is a Noindex Directive?

A noindex directive is an instruction that tells search engines supporting the rule not to include a particular page or resource in their search results. For Google, it can be supplied through an HTML robots meta tag or an HTTP response header.

When Googlebot can access a page and discovers a valid noindex directive, Google can remove that page from its search results. This is different from preventing a crawler from accessing the page in the first place.

HTML Meta Robots Tag <meta name="robots" content="noindex">

This tag instructs compatible search engine crawlers not to index the page. The robots name applies the rule broadly to crawlers that support it.

Googlebot-Specific Meta Tag <meta name="googlebot" content="noindex">

This version targets Googlebot. Search engines can interpret indexing instructions differently, so review the requirements of the search engines you want to address.

HTTP Response Header X-Robots-Tag: noindex

The X-Robots-Tag header can tell compatible crawlers not to index a resource. It is especially useful for resources such as PDFs and image files, where an HTML meta tag cannot be added to the resource itself.

Common Robots Directives

Directive Purpose Typical Use
index Allows indexing when supported; generally unnecessary because indexing is the default. Explicitly documenting the intended setting.
noindex Instructs compatible search engines not to include the page or resource in search results. Pages that should not appear in organic search.
follow Does not prohibit following links under the directive itself. Combining link-handling preferences with other robots rules.
nofollow Instructs compatible crawlers not to follow links on the page. Specific link-handling requirements.
noindex, nofollow Combines instructions not to index the page and not to follow its links. Pages for which both restrictions are intended.
none Equivalent to noindex, nofollow for Google. A combined indexing and link-following restriction.

The directives you choose should reflect your actual requirements. Do not add noindex or nofollow simply because a page is not a major landing page. Review the page's role, links, and intended search visibility first.

How to Check a Page for Noindex

Checking an important URL involves more than locating a single meta tag. Review the available indexing signals and, when possible, confirm what a search engine can actually access and process.

  1. Enter the page URL into the checker. Use the complete URL of the specific page you want to investigate.
  2. Review the detected result. Look for a noindex instruction or other indexing-related signal reported by the tool.
  3. Inspect the HTML meta tags. If source inspection is available, check for name="robots" and crawler-specific tags such as name="googlebot".
  4. Check the HTTP response headers. Review whether the server returns an X-Robots-Tag header containing noindex.
  5. Verify crawler access. Make sure the page is not blocked from crawling in a way that prevents the crawler from reading the noindex directive.
  6. Compare the result with your SEO goal. A noindex signal is expected on some pages and problematic on others. Confirm whether the URL should be eligible for search indexing.
  7. Confirm important cases in Search Console. Google's URL Inspection tool can help you investigate Google's view of a URL, including indexing information and the page Google was able to retrieve.

Remember: A technical checker provides evidence about the signals it can inspect. It does not guarantee that a URL is indexed, excluded, or displayed in search results. Search engines must crawl and process the relevant information, and indexing is not guaranteed even when a page has no noindex directive.

Meta Robots Tag vs. X-Robots-Tag Header

Both the robots meta tag and the X-Robots-Tag header can communicate indexing instructions to compatible search engines. The main difference is where each instruction is delivered.

Feature Robots Meta Tag X-Robots-Tag Header
Where it appears In the HTML document's meta tags. In the HTTP response headers.
HTML pages Can provide page-level indexing instructions. Can also provide indexing instructions.
PDFs and other non-HTML files Cannot be inserted into the resource as an HTML meta tag. Can apply indexing instructions through response headers.
Checking method Inspect the rendered or retrieved HTML and its meta tags. Inspect the HTTP response headers for the relevant URL.

Can Both Be Present on One Page?

Yes. A page may have a robots meta tag and an HTTP response header. If multiple indexing directives apply, search engines interpret them according to their own rules. Conflicting instructions can make troubleshooting more difficult, so keep your configuration consistent and intentional.

When a page should be indexable, check both locations where applicable. Removing a meta tag alone may not resolve the issue if the server continues to send an X-Robots-Tag: noindex header.

Noindex vs. Robots.txt: What Is the Difference?

Noindex and robots.txt serve different purposes. A noindex directive is used to request exclusion from search results, while robots.txt primarily controls which URLs a crawler is allowed to request.

Consideration Noindex Robots.txt Disallow
Main purpose Tell compatible search engines not to include a page or resource in results. Ask compliant crawlers not to crawl matching URLs.
How it is delivered Through a meta tag or supported HTTP response header. Through rules in the site's robots.txt file.
Does the crawler need access? Yes. It must be able to retrieve the relevant directive. The rule is used to guide crawling access.
Does it guarantee removal from search? It provides an exclusion instruction to compatible search engines, subject to their processing. No. A blocked URL may still appear in search results without a descriptive snippet.

Critical distinction: If a URL is blocked by robots.txt, Google may be unable to crawl the page and discover its noindex tag or header. Do not use robots.txt disallow as a substitute for noindex when your goal is to keep a page out of Google's search results. Google does not support the use of a noindex rule in robots.txt.

Which Method Should You Use?

  • Keep a page out of search results: Use a supported noindex directive and allow the crawler to access the page so it can read it.
  • Manage crawler access: Use robots.txt rules where appropriate for crawling control.
  • Restrict private information: Use proper access controls, authentication, or password protection. Noindex is not a security mechanism.
  • Remove an already indexed URL: Apply the appropriate exclusion or removal process, then verify the result with the relevant search engine tools.

Common Noindex Problems to Look For

Incorrect indexing settings often occur during site development, redesigns, migrations, or changes to SEO plugins. These are some of the issues worth investigating when a page does not appear in search results as expected.

1. Noindex Left on After Staging

A staging or development environment may be configured to discourage indexing. If the same setting remains on the production website, important pages can be excluded after crawlers discover the directive.

2. Incorrect WordPress Settings

Search visibility settings or SEO plugin configurations may unintentionally apply noindex to the entire site, a post type, an archive, or an individual page.

3. Noindex in Response Headers

A server, hosting configuration, CDN, or application may return an X-Robots-Tag header that is not visible when checking only the HTML.

4. Robots.txt Blocks the URL

A crawl restriction can prevent search engines from reading the page-level noindex instruction. Review both the robots.txt rule and the intended indexing outcome.

5. Conflicting Directives

Different rules in the HTML and HTTP headers can complicate troubleshooting. Inspect all applicable instructions and remove settings that are not intentional.

6. Search Results Have Not Updated

Search engines may need to recrawl and process a URL after you change its directives. A successful configuration change does not guarantee immediate changes in search results.

How to Fix an Accidental Noindex Directive

If an important page contains a noindex directive that should not be there, identify where the rule originates before changing your website settings. The correct fix depends on the page, content management system, and server configuration.

  1. Confirm the page should be indexable. Check that the URL is intended for public search results and contains content worth making available through search.
  2. Inspect its robots meta tags. Review the HTML for noindex in a general robots tag or a crawler-specific tag.
  3. Inspect HTTP response headers. Check whether an X-Robots-Tag is providing a noindex instruction separately from the HTML.
  4. Review your CMS and SEO plugin. In WordPress, check the site's search visibility settings, page-level SEO settings, and relevant post type or archive defaults.
  5. Check the crawling rules. Ensure robots.txt is not preventing the crawler from retrieving a page whose noindex directive needs to be processed.
  6. Publish and test the change. Review the live page and its response headers again to confirm the unwanted directive is no longer present.
  7. Request or monitor a recrawl. Use Google Search Console's URL Inspection tool when appropriate and monitor the page's indexing status as Google processes the updated version.

Before removing noindex: Make sure the page is genuinely intended to appear in search results. Internal utility pages, private content, duplicate URLs, and certain account-related pages may need different treatment from public landing pages and editorial content.

WordPress Noindex Checks

If your website uses WordPress, investigate the following areas when a page unexpectedly reports noindex:

  • The site's search engine visibility setting in WordPress.
  • The page or post's individual SEO settings.
  • SEO plugin defaults for posts, pages, categories, tags, and custom post types.
  • Theme functions, custom code, or plugins that add robots meta tags.
  • Server, hosting, proxy, or CDN rules that may add response headers.

The exact setting varies by website and plugin. After making a change, check the published URL rather than relying only on the settings screen. Then confirm how the search engine sees the page using its inspection and reporting tools.

Noindex Checker Best Practices

Regular indexing checks can help you catch technical issues before they affect important parts of a website. Make them part of your routine SEO review, especially after large changes to a site.

  • Prioritize important URLs: Check key service pages, category pages, products, landing pages, and high-value articles.
  • Review after releases: Recheck relevant pages after migrations, theme changes, plugin updates, and development launches.
  • Check more than one signal: Inspect the HTML meta tags and HTTP response headers where possible.
  • Keep indexing rules intentional: Decide which pages belong in search results instead of removing every noindex directive indiscriminately.
  • Use official search tools: Confirm important findings in Search Console rather than treating a single checker result as proof of index status.
  • Remember the difference between crawling and indexing: A page can be crawlable but excluded from results, and a crawlable page is not guaranteed to be indexed.

Frequently Asked Questions

What does a Noindex Checker do?

A Noindex Checker helps investigate whether a webpage contains indexing restrictions, such as a robots meta tag or an HTTP response header. The signals it can detect depend on the tool's capabilities and the information available from the tested URL.

What does noindex mean in SEO?

Noindex is an instruction for compatible search engines not to include a page or resource in their search results. It can be delivered using an HTML robots meta tag or an X-Robots-Tag HTTP response header.

Does noindex remove a page from Google immediately?

No. Google must be able to crawl the page and discover the directive. It then needs to process the updated information. The time required can vary, so use Google Search Console to inspect the URL and monitor its status.

Can a page with noindex still be crawled?

Yes. Noindex controls search indexing rather than directly preventing crawling. A crawler generally needs access to the page to discover its noindex instruction.

Can robots.txt replace a noindex directive?

No. Robots.txt primarily manages crawling access. If Google cannot crawl a URL, it may not see a noindex directive on that page. Google also does not support using a noindex rule inside robots.txt.

What is the difference between noindex and nofollow?

Noindex instructs compatible search engines not to include the page in search results. Nofollow instructs them not to follow links on that page. They serve different purposes and can be combined when both instructions are intended.

Can an X-Robots-Tag cause a noindex issue?

Yes. A server can send X-Robots-Tag: noindex through an HTTP response header. This can affect indexing even if the page's HTML does not contain a noindex meta tag. Review both signals when diagnosing unexpected exclusions.

How do I remove noindex from a WordPress page?

Review WordPress search visibility settings, the page's SEO plugin options, and any site-wide or post-type defaults. If noindex is coming from a response header or custom code, the source must be corrected there. Recheck the live page after publishing changes.

Does removing noindex guarantee that a page will be indexed?

No. Removing an unintended restriction makes the page eligible for indexing if it meets the search engine's requirements, but indexing is not guaranteed. Accessibility, content, canonical signals, and other technical factors can also affect the outcome.

Can noindex be used to protect confidential information?

No. Noindex is not a security feature and does not stop visitors from accessing a public URL. Protect confidential information with authentication, authorization, or appropriate access restrictions.

Review Your Website's Indexing Signals With EnjoySEOs

Keeping track of noindex directives is an important part of technical SEO. An accidental exclusion can affect a page's ability to appear in organic search, while a correctly applied directive can help prevent selected pages from being included in search results.

Use the EnjoySEOs Noindex Checker to investigate noindex-related signals, review the configuration of important URLs, and identify areas that may need further inspection. For critical pages, verify the HTML, response headers, crawling access, and search engine indexing status before deciding what changes to make.