Interactive On-Page SEO Guide

Interactive Guide to On-Page SEO

An explorable guide to mastering the art of on-page optimization for better search engine rankings.

These are the fundamental building blocks of any successful on-page SEO strategy. Click on any card to learn more about its purpose, best practices, and why it's crucial for ranking.

E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) is a concept from Google's quality guidelines that acts as a framework for creating high-quality content.

  • Experience: Is the content created by someone with demonstrable life experience on the topic?
  • Expertise: Does the author have expert knowledge in the field?
  • Authoritativeness: Is your site a recognized go-to source for this topic?
  • Trustworthiness: Is your site secure (HTTPS), your information accurate, and your authors credible?
` } }; let checklistState = [ { id: 'c1', text: 'Content is original, valuable, and readable', checked: false }, { id: 'c2', text: 'One clear primary keyword is targeted', checked: false }, { id: 'c3', text: 'Keyword is in title, URL, H1, and intro', checked: false }, { id: 'c4', text: 'Title Tag is 50-65 characters and compelling', checked: false }, { id: 'c5', text: 'Meta Description is 150-160 characters', checked: false }, { id: 'c6', text: 'Content has one H1 and is structured with H2s/H3s', checked: false }, { id: 'c7', text: 'URL is short, clean, and keyword-rich', checked: false }, { id: 'c8', text: 'Images have descriptive alt text and are compressed', checked: false }, { id: 'c9', text: 'Includes 2-3 relevant internal links', checked: false }, { id: 'c10', text: 'Page loads in under 3 seconds', checked: false }, { id: 'c11', text: 'Page is mobile-friendly and responsive', checked: false } ]; document.addEventListener('DOMContentLoaded', () => { const tabs = { core: document.getElementById('tab-core'), advanced: document.getElementById('tab-advanced'), checklist: document.getElementById('tab-checklist') }; const contents = { core: document.getElementById('content-core'), advanced: document.getElementById('content-advanced'), checklist: document.getElementById('content-checklist') }; const coreGrid = document.getElementById('core-concepts-grid'); const advancedGrid = document.getElementById('advanced-concepts-grid'); const checklistContainer = document.getElementById('checklist-container'); const modalOverlay = document.getElementById('modal-overlay'); const modalContent = document.getElementById('modal-content'); const modalTitle = document.getElementById('modal-title'); const modalBody = document.getElementById('modal-body'); const modalCloseBtn = document.getElementById('modal-close-btn'); function loadState() { const savedState = localStorage.getItem('seoChecklistState'); if (savedState) { checklistState = JSON.parse(savedState); } } function saveState() { localStorage.setItem('seoChecklistState', JSON.stringify(checklistState)); } function createConceptCard(key, data) { return `

${data.title}

`; } function populateGrids() { coreGrid.innerHTML = Object.keys(SEO_DATA).filter(k => SEO_DATA[k].category === 'core').map(k => createConceptCard(k, SEO_DATA[k])).join(''); advancedGrid.innerHTML = Object.keys(SEO_DATA).filter(k => SEO_DATA[k].category === 'advanced').map(k => createConceptCard(k, SEO_DATA[k])).join(''); } function updateProgress() { const checkedItems = checklistState.filter(item => item.checked).length; const totalItems = checklistState.length; const percentage = totalItems > 0 ? Math.round((checkedItems / totalItems) * 100) : 0; document.getElementById('progress-bar').style.width = `${percentage}%`; document.getElementById('progress-text').textContent = `${percentage}%`; } function renderChecklist() { checklistContainer.innerHTML = checklistState.map(item => `
`).join(''); updateProgress(); } function switchTab(targetId) { Object.values(tabs).forEach(tab => tab.classList.remove('active')); Object.values(contents).forEach(content => content.classList.add('hidden')); tabs[targetId].classList.add('active'); contents[targetId].classList.remove('hidden'); } function openModal(key) { const data = SEO_DATA[key]; modalTitle.textContent = data.title; modalBody.innerHTML = data.details; modalOverlay.classList.remove('hidden'); modalContent.classList.remove('hidden'); } function closeModal() { modalOverlay.classList.add('hidden'); modalContent.classList.add('hidden'); } Object.keys(tabs).forEach(id => { tabs[id].addEventListener('click', () => switchTab(id)); }); document.body.addEventListener('click', (e) => { const card = e.target.closest('.concept-card'); if (card) { openModal(card.dataset.key); } }); checklistContainer.addEventListener('change', (e) => { if (e.target.type === 'checkbox') { const item = checklistState.find(i => i.id === e.target.dataset.id); if (item) { item.checked = e.target.checked; saveState(); updateProgress(); renderChecklist(); feather.replace(); } } }); modalCloseBtn.addEventListener('click', closeModal); modalOverlay.addEventListener('click', closeModal); loadState(); populateGrids(); renderChecklist(); feather.replace(); });
Scroll to Top