.seo-input-group { margin-bottom: 20px; }
.seo-label { display: block; font-weight: 600; margin-bottom: 8px; color: #1a202c; font-size: 14px; }
.seo-input, .seo-textarea { width: 100%; padding: 12px; border: 1px solid #cbd5e0; border-radius: 5px; font-size: 15px; box-sizing: border-box; }
.seo-textarea { height: 150px; resize: vertical; }
.seo-btn { background-color: #2271b1; color: white; border: none; padding: 12px 24px; border-radius: 4px; cursor: pointer; font-weight: 600; font-size: 15px; width: 100%; transition: background 0.2s; }
.seo-btn:hover { background-color: #135e96; }
.seo-results { margin-top: 25px; display: none; padding-top: 20px; border-top: 2px solid #edf2f7; }
.seo-stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-bottom: 20px; }
.seo-stat-card { background: #f8fafc; padding: 15px; border-radius: 6px; border-left: 4px solid #2271b1; }
.seo-stat-val { display: block; font-size: 24px; font-weight: 700; color: #2d3748; }
.seo-stat-label { font-size: 12px; color: #718096; text-transform: uppercase; letter-spacing: 0.05em; }
.seo-score-good { color: #38a169; }
.seo-score-warn { color: #dd6b20; }
.seo-score-bad { color: #e53e3e; }
.keyword-table { width: 100%; border-collapse: collapse; margin-top: 10px; }
.keyword-table th, .keyword-table td { text-align: left; padding: 10px; border-bottom: 1px solid #edf2f7; font-size: 14px; }
function updateLiveCounts() {
var title = document.getElementById('seo_title').value;
var desc = document.getElementById('seo_desc').value;
var tCount = title.length;
var dCount = desc.length;
var tUi = document.getElementById('title_count_ui');
var dUi = document.getElementById('desc_count_ui');
tUi.innerHTML = 'Characters: ' + tCount + ' / 60';
tUi.style.color = (tCount > 60 || tCount 160 || dCount < 120) ? '#e53e3e' : '#38a169';
}
function runSeoAnalysis() {
var bodyText = document.getElementById('seo_body').value;
if (!bodyText) { alert('Please enter some content to analyze.'); return; }
var resultsArea = document.getElementById('seo_results_area');
resultsArea.style.display = 'block';
var words = bodyText.toLowerCase().match(/\b(\w+)\b/g);
var wordCount = words ? words.length : 0;
document.getElementById('res_word_count').innerHTML = wordCount;
document.getElementById('res_read_time').innerHTML = Math.ceil(wordCount / 225) + 'm';
var freqMap = {};
var stopWords = ['the', 'and', 'a', 'to', 'of', 'is', 'in', 'it', 'you', 'that', 'this', 'for', 'with', 'on', 'are', 'as', 'be', 'at', 'by'];
for (var i = 0; i < words.length; i++) {
var word = words[i];
if (word.length -1) continue;
freqMap[word] = (freqMap[word] || 0) + 1;
}
var sortedWords = [];
for (var key in freqMap) {
sortedWords.push([key, freqMap[key]]);
}
sortedWords.sort(function(a, b) { return b[1] – a[1]; });
var tableBody = document.getElementById('keyword_density_body');
tableBody.innerHTML = ";
var topLimit = Math.min(sortedWords.length, 8);
var warningFlag = false;
for (var j = 0; j 3.5) warningFlag = true;
var row = '' + kw + ' ' + count + ' ' + density + '% ';
tableBody.innerHTML += row;
}
var statusEl = document.getElementById('res_density_status');
if (warningFlag) {
statusEl.innerHTML = 'Stuffing?';
statusEl.className = 'seo-stat-val seo-score-bad';
} else {
statusEl.innerHTML = 'Optimal';
statusEl.className = 'seo-stat-val seo-score-good';
}
window.scrollTo({
top: resultsArea.offsetTop + 100,
behavior: 'smooth'
});
}
On-Page SEO Content Analyzer
Characters: 0 / 60
Characters: 0 / 160
0
Word Count
0m
Reading Time
–
Keyword Health
Top Keyword Density
| Keyword | Occurrences | Density |
|---|