SEO Content & Meta Analyzer
Characters
0
Words
0
Keyword Density
0%
Start typing to see SEO recommendations.
function analyzeSEO() {
var content = document.getElementById('seoContent').value;
var keyword = document.getElementById('targetKeyword').value.toLowerCase();
var charCount = content.length;
var words = content.trim().split(/\s+/).filter(function(w) { return w.length > 0; });
var wordCount = words.length;
document.getElementById('charCount').innerText = charCount;
document.getElementById('wordCount').innerText = wordCount;
var density = 0;
if (wordCount > 0 && keyword.length > 0) {
var regex = new RegExp(keyword, 'gi');
var matches = content.match(regex);
var count = matches ? matches.length : 0;
density = (count / wordCount) * 100;
}
document.getElementById('densityVal').innerText = density.toFixed(2) + '%';
var feedback = document.getElementById('seoFeedback');
var messages = [];
if (charCount > 0 && charCount < 120) messages.push("• Meta Tip: Content is a bit short for a Meta Description (Aim for 120-160).");
if (charCount > 160) messages.push("• Meta Warning: Text exceeds 160 characters and may be truncated in SERPs.");
if (density > 0 && density < 0.5) messages.push("• Density Tip: Keyword usage is low. Consider natural placement.");
if (density > 2.5) messages.push("• SEO Warning: Keyword density is high (" + density.toFixed(1) + "%). Avoid keyword stuffing.");
if (wordCount > 300) messages.push("• Content Check: Good length for a focused blog snippet.");
if (messages.length === 0 && charCount > 0) {
feedback.innerHTML = "✓ Content length and density look optimal for search engines.";
feedback.style.backgroundColor = "#f0fdf4";
feedback.style.color = "#166534";
feedback.style.borderColor = "#dcfce7";
} else if (charCount === 0) {
feedback.innerHTML = "Start typing to see SEO recommendations.";
feedback.style.backgroundColor = "#f8fafc";
feedback.style.color = "#475569";
} else {
feedback.innerHTML = messages.join(""); feedback.style.backgroundColor = "#fffbeb"; feedback.style.color = "#92400e"; feedback.style.borderColor = "#fef3c7″; } } function resetSEOAnalyzer() { document.getElementById('seoContent').value = "; document.getElementById('targetKeyword').value = "; analyzeSEO(); }