AI Visibility Analysis
Analyzing your website
This usually takes about 75 seconds
- Looking up company data
- Checking ChatGPT index
- Scanning for schema markup
- Checking Gemini visibility
- Running AI visibility analysis
- Generating your report
Building your report0%
(function(){
var params = new URLSearchParams(window.location.search);
var token = params.get(‘report_token’) || params.get(‘token’);
var url = params.get(‘url’) || params.get(‘website_url’);
if(url){
var d = document.getElementById(‘ut’);
if(d) d.textContent = url.replace(/^https?://(www.)?/,”).replace(//$/,”);
}
var steps = [‘s0′,’s1′,’s2′,’s3′,’s4′,’s5’];
// Step timing in ms — spread across ~54 seconds
var stepTimes = [0, 7000, 15000, 24000, 35000, 47000];
var tips = [
var tips = [
‘🔎 Pulling your company profile. Industry, size, and location shape your benchmarks.’,
‘📄 Reading your homepage the way an AI crawler does: structure first, design never.’,
‘🧩 Schema markup is the difference between AI guessing and AI knowing. Most sites have almost none.’,
‘✨ llms.txt and clear entity definitions help AI assistants parse your brand and services.’,
‘📈 Most established sites score 60 to 68. The gap is usually structured data, not content quality.’,
‘🏆 Almost done. Your report includes site-specific next steps, not a generic checklist.’
];
function setStep(i){
steps.forEach(function(id, idx){
var el = document.getElementById(id);
if(!el) return;
el.className = idx < i ? 'done' : (idx === i ? 'active' : '');
});
var tb = document.getElementById('tip-box');
if(tb && tips[i]) tb.innerHTML = '
‘ + tips[i] + ‘‘;
}
function setProgress(pct){
var pf = document.getElementById(‘pf’);
var pp = document.getElementById(‘pp’);
if(pf) pf.style.width = pct + ‘%’;
if(pp) pp.textContent = Math.round(pct) + ‘%’;
}
// Activate steps on schedule
stepTimes.forEach(function(t, i){
setTimeout(function(){ setStep(i); }, t);
});
// Smooth progress bar over 57 seconds (0 -> 95%)
var startTime = Date.now();
var duration = 57000;
var progressInterval = setInterval(function(){
var elapsed = Date.now() – startTime;
var pct = Math.min(95, (elapsed / duration) * 95);
setProgress(pct);
if(elapsed >= duration) clearInterval(progressInterval);
}, 300);
// Poll for report
var pollStart = 20000;
var pollInterval = 5000;
var maxWait = 120000;
var pollCount = 0;
function checkReport(){
if(!token) return;
var reportUrl = ‘https://rivetline.ai/ai-visibility-score/’ + token + ‘/’;
fetch(reportUrl, {method:’HEAD’})
.then(function(r){
if(r.ok && r.status === 200){
clearInterval(progressInterval);
setStep(5);
setProgress(100);
setTimeout(function(){ window.location.href = reportUrl; }, 800);
} else {
scheduleNextPoll();
}
})
.catch(function(){ scheduleNextPoll(); });
}
function scheduleNextPoll(){
pollCount++;
var elapsed = pollStart + (pollCount * pollInterval);
if(elapsed < maxWait){
setTimeout(checkReport, pollInterval);
}
}
setTimeout(checkReport, pollStart);
})();