Free Meta Title & Description Checker

Craft SEO-optimized meta tags. Preview website search results on desktop and mobile dynamically with built-in character limit alerts.

📊 Metadata Length Statistics

0 Title Characters
0 Description Characters
Optimal Check SEO Status

⚙️ Metadata Input

0 / 60 chars
0 / 160 chars

📋 Google SERP Preview

https://example.com/blog-post-url
Page Title Preview...
Description preview text will display here...

Metadata Previewer Features

Useful optimizations to raise organic click-through ratios on search engine page listings

📱

Cross-Device Snippets

Switches between desktop and mobile previews, showing exactly how snippets adjust on different viewports.

📏

Character & Pixel Checks

Integrates progress indicators that highlight red when text exceeds search engine display limits.

🎯

Organic CTR Audit

Aids copywriters in planning titles and description tag limits to maximize page click-through ratios.

SEO Tag Length Standards

Target these standard dimensions to ensure search engines do not truncate titles

🎓 Meta Title (50-60 Chars)
Keep page titles under 60 characters or ~600 pixels. Place principal keyword phrases at the beginning of titles.
📰 Meta Description (120-160 Chars)
Optimal size is between 120 and 160 characters. Provide clear call-to-actions (CTAs) explaining why users should click.
⚙️ URL & Slug Structures
Use short, clean, descriptive lowercase slugs separated by hyphens. Exclude stop words ("a", "the", "and").
💡 SERP Snippet Truncation
When tags are too long, Google appends ellipses ("...") to the text, hiding important information from searchers.

The Science of Google SERP Snippet Optimization

Discover how optimizing page meta tags helps boost rankings and raise search page CTR

When a user searches for answers on Google, Bing, or Yahoo, the first point of contact with your website is the organic search snippet. This snippet consists of a page title, an navigation URL path, and a meta description. Writing click-worthy metadata is an essential skill in Search Engine Optimization (SEO). A **meta title and description checker** serves as a vital audit tool to ensure listings display beautifully across devices.

Optimizing Meta Titles for Maximum CTR

The Page Title tag (``) is one of the most critical on-page SEO ranking factors. It tells search crawlers what the page is about. To prevent Google from cutting off your title in search results, keep it under 60 characters. Search engines actually measure titles in pixels (~600px maximum width), meaning wide letters like "W" or "M" occupy more space than "I" or "T". Placing your primary keyword early in the title increases search relevancy and user trust.</p> <h3 style="color:#1f2937; font-size:1.15rem; margin:1.5rem 0 0.75rem;">Crafting Compelling Meta Descriptions</h3> <p style="margin-bottom:1rem;">While meta descriptions do not directly affect Google rankings, they are directly responsible for driving clicks. Think of the description as a mini-ad for your page. The optimal description size is between 120 and 160 characters. An effective description must summarize the page content, include target keywords, and end with a persuasive call to action such as "Read our guide here" or "Try our free tool today."</p> <p>Use our local checker to optimize site listings privately and instantly in your web browser.</p> </div> </div> </section> </div> </main> <!-- Footer --> <footer class="footer"> <div class="container"> <div class="footer-content"> <div class="footer-logo"> <div class="logo-icon">📝</div> <h3>Count Word Count</h3> </div> <div class="footer-links"> <a href="https://countwordcount.com/privacy-policy.html">Privacy Policy</a> <a href="https://countwordcount.com/about-us.html">About Us</a> <a href="https://countwordcount.com/about-us.html#support">Contact</a> <a href="https://countwordcount.com/terms.html">Terms & Conditions</a> </div> <p class="footer-description">Free online text tools for writers, developers, students and content creators.</p> <p class="footer-copyright">© <span id="cwc-year"></span> CountWordCount.com. All rights reserved.</p> </div> </div> </footer> <script> document.getElementById('cwc-year').textContent = new Date().getFullYear(); // Mobile navbar const openNav = () => { document.getElementById('mobileNav').classList.add('active'); document.body.style.overflow = 'hidden'; }; const closeNav = () => { document.getElementById('mobileNav').classList.remove('active'); document.body.style.overflow = ''; }; document.getElementById('mobileMenuBtn')?.addEventListener('click', openNav); document.getElementById('mobileNavClose')?.addEventListener('click', closeNav); document.getElementById('mobileNavOverlay')?.addEventListener('click', closeNav); const inputTitle = document.getElementById('metaTitle'); const inputDesc = document.getElementById('metaDesc'); const inputUrl = document.getElementById('metaUrl'); const previewTitle = document.getElementById('previewTitle'); const previewUrl = document.getElementById('previewUrl'); const previewDesc = document.getElementById('previewDesc'); const tabDesktop = document.getElementById('tabDesktop'); const tabMobile = document.getElementById('tabMobile'); const previewBox = document.getElementById('previewBox'); let isMobile = false; function updatePreview() { const titleVal = inputTitle.value || "Please Enter a Page Title"; const descVal = inputDesc.value || "Please enter a descriptive search summary to preview meta descriptions..."; let urlVal = inputUrl.value || "example.com"; if (!urlVal.startsWith("http")) urlVal = "https://" + urlVal; const titleLen = titleVal.length; const descLen = descVal.length; document.getElementById('titleCharCount').textContent = titleLen + " / 60 chars"; document.getElementById('descCharCount').textContent = descLen + " / 160 chars"; const titleBar = document.getElementById('titleProgress'); const descBar = document.getElementById('descProgress'); titleBar.style.width = Math.min(100, (titleLen/60)*100) + '%'; descBar.style.width = Math.min(100, (descLen/160)*100) + '%'; if (titleLen >= 50 && titleLen <= 60) titleBar.style.backgroundColor = "#10b981"; else if (titleLen > 60) titleBar.style.backgroundColor = "#ef4444"; else titleBar.style.backgroundColor = "#f59e0b"; if (descLen >= 120 && descLen <= 160) descBar.style.backgroundColor = "#10b981"; else if (descLen > 160) descBar.style.backgroundColor = "#ef4444"; else descBar.style.backgroundColor = "#f59e0b"; previewTitle.textContent = titleVal; previewUrl.textContent = urlVal; let maxTitleLen = isMobile ? 55 : 60; let maxDescLen = isMobile ? 120 : 160; previewTitle.textContent = titleVal.length > maxTitleLen ? titleVal.substring(0, maxTitleLen) + "..." : titleVal; previewDesc.textContent = descVal.length > maxDescLen ? descVal.substring(0, maxDescLen) + "..." : descVal; document.getElementById('totTitleChars').textContent = titleLen; document.getElementById('totDescChars').textContent = descLen; let seoStatus = "Needs Attention"; if (titleLen >= 50 && titleLen <= 60 && descLen >= 120 && descLen <= 160) { seoStatus = "Optimal SEO! ✅"; } document.getElementById('seoQuality').textContent = seoStatus; } [inputTitle, inputDesc, inputUrl].forEach(el => { el.addEventListener('input', updatePreview); }); tabDesktop.addEventListener('click', () => { isMobile = false; tabDesktop.classList.add('active'); tabMobile.classList.remove('active'); previewBox.style.maxWidth = "600px"; updatePreview(); }); tabMobile.addEventListener('click', () => { isMobile = true; tabMobile.classList.add('active'); tabDesktop.classList.remove('active'); previewBox.style.maxWidth = "360px"; updatePreview(); }); updatePreview(); const copyBtn = document.getElementById('copyBtn'); copyBtn.addEventListener('click', () => { const report = `Page Title: ${inputTitle.value}\nMeta Description: ${inputDesc.value}\nURL: ${inputUrl.value}`; navigator.clipboard.writeText(report).then(() => { const svg = copyBtn.querySelector('svg').outerHTML; copyBtn.innerHTML = svg + ' Copied!'; copyBtn.classList.add('copy-success'); setTimeout(() => { copyBtn.innerHTML = svg + ' Copy'; copyBtn.classList.remove('copy-success'); }, 2000); }); }); // Scroll reveal header (function() { let lastScrollY = window.scrollY; const headerEl = document.querySelector('.header'); if (headerEl) { window.addEventListener('scroll', () => { if (window.scrollY > lastScrollY && window.scrollY > 80) { headerEl.style.transform = 'translate(-50%, -100px)'; } else { headerEl.style.transform = 'translate(-50%, 0)'; } lastScrollY = window.scrollY; }); } })(); </script> </body> </html>