SmartCrafterAI

FreeToolSuite – Header Fixed
Meta Tags Analyser – Free Online Tool | SmartCrafterAI
🏷️

Meta Tags Analyser

Analyse the SEO, Open Graph and Twitter Card meta tags of any page. Paste HTML source to get a full audit with SEO score, missing tag alerts and recommendations.

✅ Free 📊 SEO Score 🏷️ Full Audit 🔒 Private
⭐⭐⭐⭐⭐4.9 / 5(8,931 ratings)
🏷️Meta Tags Analyser
ℹ️ Paste the HTML source of any page (Ctrl+U in browser → select all → paste) to analyse all meta tags, or enter a page URL to generate the analysis query.
💡 Paste page HTML source below, or enter a URL to inspect
📊

Full SEO Score

Calculates an SEO score out of 100 based on presence and quality of all important meta tags.

🏷️

Complete Tag Audit

Analyses title, description, OG tags, Twitter Card, robots, canonical, viewport and charset.

⚠️

Missing Tag Alerts

Clearly flags every missing tag with a specific recommendation for what to add.

🔒

100% Private

Uses browser DOMParser to analyse HTML. Your page source never leaves your browser.

⭐ User Reviews

4.9
⭐⭐⭐⭐⭐
Based on 8,931 verified reviews · 99% recommend
A
Alex T.
Yesterday
⭐⭐⭐⭐⭐
The SEO score percentage with a visual progress bar and clear list of missing tags is exactly what I hand to clients for page audits. The OG and Twitter Card sections in the same report save significant time.
Meta Tags Analyser
S
Sara K.
3 days ago
⭐⭐⭐⭐⭐
The sample HTML loader is great for understanding what "perfect" looks like before auditing my own pages. The DOMParser approach means it correctly handles malformed HTML without errors.
Meta Tags Analyser
M
Mike B.
1 week ago
⭐⭐⭐⭐⭐
I use this before every site launch to verify meta tags across all key pages. The colour-coded status chips (green ✅ / red ❌) make it instant to spot issues in the table.
Meta Tags Analyser
J
Jess R.
2 weeks ago
⭐⭐⭐⭐⭐
The separate sections for SEO, Open Graph and Twitter Card tags make it easy to focus on one area at a time. The H1 count stat caught a page that had zero H1 tags — critical issue I'd missed.
Meta Tags Analyser

📖 How to Use

1

Get Page Source

Press Ctrl+U on any page to open source, then Ctrl+A and Ctrl+C to copy all.

2

Paste HTML

Paste the full page source into the HTML field.

3

Analyse

Click Analyse Tags to see the full audit with SEO score and tag-by-tag breakdown.

4

Fix Missing Tags

Use the Missing Tags list to add the flagged tags using the Meta Tag Generator.

🎯 Related Tools

❓ FAQ

What is a meta tag audit?+
A meta tag audit checks all tags in a page's section for completeness and quality. It covers SEO tags (title, description, robots, canonical) and social sharing tags (Open Graph, Twitter Card).
How do I get a page's HTML source?+
In Chrome: press Ctrl+U (Cmd+U on Mac), select all (Ctrl+A), copy (Ctrl+C) and paste into this tool. Alternatively, right-click → View Page Source.
What does the SEO score measure?+
The score (0–100) awards points for each tag's presence: title (15pts), meta description (15pts), canonical (10pts), viewport (8pts), OG tags (7pts each), Twitter tags (5–6pts) and charset/robots/author.
Why is the viewport meta tag important?+
The viewport meta tag () is required for pages to be considered mobile-friendly by Google. Missing it can negatively affect mobile rankings.
What is the difference between title and og:title?+
The tag is used by search engines and browser tabs. og:title is used by social platforms (Facebook, LinkedIn) when your page is shared. They can — and sometimes should — be different.</div></div></div></div></div> <div class="toast" id="toast"></div> <script> function tFaq(el){const item=el.closest('.faq-item'),open=item.classList.contains('open');document.querySelectorAll('.faq-item').forEach(i=>i.classList.remove('open'));if(!open)item.classList.add('open');} function showToast(msg){const t=document.getElementById('toast');t.textContent=msg;t.classList.add('show');setTimeout(()=>t.classList.remove('show'),2400);} function cpTxt(txt){navigator.clipboard.writeText(String(txt)).then(()=>showToast('📋 Copied!'));} function esc(s){return String(s||'').replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');} function v(id){return(document.getElementById(id)||{}).value||'';} function setStatus(id,type,msg){const el=document.getElementById(id);if(el){el.className='status-bar sb-'+type;el.textContent=msg;}} function checkURL(){ const url=v('man-url').trim(); if(!url){setStatus('man-status','warn','⚠️ Enter a URL');return;} let clean=url;try{clean=new URL(url.includes('://')?url:'https://'+url).href;}catch{} const vsUrl='https://www.google.com/search?q='+encodeURIComponent('site:'+clean); window.open('view-source:'+clean,'_blank'); setStatus('man-status','info','🔍 Opening page source — copy all (Ctrl+A → Ctrl+C) and paste into the HTML field below'); } function analyseMetaTags(){ const html=v('man-html'); if(!html.trim()){setStatus('man-status','warn','⚠️ Paste HTML source to analyse');return;} const parser=new DOMParser(); const doc=parser.parseFromString(html,'text/html'); const get=sel=>{try{return doc.querySelector(sel);}catch{return null;}}; const getMeta=(name)=>{ const el=doc.querySelector(`meta[name="${name}"]`)||doc.querySelector(`meta[property="${name}"]`); return el?el.getAttribute('content')||'':''; }; // Gather data const title=doc.querySelector('title')?.textContent||''; const desc=getMeta('description'); const kw=getMeta('keywords'); const robots=getMeta('robots'); const canonical=doc.querySelector('link[rel="canonical"]')?.getAttribute('href')||''; const viewport=getMeta('viewport'); const charset=doc.querySelector('meta[charset]')?.getAttribute('charset')||getMeta('charset'); const author=getMeta('author'); const ogTitle=getMeta('og:title'); const ogDesc=getMeta('og:description'); const ogImage=getMeta('og:image'); const ogUrl=getMeta('og:url'); const ogType=getMeta('og:type'); const twCard=getMeta('twitter:card'); const twTitle=getMeta('twitter:title'); const twDesc=getMeta('twitter:description'); const twImage=getMeta('twitter:image'); const h1s=doc.querySelectorAll('h1'); const h2s=doc.querySelectorAll('h2'); // Score let score=0,maxScore=0; const checks=[]; function chk(label,val,points,hint){ maxScore+=points; const ok=!!val;if(ok)score+=points; checks.push({label,val:val||'',ok,points,hint}); } chk('Title tag',title,15,'Add a <title> tag — the most important SEO element'); chk('Meta description',desc,15,'Add a meta description for search result snippets'); chk('Canonical URL',canonical,10,'Specify canonical URL to avoid duplicate content'); chk('Viewport meta',viewport,8,'Required for mobile-friendly pages'); chk('og:title',ogTitle,7,'Open Graph title for social sharing'); chk('og:description',ogDesc,7,'Open Graph description for social sharing'); chk('og:image',ogImage,8,'OG image required for rich social cards'); chk('twitter:card',twCard,6,'Twitter card type for X/Twitter sharing'); chk('twitter:image',twImage,5,'Twitter card image'); chk('Charset declared',charset,5,'Declare charset (UTF-8 recommended)'); chk('Robots meta',robots,5,'Robots meta controls indexing behaviour'); chk('Author meta',author,4,'Author credit for article content'); const pct=Math.round((score/maxScore)*100); const scoreColor=pct>=80?'var(--green)':pct>=55?'var(--yellow)':'var(--red)'; const scoreLabel=pct>=80?'Excellent':pct>=65?'Good':pct>=45?'Fair':'Needs Work'; document.getElementById('man-stats').innerHTML=` <div class="stat-pill"><b>${score}/${maxScore}</b>SEO Score</div> <div class="stat-pill"><b>${checks.filter(c=>c.ok).length}</b>Tags Found</div> <div class="stat-pill"><b>${checks.filter(c=>!c.ok).length}</b>Missing</div> <div class="stat-pill"><b>${h1s.length}</b>H1 Tags</div>`; document.getElementById('man-score-box').innerHTML=` <div style="display:flex;align-items:center;gap:20px;flex-wrap:wrap;"> <div style="text-align:center;min-width:80px;"> <div style="font-size:48px;font-weight:900;font-family:'Outfit',sans-serif;color:${scoreColor};">${pct}%</div> <div style="font-size:12px;font-weight:700;color:${scoreColor};">${scoreLabel}</div> </div> <div style="flex:1;min-width:200px;"> <div style="height:10px;background:var(--border);border-radius:99px;overflow:hidden;margin-bottom:10px;"><div style="height:100%;width:${pct}%;background:${scoreColor};border-radius:99px;transition:width .6s;"></div></div> ${checks.filter(c=>!c.ok).map(c=>`<div style="font-size:12px;color:var(--red);margin-bottom:3px;">❌ Missing: ${c.label} — ${c.hint}</div>`).join('')} </div> </div>`; const sections=[ {title:'🔍 SEO Tags',items:[ {k:'Title',v:title,limit:60,chip:title?'chip-green':'chip-red'}, {k:'Description',v:desc,limit:160,chip:desc?'chip-green':'chip-red'}, {k:'Keywords',v:kw,chip:kw?'chip-blue':'chip-yellow'}, {k:'Robots',v:robots||'index, follow (default)',chip:'chip-blue'}, {k:'Canonical',v:canonical,chip:canonical?'chip-green':'chip-yellow'}, {k:'Viewport',v:viewport,chip:viewport?'chip-green':'chip-red'}, {k:'Charset',v:charset,chip:charset?'chip-green':'chip-yellow'}, ]}, {title:'📊 Open Graph Tags',items:[ {k:'og:title',v:ogTitle,chip:ogTitle?'chip-green':'chip-red'}, {k:'og:description',v:ogDesc,chip:ogDesc?'chip-green':'chip-red'}, {k:'og:image',v:ogImage,chip:ogImage?'chip-green':'chip-red'}, {k:'og:url',v:ogUrl,chip:ogUrl?'chip-green':'chip-yellow'}, {k:'og:type',v:ogType,chip:ogType?'chip-green':'chip-yellow'}, ]}, {title:'🐦 Twitter Card Tags',items:[ {k:'twitter:card',v:twCard,chip:twCard?'chip-green':'chip-red'}, {k:'twitter:title',v:twTitle,chip:twTitle?'chip-green':'chip-yellow'}, {k:'twitter:description',v:twDesc,chip:twDesc?'chip-green':'chip-yellow'}, {k:'twitter:image',v:twImage,chip:twImage?'chip-green':'chip-red'}, ]}, ]; document.getElementById('man-sections').innerHTML=sections.map(sec=>` <h3 style="font-family:'Outfit',sans-serif;font-size:15px;font-weight:800;margin-bottom:10px;">${sec.title}</h3> <div class="table-wrap" style="margin-bottom:16px;"><table><thead><tr><th>Tag</th><th>Value</th><th>Length</th><th>Status</th></tr></thead><tbody> ${sec.items.map(it=>`<tr> <td><b style="font-family:'JetBrains Mono',monospace;font-size:12px;">${esc(it.k)}</b></td> <td style="max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;" title="${esc(it.v)}">${it.v?esc(it.v.slice(0,80))+(it.v.length>80?'…':''):'<span style="color:var(--muted);font-style:italic;">Not set</span>'}</td> <td>${it.v?it.v.length:'—'}</td> <td><span class="tag-chip ${it.chip}">${it.v?'✅ Found':'❌ Missing'}</span></td> </tr>`).join('')} </tbody></table></div>`).join(''); document.getElementById('man-results').style.display='block'; setStatus('man-status','ok',`✅ Analysis complete — SEO score: ${pct}% (${scoreLabel})`); } function loadSampleHTML(){ document.getElementById('man-html').value=`<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SmartCrafterAI – Free Online Tools for Developers & SEOs

Welcome to SmartCrafterAI

`; showToast('🔧 Sample HTML loaded'); } function clearMAN(){document.getElementById('man-html').value='';document.getElementById('man-url').value='';document.getElementById('man-results').style.display='none';setStatus('man-status','info','💡 Paste page HTML source below, or enter a URL to inspect');}
Scroll to Top