Live Audit Tool

Analyze live URLs or pasted HTML with visible progress

Get instant SEO insights with real-time progress indicators. Check titles, meta descriptions, headings, images, alt text, canonical tags, and links.

01
Live URL analysis via PHP proxy (bypasses CORS)
02
Paste HTML mode for testing local files
03
Real-time progress with percentage and timer

SEO Analyzer

Choose live URL mode or pasted HTML mode, then run the audit.

Live URL analysis uses a PHP proxy to fetch HTML on the server side.
0SEO score
0Total headings
0Total images
0Total links
0Action items

📊 Audit Overview

Waiting for analysis
0Score
Choose a mode, enter a URL or paste HTML, then click Run SEO audit.
📝 Title tagNot found yet
📄 Meta descriptionNot found yet
📌 H1 HeadingNot found yet
🔗 CanonicalNot found yet

⚠️ Priority Findings

Main SEO checks
No audit yet
Pending

Run the analyzer to generate findings for titles, metadata, headings, images, and links.

📋 Headings & Links

Structure details
CheckValueNote
Headings0No analysis yet
Internal links0No analysis yet
External links0No analysis yet
Images without alt0No analysis yet

🔍 Extracted Elements

Audit data
Title length
Pending

No data yet.

Description length
Pending

No data yet.

Heading structure
Pending

No data yet.

Image optimization
Pending

No data yet.

`; } runAudit(); }); } // Copy summary if (copyBtn) { copyBtn.addEventListener('click', async () => { let summaryText = ''; const score = summaryScore?.textContent || '0'; const headings = summaryHeadings?.textContent || '0'; const images = summaryImages?.textContent || '0'; const links = summaryLinks?.textContent || '0'; const issues = summaryIssues?.textContent || '0'; const title = titleValue?.textContent || 'Not found'; const description = descriptionValue?.textContent || 'Not found'; const h1 = h1Value?.textContent || 'Not found'; summaryText = `SEO AUDIT SUMMARY ================== SEO Score: ${score}/100 Total Headings: ${headings} Total Images: ${images} Total Links: ${links} Action Items: ${issues} Title: ${title} Meta Description: ${description} H1 Heading: ${h1} Generated by Habitlio - ${new Date().toLocaleString()}`; try { await navigator.clipboard.writeText(summaryText); setStatus('ok', '✓ Audit summary copied to clipboard!'); if (auditMeta) auditMeta.textContent = 'Summary copied'; } catch (err) { setStatus('bad', 'Failed to copy. Select manually.'); } }); } // Clear all if (clearBtn) { clearBtn.addEventListener('click', () => { if (pageUrl) pageUrl.value = ''; if (focusKeyword) focusKeyword.value = ''; if (pageSource) pageSource.value = ''; if (summaryScore) summaryScore.textContent = '0'; if (summaryHeadings) summaryHeadings.textContent = '0'; if (summaryImages) summaryImages.textContent = '0'; if (summaryLinks) summaryLinks.textContent = '0'; if (summaryIssues) summaryIssues.textContent = '0'; if (auditMeta) auditMeta.textContent = 'Cleared'; setStatus('warn', 'Choose a mode, enter a URL or paste HTML, then click Run SEO audit.'); updateScore(0); setAnalyzeBusy(false); if (titleValue) titleValue.textContent = 'Not found yet'; if (descriptionValue) descriptionValue.textContent = 'Not found yet'; if (h1Value) h1Value.textContent = 'Not found yet'; if (canonicalValue) canonicalValue.textContent = 'Not found yet'; setPill(titlePill, 'warn', 'Pending'); setPill(descPill, 'warn', 'Pending'); setPill(headingPill, 'warn', 'Pending'); setPill(imagePill, 'warn', 'Pending'); if (titleNote) titleNote.textContent = 'No data yet.'; if (descNote) descNote.textContent = 'No data yet.'; if (headingNote) headingNote.textContent = 'No data yet.'; if (imageNote) imageNote.textContent = 'No data yet.'; if (issuesList) { issuesList.innerHTML = '
No audit yet
Pending

Run the analyzer to generate findings for titles, metadata, headings, images, and links.

'; } if (detailTable) { detailTable.innerHTML = ` Headings0No analysis yet Internal links0No analysis yet External links0No analysis yet Images without alt0No analysis yet `; } if (auditLoader) auditLoader.hidden = true; }); } // Analyze button if (analyzeBtn) analyzeBtn.addEventListener('click', runAudit); // Initialize setMode('url'); updateScore(0); })();