function runSeoAudit() {
var title = document.getElementById('seoTitle').value;
var body = document.getElementById('seoBody').value;
var keyword = document.getElementById('seoKeyword').value.toLowerCase();
var resultsArea = document.getElementById('seoResultsArea');
var auditList = document.getElementById('auditList');
var scoreVal = document.getElementById('scoreVal');
var score = 0;
var listHtml = ";
resultsArea.style.display = 'block';
auditList.innerHTML = ";
// Title Length Check
if (title.length >= 50 && title.length <= 60) {
score += 30;
listHtml += '
✅ Title length is perfect for Google SERPs.
';
} else {
listHtml += '
❌ Title should be between 50-60 characters (Current: ' + title.length + ').
';
}
// Keyword in Title Check
if (keyword !== "" && title.toLowerCase().includes(keyword)) {
score += 20;
listHtml += '
✅ Target keyword found in title.
';
} else if (keyword !== "") {
listHtml += '
❌ Target keyword not found in title.
';
}
// Body Keyword Density
if (keyword !== "" && body !== "") {
var regex = new RegExp(keyword, 'gi');
var count = (body.match(regex) || []).length;
var words = body.split(/\s+/).length;
var density = (count / words) * 100;
if (density > 0.5 && density < 2.5) {
score += 30;
listHtml += '
✅ Keyword density is optimal (' + density.toFixed(2) + '%).
';
} else {
listHtml += '
⚠️ Keyword density (' + density.toFixed(2) + '%) is ' + (density > 2.5 ? 'too high (spammy).' : 'too low.') + '
';
}
}
// Word Count Check
var wordCount = body.trim() === "" ? 0 : body.trim().split(/\s+/).length;
if (wordCount >= 300) {
score += 20;
listHtml += '