๐Ÿ” Free Website Analyzer

Get real performance scores and actionable SEO tips. See exactly what's slowing down your site and how to fix it.

โœจ Powered by Google PageSpeed Insights API

Analyze Your Website

Enter your website URL to get a detailed performance report

๐Ÿ”’ Free analysis โ€ข Real Google data โ€ข No credit card

Analyzing your website...

This takes 15-30 seconds (we're running real tests)

โณ Connecting to your site
โณ Testing page speed
โณ Checking mobile-friendliness
โณ Analyzing SEO factors
โณ Generating recommendations
๐Ÿ˜•

Couldn't Analyze This Site

We had trouble reaching your website. Please check the URL and try again.

Analysis Complete

๐Ÿ”ง Issues to Fix

โœ… Passed Audits โ–ผ

Need Help Fixing These Issues?

Our team can optimize your website for speed, SEO, and mobile performance.

Get Free Expert Review โ†’

DIY Website Optimization Tips

๐Ÿš€

Speed Up Your Site

Compress images with TinyPNG, enable browser caching, and minimize CSS/JS. A 1-second delay can cost you 7% of conversions.

๐Ÿ“ฑ

Mobile First

Google uses mobile-first indexing. Test on real phones, use responsive design, and make buttons at least 48px for easy tapping.

๐Ÿ”

SEO Basics

Every page needs a unique title (under 60 chars) and meta description (under 160 chars). Use headings properly: one H1, then H2s and H3s.

tag', 'Add defer to script tags: <script defer src="...">', 'WordPress? Install "Autoptimize" or "WP Rocket" plugin - they handle this automatically']

๐Ÿ’ผ Our Services

Professional solutions for your business

๐Ÿข Industries We Serve

Specialized solutions for your industry

View All 20+ Industries โ†’

๐Ÿ“ฑ Ezy Software Suite

Start your free trial today

๐Ÿ“ Jamaica Business Directory

Get quality leads from Google

๐Ÿ“š Popular Guides

Free resources for Jamaica business owners

View All 245+ Articles โ†’
}, 'uses-responsive-images': { impact: 'High impact - images are usually the biggest files', steps: ['Resize images to actual display size (not 2000px for a 400px thumbnail)', 'Compress with TinyPNG.com (free) or ShortPixel', 'Use WebP format for 30% smaller files', 'Add width/height attributes to prevent layout shift'] }, 'offscreen-images': { impact: 'Medium impact on initial load', steps: ['Add loading="lazy" to images below the fold', 'Example: <img src="photo.jpg" loading="lazy">', 'WordPress does this automatically since version 5.5'] }, 'unminified-css': { impact: 'Low-medium impact', steps: ['Use a CSS minifier tool online', 'WordPress: "Autoptimize" plugin does this automatically', 'Remove all comments and whitespace from production CSS'] }, 'unminified-javascript': { impact: 'Low-medium impact', steps: ['Use a JS minifier tool online', 'WordPress: "Autoptimize" plugin does this automatically', 'Most modern build tools (Webpack, Vite) do this by default'] }, 'uses-text-compression': { impact: 'High impact - can reduce file sizes by 70%', steps: ['Enable GZIP on your server', 'For cPanel: Enable in "Optimize Website" section', 'For Apache .htaccess add: AddOutputFilterByType DEFLATE text/html text/css application/javascript', 'Ask your hosting provider - most have this option'] }, 'uses-long-cache-ttl': { impact: 'Medium impact for returning visitors', steps: ['Set browser caching for static files (images, CSS, JS)', 'WordPress: Use WP Super Cache or W3 Total Cache', 'These tell browsers to remember your files instead of re-downloading'] }, 'meta-description': { impact: 'Critical for SEO click-through rates', steps: ['Add to your <head>: <meta name="description" content="Your page description here">', 'Keep it 120-160 characters', 'Include your main keyword naturally', 'Make it compelling - this is what shows in Google results!'] }, 'document-title': { impact: 'Critical for SEO', steps: ['Every page needs a unique <title> tag', 'Keep under 60 characters so Google doesn\'t cut it off', 'Put your main keyword near the beginning', 'Format: "Main Keyword - Secondary | Brand Name"'] }, 'viewport': { impact: 'Critical - site won\'t work on mobile without this', steps: ['Add to your <head>:', '<meta name="viewport" content="width=device-width, initial-scale=1">', 'This tells phones how to display your page properly'] }, 'font-size': { impact: 'Important for mobile users', steps: ['Use minimum 16px font size for body text', 'Test your site on a real phone', 'If you have to pinch-zoom to read, fonts are too small'] }, 'tap-targets': { impact: 'Important for mobile usability', steps: ['Make buttons/links at least 48x48 pixels', 'Add padding around clickable elements', 'Space links at least 8px apart', 'Test on your phone - can you tap accurately?'] }, 'image-alt': { impact: 'Important for accessibility & SEO', steps: ['Add alt text to ALL images', 'Describe what\'s in the image, don\'t just say "image"', 'Good: alt="Red Toyota Corolla rental car"', 'Bad: alt="car" or alt="image1"'] }, 'link-text': { impact: 'Important for accessibility & SEO', steps: ['Never use "click here" as link text', 'Use descriptive text: "View our pricing" not "Click here"', 'Screen readers and Google both prefer descriptive links'] }, 'largest-contentful-paint': { impact: 'Core Web Vital - affects Google ranking', steps: ['Optimize your largest visible image (usually the hero)', 'Preload it: <link rel="preload" as="image" href="hero.jpg">', 'Use next-gen formats (WebP)', 'Target: under 2.5 seconds'] }, 'cumulative-layout-shift': { impact: 'Core Web Vital - stops annoying page jumps', steps: ['Always set width and height on images: <img width="800" height="600">', 'Reserve space for ads before they load', 'Don\'t insert content above existing content'] }, 'first-contentful-paint': { impact: 'How fast users see something', steps: ['Reduce server response time (better hosting)', 'Eliminate render-blocking CSS/JS', 'Preload critical resources'] }, 'total-blocking-time': { impact: 'How responsive your page feels', steps: ['Reduce JavaScript - remove what you don\'t need', 'Break up long tasks', 'Defer non-critical JavaScript'] }, 'default': { impact: 'Varies', steps: ['Check Google\'s PageSpeed documentation for specific guidance', 'Test changes one at a time', 'Consider consulting a web professional'] } }; async function runAnalysis() { const emailInput = document.getElementById('emailInput'); const urlInput = document.getElementById('urlInput'); let email = emailInput.value.trim(); let url = urlInput.value.trim(); if (!email || !email.includes('@')) { alert('Please enter a valid email'); emailInput.focus(); return; } if (!url) { alert('Please enter a website URL'); urlInput.focus(); return; } if (!url.startsWith('http://') && !url.startsWith('https://')) url = 'https://' + url; try { new URL(url); } catch(e) { alert('Please enter a valid URL'); return; } // Submit to Ezy Form Handler fetch('https://ezywebpro.com/wp/wp-json/ezy/v1/submit', { method: 'POST', body: JSON.stringify({ email: email, website_url: url, _subject: 'SEO Checker - ' + url, form_source: 'tools/seo-checker' }), headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' } }); document.getElementById('inputForm').style.display = 'none'; document.getElementById('loadingState').classList.add('active'); document.getElementById('analyzeBtn').disabled = true; // Animate steps const steps = ['step1', 'step2', 'step3', 'step4', 'step5']; let currentStep = 0; const stepInterval = setInterval(() => { if (currentStep < steps.length) { if (currentStep > 0) { document.getElementById(steps[currentStep-1]).classList.remove('active'); document.getElementById(steps[currentStep-1]).classList.add('done'); document.getElementById(steps[currentStep-1]).querySelector('.icon').textContent = 'โœ…'; } document.getElementById(steps[currentStep]).classList.add('active'); currentStep++; } }, 3000); try { const apiUrl = `${API_URL}?url=${encodeURIComponent(url)}&category=performance&category=accessibility&category=seo&category=best-practices&strategy=mobile`; console.log('Calling PageSpeed API:', apiUrl); const response = await fetch(apiUrl); clearInterval(stepInterval); console.log('Response status:', response.status); if (!response.ok) { const errorData = await response.json().catch(() => ({})); console.error('API Error:', errorData); throw new Error(errorData.error?.message || 'API request failed'); } const data = await response.json(); console.log('PageSpeed data received:', data.lighthouseResult ? 'Success' : 'No lighthouse data'); if (!data.lighthouseResult) { throw new Error('No analysis data returned'); } steps.forEach(s => { document.getElementById(s).classList.remove('active'); document.getElementById(s).classList.add('done'); document.getElementById(s).querySelector('.icon').textContent = 'โœ…'; }); setTimeout(() => displayResults(url, data), 500); } catch (error) { clearInterval(stepInterval); console.error('Analysis error:', error); let errorMsg = 'We couldn\'t analyze this website. '; if (error.message.includes('COULD_NOT_RESOLVE')) { errorMsg += 'The domain could not be found. Please check the URL.'; } else if (error.message.includes('DNS_FAILURE')) { errorMsg += 'DNS lookup failed. Make sure the website exists.'; } else if (error.message.includes('FAILED_DOCUMENT_REQUEST')) { errorMsg += 'Could not load the page. The site may be down or blocking requests.'; } else { errorMsg += 'It may be blocking requests, too slow, or not publicly accessible. Try again in a moment.'; } showError(errorMsg); } } function showError(msg) { document.getElementById('loadingState').classList.remove('active'); document.getElementById('errorMessage').textContent = msg; document.getElementById('errorState').classList.add('active'); } function displayResults(url, data) { document.getElementById('loadingState').classList.remove('active'); document.getElementById('resultsContainer').classList.add('active'); document.getElementById('analyzedUrl').textContent = new URL(url).hostname; const cats = data.lighthouseResult.categories; const scores = { performance: Math.round((cats.performance?.score || 0) * 100), seo: Math.round((cats.seo?.score || 0) * 100), accessibility: Math.round((cats.accessibility?.score || 0) * 100), bestPractices: Math.round((cats['best-practices']?.score || 0) * 100) }; const getClass = s => s >= 90 ? 'good' : s >= 50 ? 'warn' : 'poor'; document.getElementById('scoresGrid').innerHTML = `
${scores.performance}
Performance
${scores.seo}
SEO
${scores.accessibility}
Accessibility
${scores.bestPractices}
Best Practices
`; const avg = Math.round((scores.performance + scores.seo + scores.accessibility + scores.bestPractices) / 4); let assessment = ''; if (avg >= 90) assessment = '

๐ŸŒŸ Excellent!

Your website is performing very well. You\'re ahead of most competitors. Fine-tune the few remaining items below to be even better.

'; else if (avg >= 70) assessment = '

๐Ÿ‘ Good Foundation

Your site has solid basics but there\'s room for improvement. The issues below are holding you back from ranking higher and converting more visitors.

'; else if (avg >= 50) assessment = '

โš ๏ธ Needs Attention

Several issues are affecting your performance and visibility. The good news: most are fixable! Focus on the high-impact items first.

'; else assessment = '

๐Ÿšจ Critical Issues Found

Your website needs urgent attention. Slow loading and SEO problems are likely hurting your Google rankings and driving visitors away.

'; document.getElementById('assessmentBox').innerHTML = assessment; // Extract audits const audits = data.lighthouseResult.audits; const failed = [], passed = []; const check = ['render-blocking-resources','uses-responsive-images','offscreen-images','unminified-css','unminified-javascript','uses-text-compression','uses-long-cache-ttl','meta-description','document-title','viewport','font-size','tap-targets','image-alt','link-text','largest-contentful-paint','cumulative-layout-shift','first-contentful-paint','total-blocking-time']; check.forEach(id => { const a = audits[id]; if (a) { if (a.score === null || a.score >= 0.9) passed.push({ title: a.title }); else failed.push({ id, title: a.title, description: a.description, displayValue: a.displayValue, score: a.score }); } }); failed.sort((a,b) => (a.score||0) - (b.score||0)); const issuesList = document.getElementById('issuesList'); if (failed.length === 0) { issuesList.innerHTML = '

๐ŸŽ‰ No major issues found! Your site is well-optimized.

'; } else { issuesList.innerHTML = failed.slice(0,10).map((a, i) => { const g = FIX_GUIDES[a.id] || FIX_GUIDES['default']; const sev = a.score < 0.5 ? 'critical' : 'warning'; return `
${sev==='critical'?'๐Ÿ”ด':'๐ŸŸก'}

${a.title}

${g.impact}${a.displayValue?' โ€ข '+a.displayValue:''}
โ–ผ

${(a.description||'').replace(/<[^>]*>/g,'').substring(0,300)}

๐Ÿ› ๏ธ How to fix this:
    ${g.steps.map(s=>'
  1. '+s+'
  2. ').join('')}
`; }).join(''); } document.getElementById('passedCount').textContent = `(${passed.length})`; document.getElementById('passedList').innerHTML = passed.map(a => `
โœ“${a.title}
`).join(''); } function toggleIssue(i) { document.getElementById('issue-'+i).classList.toggle('open'); } function togglePassed() { document.getElementById('passedList').classList.toggle('open'); } function resetChecker() { document.getElementById('inputForm').style.display = 'block'; document.getElementById('loadingState').classList.remove('active'); document.getElementById('errorState').classList.remove('active'); document.getElementById('resultsContainer').classList.remove('active'); document.getElementById('analyzeBtn').disabled = false; document.getElementById('urlInput').value = ''; ['step1','step2','step3','step4','step5'].forEach(s => { const el = document.getElementById(s); el.classList.remove('active','done'); el.querySelector('.icon').textContent = 'โณ'; }); }

๐Ÿ’ผ Our Services

Professional solutions for your business

๐Ÿข Industries We Serve

Specialized solutions for your industry

View All 20+ Industries โ†’

๐Ÿ“ฑ Ezy Software Suite

Start your free trial today

๐Ÿ“ Jamaica Business Directory

Get quality leads from Google

๐Ÿ“š Popular Guides

Free resources for Jamaica business owners

View All 245+ Articles โ†’