Filed by Will Tygart
• Tacoma, WA
• Industry Bulletin
AI systems select sources based on information density — the ratio of unique, verifiable claims to filler text. Most content fails this test. We found that 16 AI models unanimously agree on what makes content worth citing, and it comes down to density.
This tool analyzes your text in real-time and produces 8 metrics including unique concepts per 100 words, claim density, filler ratio, and actionable insight score. It also generates a paragraph-by-paragraph heatmap showing exactly where your content is dense and where it’s fluff.
Paste your article text below and see how your content measures up against AI-citable benchmarks.
Information Density Analyzer: Is Your Content Dense Enough for AI?
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, ‘Segoe UI’, Roboto, ‘Helvetica Neue’, Arial, sans-serif;
background: linear-gradient(135deg, #0f172a 0%, #1a2551 100%);
color: #e5e7eb;
min-height: 100vh;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
header {
text-align: center;
margin-bottom: 40px;
animation: slideDown 0.6s ease-out;
}
h1 {
font-size: 2.5rem;
background: linear-gradient(135deg, #3b82f6, #10b981);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 10px;
font-weight: 700;
}
.subtitle {
font-size: 1.1rem;
color: #9ca3af;
}
.input-section {
background: rgba(15, 23, 42, 0.8);
border: 1px solid rgba(59, 130, 246, 0.2);
border-radius: 12px;
padding: 40px;
margin-bottom: 30px;
backdrop-filter: blur(10px);
animation: fadeIn 0.8s ease-out;
}
.textarea-group {
margin-bottom: 20px;
}
.textarea-label {
display: block;
margin-bottom: 12px;
font-weight: 600;
font-size: 1.05rem;
color: #e5e7eb;
}
textarea {
width: 100%;
min-height: 250px;
padding: 15px;
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(59, 130, 246, 0.2);
border-radius: 8px;
color: #e5e7eb;
font-family: inherit;
font-size: 0.95rem;
resize: vertical;
transition: all 0.3s ease;
}
textarea:focus {
outline: none;
border-color: rgba(59, 130, 246, 0.5);
background: rgba(59, 130, 246, 0.05);
}
.button-group {
display: flex;
gap: 15px;
margin-top: 20px;
flex-wrap: wrap;
}
button {
padding: 12px 30px;
border: none;
border-radius: 8px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
font-size: 1rem;
}
.btn-primary {
background: linear-gradient(135deg, #3b82f6, #2563eb);
color: white;
flex: 1;
min-width: 200px;
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px rgba(59, 130, 246, 0.3);
}
.btn-secondary {
background: rgba(59, 130, 246, 0.1);
color: #3b82f6;
border: 1px solid rgba(59, 130, 246, 0.3);
}
.btn-secondary:hover {
background: rgba(59, 130, 246, 0.2);
transform: translateY(-2px);
}
.results-section {
display: none;
animation: fadeIn 0.8s ease-out;
}
.results-section.visible {
display: block;
}
.content-section {
background: rgba(15, 23, 42, 0.8);
border: 1px solid rgba(59, 130, 246, 0.2);
border-radius: 12px;
padding: 40px;
margin-bottom: 30px;
backdrop-filter: blur(10px);
}
.density-score {
text-align: center;
margin-bottom: 40px;
padding: 40px;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(16, 185, 129, 0.1));
border-radius: 12px;
}
.score-number {
font-size: 4rem;
font-weight: 700;
background: linear-gradient(135deg, #3b82f6, #10b981);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.score-label {
font-size: 1rem;
color: #9ca3af;
margin-top: 10px;
}
.gauge {
width: 100%;
height: 20px;
background: rgba(255, 255, 255, 0.05);
border-radius: 10px;
overflow: hidden;
margin: 20px 0;
}
.gauge-fill {
height: 100%;
background: linear-gradient(90deg, #ef4444, #f59e0b, #10b981);
border-radius: 10px;
transition: width 0.6s ease-out;
}
.metrics-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.metric-card {
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(59, 130, 246, 0.2);
border-radius: 8px;
padding: 20px;
text-align: center;
}
.metric-value {
font-size: 2rem;
font-weight: 700;
color: #3b82f6;
margin-bottom: 8px;
}
.metric-label {
font-size: 0.85rem;
color: #9ca3af;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.heatmap {
margin: 30px 0;
}
.heatmap-title {
font-size: 1.2rem;
font-weight: 600;
margin-bottom: 20px;
color: #e5e7eb;
}
.heatmap-legend {
display: flex;
gap: 20px;
margin-bottom: 20px;
flex-wrap: wrap;
}
.legend-item {
display: flex;
align-items: center;
gap: 8px;
font-size: 0.9rem;
}
.legend-color {
width: 20px;
height: 20px;
border-radius: 4px;
}
.paragraph {
background: rgba(255, 255, 255, 0.02);
border-left: 4px solid #ef4444;
padding: 15px;
margin-bottom: 12px;
border-radius: 4px;
font-size: 0.9rem;
line-height: 1.6;
color: #d1d5db;
}
.paragraph.dense {
border-left-color: #10b981;
}
.paragraph.moderate {
border-left-color: #f59e0b;
}
.insights {
background: rgba(16, 185, 129, 0.05);
border: 1px solid rgba(16, 185, 129, 0.2);
border-radius: 8px;
padding: 20px;
margin-top: 30px;
}
.insights h3 {
color: #10b981;
margin-bottom: 15px;
font-size: 1.1rem;
}
.insights p {
color: #d1d5db;
line-height: 1.6;
margin-bottom: 12px;
}
.comparison {
background: rgba(59, 130, 246, 0.05);
border: 1px solid rgba(59, 130, 246, 0.2);
border-radius: 8px;
padding: 20px;
margin-top: 20px;
}
.comparison h4 {
color: #3b82f6;
margin-bottom: 10px;
}
.comparison p {
color: #d1d5db;
font-size: 0.95rem;
line-height: 1.6;
}
.cta-link {
display: inline-block;
color: #3b82f6;
text-decoration: none;
font-weight: 600;
margin-top: 20px;
padding: 10px 0;
border-bottom: 2px solid rgba(59, 130, 246, 0.3);
transition: all 0.3s ease;
}
.cta-link:hover {
border-bottom-color: #3b82f6;
padding-right: 5px;
}
footer {
text-align: center;
padding: 30px;
color: #6b7280;
font-size: 0.85rem;
margin-top: 50px;
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@media (max-width: 768px) {
h1 {
font-size: 1.8rem;
}
.input-section,
.content-section {
padding: 25px;
}
.score-number {
font-size: 3rem;
}
textarea {
min-height: 200px;
}
.metrics-grid {
grid-template-columns: 1fr 1fr;
}
}
Powered by Tygart Media | tygartmedia.com
const fillerPhrases = [
‘it’s important to note’, ‘in today’s world’, ‘it goes without saying’,
‘as we all know’, ‘needless to say’, ‘at the end of the day’,
‘in conclusion’, ‘in fact’, ‘to be honest’, ‘basically’, ‘essentially’,
‘practically’, ‘quite frankly’, ‘let me be clear’, ‘obviously’,
‘clearly’, ‘simply put’, ‘as a matter of fact’
];
const actionVerbs = [
‘implement’, ‘deploy’, ‘configure’, ‘build’, ‘create’, ‘measure’,
‘test’, ‘optimize’, ‘develop’, ‘establish’, ‘execute’, ‘perform’,
‘analyze’, ‘evaluate’, ‘design’, ‘engineer’, ‘construct’, ‘establish’
];
function analyzeContent() {
const content = document.getElementById(‘contentInput’).value.trim();
if (!content) {
alert(‘Please paste your article text first.’);
return;
}
const analysis = performAnalysis(content);
displayResults(analysis);
}
function clearContent() {
document.getElementById(‘contentInput’).value = ”;
document.getElementById(‘resultsContainer’).classList.remove(‘visible’);
}
function performAnalysis(content) {
const sentences = content.match(/[^.!?]+[.!?]+/g) || [];
const paragraphs = content.split(/nn+/).filter(p => p.trim());
const words = content.toLowerCase().match(/bw+b/g) || [];
const wordCount = words.length;
const sentenceCount = sentences.length;
const avgSentenceLength = wordCount / sentenceCount;
// Unique concepts (words >4 chars appearing 1-2 times)
const wordFreq = {};
words.forEach(word => {
if (word.length > 4) {
wordFreq[word] = (wordFreq[word] || 0) + 1;
}
});
const uniqueConcepts = Object.values(wordFreq).filter(count => count {
if (numberRegex.test(sent)) claimCount++;
});
const claimDensity = (claimCount / sentenceCount) * 100;
// Filler ratio
let fillerCount = 0;
sentences.forEach(sent => {
if (fillerPhrases.some(phrase => sent.toLowerCase().includes(phrase))) {
fillerCount++;
}
});
const fillerRatio = (fillerCount / sentenceCount) * 100;
// Actionable insight score
let actionCount = 0;
sentences.forEach(sent => {
if (actionVerbs.some(verb => sent.toLowerCase().includes(verb))) {
actionCount++;
}
});
const actionScore = (actionCount / sentenceCount) * 100;
// Jargon density (rough estimate)
const jargonTerms = words.filter(word => word.length > 7).length;
const jargonDensity = (jargonTerms / wordCount) * 100;
// Overall density score
let densityScore = Math.round(
(conceptDensity * 0.25) +
(claimDensity * 0.25) +
((100 – fillerRatio) * 0.20) +
(actionScore * 0.20) +
(Math.min(jargonDensity, 15) * 0.10)
);
densityScore = Math.max(0, Math.min(100, densityScore));
// Analyze paragraphs
const paragraphAnalysis = paragraphs.map(para => {
const paraSentences = para.match(/[^.!?]+[.!?]+/g) || [];
const paraWords = para.toLowerCase().match(/bw+b/g) || [];
const paraNumbers = para.match(/d+|percent|%/g) || [];
const paraFiller = paraSentences.filter(sent =>
fillerPhrases.some(phrase => sent.toLowerCase().includes(phrase))
).length;
const density = (paraNumbers.length + paraWords.length / 10) / paraSentences.length;
const fillerPercent = (paraFiller / paraSentences.length) * 100;
let densityClass = ‘dense’;
if (fillerPercent > 30 || density 15 || density 150 ? ‘…’ : ”),
density: densityClass
};
});
return {
densityScore,
wordCount,
sentenceCount,
avgSentenceLength: avgSentenceLength.toFixed(1),
conceptDensity: conceptDensity.toFixed(1),
claimDensity: claimDensity.toFixed(1),
fillerRatio: fillerRatio.toFixed(1),
actionScore: actionScore.toFixed(1),
jargonDensity: jargonDensity.toFixed(1),
paragraphs: paragraphAnalysis
};
}
function displayResults(analysis) {
// Score
document.getElementById(‘densityScore’).textContent = analysis.densityScore;
document.getElementById(‘gaugeFill’).style.width = analysis.densityScore + ‘%’;
// Metrics
const metricsHTML = `
${analysis.wordCount}
Total Words
${analysis.sentenceCount}
Sentences
${analysis.avgSentenceLength}
Avg Sentence Length
${analysis.conceptDensity}%
Unique Concepts per 100W
${analysis.claimDensity}%
Claim Density
${analysis.fillerRatio}%
Filler Ratio
${analysis.actionScore}%
Action Verbs
${analysis.jargonDensity}%
Jargon Density
`;
document.getElementById(‘metricsGrid’).innerHTML = metricsHTML;
// Heatmap
const heatmapHTML = analysis.paragraphs
.map(para => `
${para.text}
`)
.join(”);
document.getElementById(‘heatmapContainer’).innerHTML = heatmapHTML;
// Insights
let likelihood;
if (analysis.densityScore >= 75) {
likelihood = ‘This content is highly likely to be selected as an AI source. You have excellent unique concept density, strong claim coverage, and minimal filler.’;
} else if (analysis.densityScore >= 60) {
likelihood = ‘This content has good density and will likely be cited by AI systems. Consider reducing filler phrases and increasing actionable insights.’;
} else if (analysis.densityScore >= 40) {
likelihood = ‘Your content is moderately dense. AI may cite specific sections, but overall improvement would help. Focus on claims, actions, and uniqueness.’;
} else {
likelihood = ‘This content lacks the density AI systems prefer. Too many filler phrases, weak claim coverage, and low concept variety reduce citation likelihood.’;
}
document.getElementById(‘aiLikelihood’).textContent = likelihood;
let benchmark;
if (analysis.fillerRatio > 20) {
benchmark = ‘Your filler ratio is above benchmark. AI-citable content typically has <15% filler phrases.';
} else if (analysis.claimDensity 8) {
benchmark = ‘Excellent unique concept density. This makes your content more likely to be selected as a source.’;
} else {
benchmark = ‘Your metrics align well with top-cited content benchmarks across most dimensions.’;
}
document.getElementById(‘benchmark’).textContent = benchmark;
document.getElementById(‘resultsContainer’).classList.add(‘visible’);
document.getElementById(‘resultsContainer’).scrollIntoView({ behavior: ‘smooth’ });
}
{
“@context”: “https://schema.org”,
“@type”: “Article”,
“headline”: “Information Density Analyzer: Is Your Content Dense Enough for AI?”,
“description”: “Paste your article text and get real-time analysis of information density, filler ratio, claim density, and AI-citability score.”,
“datePublished”: “2026-04-01”,
“dateModified”: “2026-04-03”,
“author”: {
“@type”: “Person”,
“name”: “Will Tygart”,
“url”: “https://tygartmedia.com/about”
},
“publisher”: {
“@type”: “Organization”,
“name”: “Tygart Media”,
“url”: “https://tygartmedia.com”,
“logo”: {
“@type”: “ImageObject”,
“url”: “https://tygartmedia.com/wp-content/uploads/tygart-media-logo.png”
}
},
“mainEntityOfPage”: {
“@type”: “WebPage”,
“@id”: “https://tygartmedia.com/information-density-analyzer/”
}
}
Leave a Reply