Design Blast

#db-kdc { --blue:#1769e0; --navy:#102a56; --ink:#182230; --muted:#667085; --line:#e4e9f1; --soft:#f5f8fc; font-family:Inter,Arial,sans-serif; color:var(--ink); max-width:1100px; margin:0 auto; font-size:15px; } #db-kdc * {box-sizing:border-box} #db-kdc .kdc-card { background:#fff; border:1px solid var(--line); border-radius:16px; padding:24px; margin-bottom:18px; box-shadow:0 5px 24px rgba(16,42,86,.045); } #db-kdc .kdc-head {margin-bottom:22px} #db-kdc .kdc-eyebrow { color:var(--blue); font-size:12px; font-weight:800; letter-spacing:1.4px; text-transform:uppercase; margin-bottom:8px; } #db-kdc h2,#db-kdc h3 {color:var(--navy); margin:0 0 8px; line-height:1.3} #db-kdc h2 {font-size:27px} #db-kdc h3 {font-size:18px} #db-kdc p {color:var(--muted); line-height:1.65; margin:0} #db-kdc label { display:block; font-weight:700; font-size:13px; margin:0 0 8px; color:#344054; } #db-kdc textarea,#db-kdc input { width:100%; border:1px solid #d5dce7; border-radius:9px; padding:12px 13px; font:inherit; color:var(--ink); background:#fff; outline:none; min-width:0; } #db-kdc textarea {min-height:250px; resize:vertical; line-height:1.65} #db-kdc textarea:focus,#db-kdc input:focus { border-color:var(--blue); box-shadow:0 0 0 3px rgba(23,105,224,.1); } #db-kdc .kdc-field {margin-bottom:18px} #db-kdc .kdc-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; } #db-kdc .kdc-actions {display:flex; flex-wrap:wrap; gap:10px; margin-top:16px} #db-kdc button { border:1px solid transparent; border-radius:9px; padding:12px 17px; font:inherit; font-size:14px; font-weight:700; cursor:pointer; transition:background .15s ease; } #db-kdc .kdc-primary {background:var(--blue); color:white} #db-kdc .kdc-primary:hover {background:#1056bd} #db-kdc .kdc-secondary {background:#fff; color:var(--navy); border-color:#d5dce7} #db-kdc .kdc-secondary:hover {background:var(--soft)} #db-kdc button:focus-visible {outline:3px solid #8ab8ff; outline-offset:2px} #db-kdc .kdc-hint {font-size:12px; margin-top:7px} #db-kdc .kdc-stats { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; margin-bottom:18px; } #db-kdc .kdc-stat { border:1px solid var(--line); border-radius:12px; padding:17px; background:var(--soft); min-width:0; } #db-kdc .kdc-stat span {display:block; font-size:12px; color:var(--muted); margin-bottom:7px} #db-kdc .kdc-stat strong {font-size:25px; color:var(--navy); overflow-wrap:anywhere} #db-kdc .kdc-result-head { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-bottom:15px; } #db-kdc .kdc-scroll {overflow-x:auto; width:100%} #db-kdc table {width:100%; border-collapse:collapse; min-width:390px; font-size:14px} #db-kdc th,#db-kdc td { text-align:left; padding:12px 10px; border-bottom:1px solid var(--line); } #db-kdc th {color:#475467; font-size:12px; background:var(--soft)} #db-kdc td:last-child,#db-kdc th:last-child {text-align:right} #db-kdc .kdc-empty {padding:20px; border:1px dashed #d5dce7; border-radius:10px; color:var(--muted); text-align:center} #db-kdc .kdc-badge { display:inline-block; padding:5px 8px; border-radius:6px; background:#eaf2ff; color:#1556b4; font-size:12px; font-weight:700; } #db-kdc .kdc-note {font-size:12px; margin-top:12px} #db-kdc [hidden] {display:none!important} @media(max-width:650px) { #db-kdc .kdc-card {padding:17px} #db-kdc h2 {font-size:23px} #db-kdc .kdc-grid {grid-template-columns:1fr; gap:0} #db-kdc .kdc-stats {grid-template-columns:repeat(2,minmax(0,1fr))} #db-kdc .kdc-stat {padding:13px} #db-kdc .kdc-stat strong {font-size:22px} #db-kdc .kdc-actions button {flex:1 1 auto} }
Free SEO Tool

Keyword Density Checker

Analyze your content, discover frequently used keywords, and check how often your target phrase appears. Your text is analyzed in your browser.

Tip: Copy the main text of your page. Navigation menus and footers can affect the results if included.

Separate words with commas.

(function () { const root = document.getElementById('db-kdc'); if (!root || root.dataset.ready === '1') return; root.dataset.ready = '1';const $ = id => root.querySelector('#db-kdc-' + id); const stopWords = new Set(( 'a an the and or but if then than so because as of at by for from in into on onto ' + 'to up with without is am are was were be been being do does did have has had ' + 'i me my we our you your he she it they them this that these those not no yes ' + 'can could should would will just also very more most some any all each other ' + 'about over under after before between during through out off again further once ' + 'here there when where why how what which who whom whose while both few many ' + 'much own same such only too s t d ll m re ve y www com https http' ).split(/\s+/));let report = null;function tokenize(text) { const matches = text.toLocaleLowerCase().match(/[\p{L}\p{N}]+(?:['’][\p{L}\p{N}]+)*/gu); return matches || []; }function countPhrases(tokens, size, exclusions) { const counts = new Map(); for (let i = 0; i exclusions.has(w))) continue; const phrase = phraseWords.join(' '); counts.set(phrase, (counts.get(phrase) || 0) + 1); } return [...counts.entries()] .filter(([, count]) => count >= 2) .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])) .slice(0, 20); }function escapeHTML(value) { return String(value).replace(/[&"']/g, ch => ({ '&':'&', '':'>', '"':'"', "'":''' })[ch]); }function percent(value) { return (Math.round(value * 100) / 100).toFixed(2) + '%'; }function renderTable(container, rows, firstHeading) { if (!rows.length) { container.innerHTML = '
No repeated terms found for this section.
'; return; } container.innerHTML = '' + rows.map(row => '' ).join('') + '
' + firstHeading + 'OccurrencesDensity
' + escapeHTML(row[0]) + '' + row[1] + '' + percent(row[1] / report.wordCount * 100) + '
'; }function analyze() { const text = $('text').value.trim(); if (!text) { $('status').textContent = 'Paste some content before analyzing.'; $('results').hidden = true; return; }const tokens = tokenize(text); if (!tokens.length) { $('status').textContent = 'No readable words were found. Try adding plain text.'; $('results').hidden = true; return; }const customWords = $('exclude').value.toLocaleLowerCase() .split(/[\s,;]+/).filter(Boolean); const exclusions = new Set([...stopWords, ...customWords]); const counts = new Map(); tokens.forEach(word => { if (!exclusions.has(word)) counts.set(word, (counts.get(word) || 0) + 1); });const keywords = [...counts.entries()] .sort((a,b) => b[1] - a[1] || a[0].localeCompare(b[0])) .slice(0, 30);const bigrams = countPhrases(tokens, 2, new Set(customWords)); const trigrams = countPhrases(tokens, 3, new Set(customWords)); const target = tokenize($('target').value); let occurrences = 0;if (target.length) { for (let i = 0; i tokens[i + j] === word)) occurrences++; } }report = { wordCount: tokens.length, uniqueCount: new Set(tokens).size, characters: text.length, readingMinutes: Math.max(1, Math.ceil(tokens.length / 200)), target: target.join(' '), targetWords: target.length, occurrences, keywords, bigrams, trigrams };$('words').textContent = report.wordCount.toLocaleString(); $('unique').textContent = report.uniqueCount.toLocaleString(); $('chars').textContent = report.characters.toLocaleString(); $('reading').textContent = report.readingMinutes + ' min';$('target-label').textContent = target.length ? report.target : 'No target set'; $('target-empty').hidden = !!target.length; $('target-data').hidden = !target.length;if (target.length) { $('occurrences').textContent = occurrences.toLocaleString(); $('density').textContent = percent(occurrences / tokens.length * 100); $('phrasewords').textContent = target.length; $('share').textContent = percent(occurrences * target.length / tokens.length * 100); }renderTable($('keywords'), keywords.map(([word, count]) => [ word, count ]), 'Keyword'); renderTable($('bigrams'), bigrams, '2-word phrase'); renderTable($('trigrams'), trigrams, '3-word phrase');$('results').hidden = false; $('status').textContent = 'Analysis complete. ' + report.wordCount + ' words analyzed.'; }function csvCell(value) { return '"' + String(value).replace(/"/g, '""') + '"'; }function downloadCSV() { if (!report) return; const rows = [ ['Section','Keyword or phrase','Occurrences','Density'], ...report.keywords.map(([word,count]) => ['Single keyword',word,count,percent(count/report.wordCount*100)]), ...report.bigrams.map(([phrase,count]) => ['2-word phrase',phrase,count,percent(count/report.wordCount*100)]), ...report.trigrams.map(([phrase,count]) => ['3-word phrase',phrase,count,percent(count/report.wordCount*100)]) ]; if (report.target) { rows.splice(1, 0, ['Target keyword',report.target,report.occurrences, percent(report.occurrences/report.wordCount*100)]); } rows.push([]); rows.push(['Total words',report.wordCount]); rows.push(['Unique words',report.uniqueCount]); rows.push(['Characters',report.characters]); rows.push(['Estimated reading time',report.readingMinutes + ' minutes']);const csv = '\uFEFF' + rows.map(row => row.map(csvCell).join(',')).join('\r\n'); const url = URL.createObjectURL(new Blob([csv], {type:'text/csv;charset=utf-8;'})); const link = document.createElement('a'); link.href = url; link.download = 'design-blast-keyword-density-report.csv'; document.body.appendChild(link); link.click(); link.remove(); setTimeout(() => URL.revokeObjectURL(url), 1000); }function summaryText() { if (!report) return ''; return [ 'Keyword Density Checker - Design Blast', 'Total words: ' + report.wordCount, 'Unique words: ' + report.uniqueCount, 'Characters: ' + report.characters, 'Estimated reading time: ' + report.readingMinutes + ' min', report.target ? 'Target keyword: ' + report.target : 'Target keyword: not set', report.target ? 'Occurrences: ' + report.occurrences : '', report.target ? 'Density: ' + percent(report.occurrences/report.wordCount*100) : '', '', 'Top keywords:', ...report.keywords.slice(0,10).map(([word,count]) => word + ' — ' + count + ' occurrences (' + percent(count/report.wordCount*100) + ')') ].filter(line => line !== '').join('\n'); }async function copySummary() { if (!report) return; const value = summaryText(); try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(value); } else { const temp = document.createElement('textarea'); temp.value = value; temp.style.position = 'fixed'; temp.style.opacity = '0'; root.appendChild(temp); temp.select(); const ok = document.execCommand('copy'); temp.remove(); if (!ok) throw new Error('Copy unavailable'); } $('status').textContent = 'Summary copied.'; } catch (err) { $('status').textContent = 'Copy was blocked by your browser. Use the CSV download instead.'; } }$('analyze').addEventListener('click', analyze); $('csv').addEventListener('click', downloadCSV); $('copy').addEventListener('click', copySummary);$('sample').addEventListener('click', function () { $('text').value = 'Design Blast provides SEO services in Mumbai to help businesses improve search visibility. ' + 'Our SEO services in Mumbai include technical SEO, keyword research, on-page SEO and content strategy. ' + 'With a clear SEO strategy, businesses can improve their website content and attract relevant visitors. ' + 'Design Blast helps businesses improve website performance, search visibility and organic growth. ' + 'Our SEO services in Mumbai focus on useful content, relevant keywords and a better website experience.'; $('target').value = 'SEO services in Mumbai'; analyze(); });$('reset').addEventListener('click', function () { $('text').value = ''; $('target').value = ''; $('exclude').value = ''; $('results').hidden = true; $('status').textContent = ''; report = null; }); })();