[{"data":1,"prerenderedAt":1114},["ShallowReactive",2],{"$flirR0okL400bAfHj6mDWJ9oCIm-MvtzZW6SGS8gBaac":3,"$f-PX9odaOKLEkb3ox0i5nXO1mB2Qjif-Q-wpR-2PpLVg":30},{"id":4,"tags":5,"type":14,"title":15,"slug":16,"status":17,"description":18,"date":19,"updatedDate":21,"formattedDate":22,"publishTime":23,"dateMs":24,"tocDepth":25,"author":26},"40332a0f-f8ae-8129-af92-c7d6d07d84d0",[6,10],{"id":7,"name":8,"color":9},"09333b49-04ee-4579-8d94-10da95237ea1","Technical SEO","green",{"id":11,"name":12,"color":13},"3d2f3fb4-dae2-475a-865a-56a1f47980eb","SEO","pink","Blog","Always-up-to-date SEO technical audit checklist","always-up-to-date-seo-technical-audit-checklist","Published","A living SEO technical audit checklist covering the crawl-and-index essentials, plus the speed, analytics, and tagging checks that cost rankings today.",{"start":20,"end":21,"time_zone":21},"2026-10-02",null,"Oct 2, 2026","2026-10-02T00:00:00+00:00",1790899200000,"h2",{"name":27,"image":28,"link":29},"Justin Dunham","/authors/justin-full.jpg","https://www.linkedin.com/in/justinwdunham/",[31,79,88,96,105,114,122,130,138,146,154,162,170,178,186,194,202,210,218,226,234,242,250,258,266,274,324,332,374,382,400,408,466,474,508,516,568,576,610,618,668,676,750,758,832,840,874,882,890,908,916,924,942,950,958,966,974,982,990,998,1006,1014,1022,1030,1038,1046,1054,1062,1070,1078,1086],{"type":32,"children":33},"bulleted_list",[34,47,55,63,71],{"id":35,"type":36,"content":37,"bulleted_list_start":46},"40332a0f-f8ae-8154-afa6-ef0169446ea6","bulleted_list_item",{"rich_text":38,"color":45},[39],{"type":40,"text":41,"annotations":43,"plain_text":42,"href":21},"text",{"content":42,"link":21},"A technical search engine optimization (SEO) audit is a living checklist you re-run as the site changes.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},false,"default",true,{"id":48,"type":36,"content":49},"40332a0f-f8ae-8176-9943-f9fbef698fd6",{"rich_text":50,"color":45},[51],{"type":40,"text":52,"annotations":54,"plain_text":53,"href":21},{"content":53,"link":21},"10 items usually decide Google's ability to crawl, index, and understand your site; get those wrong and nothing else in the audit matters much.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":56,"type":36,"content":57},"40332a0f-f8ae-81e3-ada1-f72872182153",{"rich_text":58,"color":45},[59],{"type":40,"text":60,"annotations":62,"plain_text":61,"href":21},{"content":61,"link":21},"The other roughly 60 checks still get scored, because, in our experience, that's the layer where speed, analytics misconfiguration, and junk URLs lose rankings most.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":64,"type":36,"content":65},"40332a0f-f8ae-81d6-be3a-f1922cc49eb5",{"rich_text":66,"color":45},[67],{"type":40,"text":68,"annotations":70,"plain_text":69,"href":21},{"content":69,"link":21},"Mobile performance scores under 30, duplicate titles and descriptions, and missing canonicals are, in our experience, some of the fastest, most common ways sites lose rankings without you noticing.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":72,"type":36,"content":73,"bulleted_list_end":46},"40332a0f-f8ae-813e-a991-d59fd2a7293a",{"rich_text":74,"color":45},[75],{"type":40,"text":76,"annotations":78,"plain_text":77,"href":21},{"content":77,"link":21},"Group the findings the way developers will work them: crawl-and-index blockers first, then speed, then everything else as a prioritized backlog.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":80,"type":81,"content":82},"40332a0f-f8ae-81b5-87b6-e7e21a17e245","paragraph",{"rich_text":83,"icon":21,"color":45},[84],{"type":40,"text":85,"annotations":87,"plain_text":86,"href":21},{"content":86,"link":21},"If you own site health, you've probably inherited a Search Console account full of warnings and a backlog with no clear priority order. Crawl errors, duplicate tags, and slow mobile pages all compete for the same sprint, and isolating the ones that lose rankings is hard.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":89,"type":81,"content":90},"40332a0f-f8ae-81aa-88bc-c2bfc115ed2b",{"rich_text":91,"icon":21,"color":45},[92],{"type":40,"text":93,"annotations":95,"plain_text":94,"href":21},{"content":94,"link":21},"This is the checklist we run on every engagement, kept current rather than filed away after one audit. 10 items decide Google's ability to crawl, index, and understand the site at all. The rest — usability, speed, analytics, structured data — still get scored, because that's where sites lose rankings without you noticing. Below is the full list, grouped so you can hand it straight to a developer.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":97,"type":98,"content":99},"40332a0f-f8ae-818d-8f3b-c3bf2b263c6a","heading_2",{"rich_text":100,"is_toggleable":44,"color":45},[101],{"type":40,"text":102,"annotations":104,"plain_text":103,"href":21},{"content":103,"link":21},"The top 10 crawl-and-index blockers",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":106,"type":107,"content":108},"40332a0f-f8ae-81d0-ad11-d4795d4aefaa","heading_3",{"rich_text":109,"is_toggleable":44,"color":45},[110],{"type":40,"text":111,"annotations":113,"plain_text":112,"href":21},{"content":112,"link":21},"1. Content is easy to crawl",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":115,"type":81,"content":116},"40332a0f-f8ae-81af-98b1-d7036b1792a3",{"rich_text":117,"icon":21,"color":45},[118],{"type":40,"text":119,"annotations":121,"plain_text":120,"href":21},{"content":120,"link":21},"Titles, headings, and body copy need to live in the HTML before JavaScript runs. If the important links and text don't show up until a script executes, Googlebot and most other crawlers will under-count the site. Check robots.txt for accidental blocks, then confirm server-rendered content in key templates via view-source, independent of a headed browser.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":123,"type":107,"content":124},"40332a0f-f8ae-8142-bca7-e0bd741a0a7d",{"rich_text":125,"is_toggleable":44,"color":45},[126],{"type":40,"text":127,"annotations":129,"plain_text":128,"href":21},{"content":128,"link":21},"2. No internal 4xx or 5xx links in content",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":131,"type":81,"content":132},"40332a0f-f8ae-81de-aa44-cc0477516cfd",{"rich_text":133,"icon":21,"color":45},[134],{"type":40,"text":135,"annotations":137,"plain_text":136,"href":21},{"content":136,"link":21},"Dead internal links waste crawl budget and send visitors — and bots — off the path you meant them to take. Crawl inlinks to 4xx and 5xx URLs, then match those against analytics and Search Console so you fix the ones still getting visits first. Redirect or replace the live version; don't leave marketing URLs sitting as soft 404s (pages that return 200 with not-found content).",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":139,"type":107,"content":140},"40332a0f-f8ae-81bd-a4dc-d567bef9417b",{"rich_text":141,"is_toggleable":44,"color":45},[142],{"type":40,"text":143,"annotations":145,"plain_text":144,"href":21},{"content":144,"link":21},"3. Every indexable page declares a canonical",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":147,"type":81,"content":148},"40332a0f-f8ae-811b-853f-d27ae5a4a79f",{"rich_text":149,"icon":21,"color":45},[150],{"type":40,"text":151,"annotations":153,"plain_text":152,"href":21},{"content":152,"link":21},"Missing canonical tags leave duplicate-content decisions to chance. The healthy pattern is self-canonicals on the preferred URL, plus 301s from the non-preferred host, slash, or index.html variants. If you haven't counted the indexable pages missing a canonical, start there.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":155,"type":107,"content":156},"40332a0f-f8ae-817d-affb-e01091507a72",{"rich_text":157,"is_toggleable":44,"color":45},[158],{"type":40,"text":159,"annotations":161,"plain_text":160,"href":21},{"content":160,"link":21},"4. One address per page",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":163,"type":81,"content":164},"40332a0f-f8ae-8154-8af1-c339d500d31c",{"rich_text":165,"icon":21,"color":45},[166],{"type":40,"text":167,"annotations":169,"plain_text":168,"href":21},{"content":168,"link":21},"HTTP versus HTTPS, www versus non-www, and trailing-slash variants should all 301 to a single preferred URL. Query-parameter copies and /index.html shouldn't compete with the real page for rankings or links.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":171,"type":107,"content":172},"40332a0f-f8ae-814d-a1c6-ec680b70f6c7",{"rich_text":173,"is_toggleable":44,"color":45},[174],{"type":40,"text":175,"annotations":177,"plain_text":176,"href":21},{"content":176,"link":21},"5. A sitemap exists",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":179,"type":81,"content":180},"40332a0f-f8ae-81e0-9773-c6cc8ce81a47",{"rich_text":181,"icon":21,"color":45},[182],{"type":40,"text":183,"annotations":185,"plain_text":184,"href":21},{"content":184,"link":21},"A sitemap declared in robots.txt tells Google the inventory you care about. For most marketing sites, one sitemap — or a sitemap index — listing live, canonical, indexable URLs is enough.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":187,"type":107,"content":188},"40332a0f-f8ae-8179-9782-d7b9fdc5aa6d",{"rich_text":189,"is_toggleable":44,"color":45},[190],{"type":40,"text":191,"annotations":193,"plain_text":192,"href":21},{"content":192,"link":21},"6. The sitemap matches the indexed pages",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":195,"type":81,"content":196},"40332a0f-f8ae-81ba-b8b1-d5389b0600a2",{"rich_text":197,"icon":21,"color":45},[198],{"type":40,"text":199,"annotations":201,"plain_text":200,"href":21},{"content":200,"link":21},"The sitemap should contain the pages you want to rank. Leave out noindexed junk, 404s, and redirects. Compare sitemap URLs against Search Console coverage and the live crawl. Either direction is the finding — missing money pages, or hundreds of submitted URLs that Google has no queries for at all.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":203,"type":107,"content":204},"40332a0f-f8ae-813e-8d8c-d997d1e902cf",{"rich_text":205,"is_toggleable":44,"color":45},[206],{"type":40,"text":207,"annotations":209,"plain_text":208,"href":21},{"content":208,"link":21},"7. No duplicate title tags",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":211,"type":81,"content":212},"40332a0f-f8ae-8183-9d15-ddd5e048a66a",{"rich_text":213,"icon":21,"color":45},[214],{"type":40,"text":215,"annotations":217,"plain_text":216,"href":21},{"content":216,"link":21},"A plain brand name repeated across pages, a webinar and its recording sharing one title, or an author hub with no unique title all make search results interchangeable. Every indexable template needs a title that names that page. Listings and content management system (CMS) defaults are the usual source of the duplicates.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":219,"type":107,"content":220},"40332a0f-f8ae-811f-8d6d-d6013f475e31",{"rich_text":221,"is_toggleable":44,"color":45},[222],{"type":40,"text":223,"annotations":225,"plain_text":224,"href":21},{"content":224,"link":21},"8. No duplicate meta descriptions",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":227,"type":81,"content":228},"40332a0f-f8ae-8117-b318-c725bb3a611a",{"rich_text":229,"icon":21,"color":45},[230],{"type":40,"text":231,"annotations":233,"plain_text":232,"href":21},{"content":232,"link":21},"The same rule applies to descriptions. Author pages that all say \"About the author,\" podcast episodes sharing one show blurb, and leftover CMS defaults are the typical clusters. A unique description won't make a page rank by itself, but it's one of the few things you control in the snippet.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":235,"type":107,"content":236},"40332a0f-f8ae-81f4-9a6c-c4151a3098da",{"rich_text":237,"is_toggleable":44,"color":45},[238],{"type":40,"text":239,"annotations":241,"plain_text":240,"href":21},{"content":240,"link":21},"9. Every page has an H1",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":243,"type":81,"content":244},"40332a0f-f8ae-81e3-9b1b-dd3d1519abe3",{"rich_text":245,"icon":21,"color":45},[246],{"type":40,"text":247,"annotations":249,"plain_text":248,"href":21},{"content":248,"link":21},"The H1 is the page's headline for readers and for parsers. Demo, pricing, and landing templates often style a visual headline as an H2 and skip the H1 in the HTML entirely. Utility embeds and form gates that ship without one usually shouldn't be indexable in the first place.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":251,"type":107,"content":252},"40332a0f-f8ae-8172-a6c3-d68e27720aff",{"rich_text":253,"is_toggleable":44,"color":45},[254],{"type":40,"text":255,"annotations":257,"plain_text":256,"href":21},{"content":256,"link":21},"10. Mobile page speed above a performance score of 30",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":259,"type":81,"content":260},"40332a0f-f8ae-8159-92f9-c75e9958de8b",{"rich_text":261,"icon":21,"color":45},[262],{"type":40,"text":263,"annotations":265,"plain_text":264,"href":21},{"content":264,"link":21},"Slow mobile Largest Contentful Paint (LCP) is still a ranking and conversion issue. Use field data — the Chrome User Experience Report (CrUX) — alongside lab scores. Pages sitting under a performance score of 30 are the ones to ticket — that's ercule' own ticketing threshold, separate from any published Google or Lighthouse cutoff, though it sits well inside the range most performance tools already flag as poor. A page with a field LCP well above the 2.5-second target belongs on the same ticket list. The cause usually traces back to the speed checks below: third-party script, unused CSS or JS, fonts, or images.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":267,"type":98,"content":268},"40332a0f-f8ae-8136-9c7d-e3715bff0f2e",{"rich_text":269,"is_toggleable":44,"color":45},[270],{"type":40,"text":271,"annotations":273,"plain_text":272,"href":21},{"content":272,"link":21},"Basics",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":275},[276,284,292,300,308,316],{"id":277,"type":36,"content":278,"bulleted_list_start":46},"40332a0f-f8ae-817a-bf73-f34bd6c2f904",{"rich_text":279,"color":45},[280],{"type":40,"text":281,"annotations":283,"plain_text":282,"href":21},{"content":282,"link":21},"Site ranks for its own name. Confirm branded-query visibility in Search Console. An ambiguous brand name can lose the search results page to films, animals, or open-source projects — that's an entity problem as much as an SEO one.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":285,"type":36,"content":286},"40332a0f-f8ae-81be-9c90-e9870a8733db",{"rich_text":287,"color":45},[288],{"type":40,"text":289,"annotations":291,"plain_text":290,"href":21},{"content":290,"link":21},"Support and contact pages are visible. Link them from global navigation or the footer so users and crawlers both find a human path.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":293,"type":36,"content":294},"40332a0f-f8ae-81c8-8c3b-d58dca2ac807",{"rich_text":295,"color":45},[296],{"type":40,"text":297,"annotations":299,"plain_text":298,"href":21},{"content":298,"link":21},"Clear value proposition on the homepage. State your offering in plain language, with a primary call to action.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":301,"type":36,"content":302},"40332a0f-f8ae-81f9-b778-feb069089e12",{"rich_text":303,"color":45},[304],{"type":40,"text":305,"annotations":307,"plain_text":306,"href":21},{"content":306,"link":21},"Homepage is easily accessible. The preferred homepage URL should return 200; other host and protocol variants should 301 to it.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":309,"type":36,"content":310},"40332a0f-f8ae-8172-866d-ce89fb1946d3",{"rich_text":311,"color":45},[312],{"type":40,"text":313,"annotations":315,"plain_text":314,"href":21},{"content":314,"link":21},"No content errors on pages. Key templates should render without broken layouts, missing modules, or visible error copy.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":317,"type":36,"content":318,"bulleted_list_end":46},"40332a0f-f8ae-817d-8df4-f0f64d66537e",{"rich_text":319,"color":45},[320],{"type":40,"text":321,"annotations":323,"plain_text":322,"href":21},{"content":322,"link":21},"Functional 404 page design. Unknown URLs should return a 404 with a useful page and a way back into the site.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":325,"type":98,"content":326},"40332a0f-f8ae-8102-83b9-f1899e880870",{"rich_text":327,"is_toggleable":44,"color":45},[328],{"type":40,"text":329,"annotations":331,"plain_text":330,"href":21},{"content":330,"link":21},"Usability",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":333},[334,342,350,358,366],{"id":335,"type":36,"content":336,"bulleted_list_start":46},"40332a0f-f8ae-816b-be61-ef5dc32d30fa",{"rich_text":337,"color":45},[338],{"type":40,"text":339,"annotations":341,"plain_text":340,"href":21},{"content":340,"link":21},"Content fits all screens. Pages set a responsive viewport and reflow on narrow screens; spot-check templates since full device coverage is its own pass.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":343,"type":36,"content":344},"40332a0f-f8ae-81eb-b8c6-f887f0439087",{"rich_text":345,"color":45},[346],{"type":40,"text":347,"annotations":349,"plain_text":348,"href":21},{"content":348,"link":21},"No interactivity issues. Navigation, forms, and primary calls to action (CTAs) should load and work.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":351,"type":36,"content":352},"40332a0f-f8ae-811d-b9ec-c7153e47b969",{"rich_text":353,"color":45},[354],{"type":40,"text":355,"annotations":357,"plain_text":356,"href":21},{"content":356,"link":21},"Clear, readable design. Type hierarchy and contrast should keep body copy readable at default size.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":359,"type":36,"content":360},"40332a0f-f8ae-812e-80e7-ca841ebbcfcf",{"rich_text":361,"color":45},[362],{"type":40,"text":363,"annotations":365,"plain_text":364,"href":21},{"content":364,"link":21},"Unobtrusive animations. Cookie banners, announcement bars, and autoplay shouldn't cover content or trap the page.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":367,"type":36,"content":368,"bulleted_list_end":46},"40332a0f-f8ae-8104-b995-d6084e9ee87e",{"rich_text":369,"color":45},[370],{"type":40,"text":371,"annotations":373,"plain_text":372,"href":21},{"content":372,"link":21},"Uniform content for all user agents. Serve the same content to browsers and crawlers — no cloaking.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":375,"type":98,"content":376},"40332a0f-f8ae-81dd-993b-f96fcddbf4c5",{"rich_text":377,"is_toggleable":44,"color":45},[378],{"type":40,"text":379,"annotations":381,"plain_text":380,"href":21},{"content":380,"link":21},"Accessible",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":383},[384,392],{"id":385,"type":36,"content":386,"bulleted_list_start":46},"40332a0f-f8ae-81f2-92c5-d879ab9af9be",{"rich_text":387,"color":45},[388],{"type":40,"text":389,"annotations":391,"plain_text":390,"href":21},{"content":390,"link":21},"Use Accessible Rich Internet Applications (ARIA) landmarks and labels. Mark main, navigation, and footer so assistive tech — and some AI agents — can skip straight to the content.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":393,"type":36,"content":394,"bulleted_list_end":46},"40332a0f-f8ae-8170-abc1-e99d4d3b8de8",{"rich_text":395,"color":45},[396],{"type":40,"text":397,"annotations":399,"plain_text":398,"href":21},{"content":398,"link":21},"Adequate text-color contrast. Measure it against the Web Content Accessibility Guidelines (WCAG) standard; don't eyeball it.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":401,"type":98,"content":402},"40332a0f-f8ae-81f3-92b2-d96f25fdb077",{"rich_text":403,"is_toggleable":44,"color":45},[404],{"type":40,"text":405,"annotations":407,"plain_text":406,"href":21},{"content":406,"link":21},"Speed",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":409},[410,418,426,434,442,450,458],{"id":411,"type":36,"content":412,"bulleted_list_start":46},"40332a0f-f8ae-81d8-b892-c33d06a9fdf2",{"rich_text":413,"color":45},[414],{"type":40,"text":415,"annotations":417,"plain_text":416,"href":21},{"content":416,"link":21},"Third-party JS is minimal and deferred. Tag Manager, ad pixels, HubSpot, and product tours should load less, load later, and load where they're needed — third-party kilobytes are the usual mobile LCP killer.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":419,"type":36,"content":420},"40332a0f-f8ae-8171-9dc1-cb2a7538febe",{"rich_text":421,"color":45},[422],{"type":40,"text":423,"annotations":425,"plain_text":424,"href":21},{"content":424,"link":21},"JS executes efficiently. Long JavaScript execution shows up as \"Poor\" on lab reports; it draws from the same script budget as the item above.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":427,"type":36,"content":428},"40332a0f-f8ae-8171-a161-fe6f341f5b64",{"rich_text":429,"color":45},[430],{"type":40,"text":431,"annotations":433,"plain_text":432,"href":21},{"content":432,"link":21},"Content renders quickly. First Contentful Paint on mobile shouldn't be a sitewide fail. Fonts and blocking scripts are the usual cause.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":435,"type":36,"content":436},"40332a0f-f8ae-8161-8916-ce54d5bf357c",{"rich_text":437,"color":45},[438],{"type":40,"text":439,"annotations":441,"plain_text":440,"href":21},{"content":440,"link":21},"CSS is minified. Minify it, then delete unused CSS — shared Webflow or CMS stylesheets often ship hundreds of kilobytes per page.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":443,"type":36,"content":444},"40332a0f-f8ae-8176-872a-fda5dabf791b",{"rich_text":445,"color":45},[446],{"type":40,"text":447,"annotations":449,"plain_text":448,"href":21},{"content":448,"link":21},"JS is minified. Minifying JS is required but doesn't remove unused JavaScript, which still has to download and parse.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":451,"type":36,"content":452},"40332a0f-f8ae-81b9-ae4a-ffcbd4bd1cb2",{"rich_text":453,"color":45},[454],{"type":40,"text":455,"annotations":457,"plain_text":456,"href":21},{"content":456,"link":21},"Page text remains visible. Custom fonts need font-display: swap (or an equivalent) so text isn't invisible until the font loads.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":459,"type":36,"content":460,"bulleted_list_end":46},"40332a0f-f8ae-8182-b9c1-e4747066eb66",{"rich_text":461,"color":45},[462],{"type":40,"text":463,"annotations":465,"plain_text":464,"href":21},{"content":464,"link":21},"Images are compressed and correctly sized. Listing pages and hero art are where total image weight blows up — resize, compress, and use modern formats.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":467,"type":98,"content":468},"40332a0f-f8ae-8114-88ca-dbf1275b51ca",{"rich_text":469,"is_toggleable":44,"color":45},[470],{"type":40,"text":471,"annotations":473,"plain_text":472,"href":21},{"content":472,"link":21},"Nav",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":475},[476,484,492,500],{"id":477,"type":36,"content":478,"bulleted_list_start":46},"40332a0f-f8ae-8116-918b-d65259f3e3bd",{"rich_text":479,"color":45},[480],{"type":40,"text":481,"annotations":483,"plain_text":482,"href":21},{"content":482,"link":21},"Key content sits five clicks or less from home. Folder depth is a proxy, so important URLs shouldn't sit five levels down with no inlinks pointing to them.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":485,"type":36,"content":486},"40332a0f-f8ae-8153-9e76-f260a152f3b4",{"rich_text":487,"color":45},[488],{"type":40,"text":489,"annotations":491,"plain_text":490,"href":21},{"content":490,"link":21},"No server errors (5xx) on live pages. Any 5xx is a crawl and trust problem; fix hosting and origin errors before working through the rest of the audit.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":493,"type":36,"content":494},"40332a0f-f8ae-81d4-8e8b-d1195316540a",{"rich_text":495,"color":45},[496],{"type":40,"text":497,"annotations":499,"plain_text":498,"href":21},{"content":498,"link":21},"No external 4xx or 5xx links in content. Check your own short links, PDFs, and staging URLs first, then third-party link rot.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":501,"type":36,"content":502,"bulleted_list_end":46},"40332a0f-f8ae-8138-bcac-cbd92fe05601",{"rich_text":503,"color":45},[504],{"type":40,"text":505,"annotations":507,"plain_text":506,"href":21},{"content":506,"link":21},"Images have alt tags. Decorative images can have empty alt text; logos and informative images need real descriptions.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":509,"type":98,"content":510},"40332a0f-f8ae-812d-9a3a-d27ed60ac78f",{"rich_text":511,"is_toggleable":44,"color":45},[512],{"type":40,"text":513,"annotations":515,"plain_text":514,"href":21},{"content":514,"link":21},"Content",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":517},[518,526,534,542,550],{"id":519,"type":36,"content":520,"bulleted_list_start":46},"40332a0f-f8ae-81cf-9c18-d04a515ab0f1",{"rich_text":521,"color":45},[522],{"type":40,"text":523,"annotations":525,"plain_text":524,"href":21},{"content":524,"link":21},"Images have captions where they need them. Diagrams in articles often need a caption; UI icons usually don't.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":527,"type":36,"content":528},"40332a0f-f8ae-81da-bdf7-d3520e6aeceb",{"rich_text":529,"color":45},[530],{"type":40,"text":531,"annotations":533,"plain_text":532,"href":21},{"content":532,"link":21},"Canonical or hreflang tags handle duplicates. Parameter URLs, print views, and locale copies should canonicalize, or use hreflang if the content is genuinely translated.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":535,"type":36,"content":536},"40332a0f-f8ae-8106-b1f6-d7275a458ab5",{"rich_text":537,"color":45},[538],{"type":40,"text":539,"annotations":541,"plain_text":540,"href":21},{"content":540,"link":21},"Meta directives allow the key content. Money pages should be index, follow — don't let the blog get noindexed by accident.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":543,"type":36,"content":544},"40332a0f-f8ae-8190-9f54-e670919a71fb",{"rich_text":545,"color":45},[546],{"type":40,"text":547,"annotations":549,"plain_text":548,"href":21},{"content":548,"link":21},"Low-value content is noindexed. Thank-you pages, embed-only /cta/ routes, and gated form shells should be noindexed and dropped from the sitemap.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":551,"type":36,"content":552,"bulleted_list_end":46},"40332a0f-f8ae-8112-9e1b-e895e09e3b27",{"rich_text":553,"color":45},[554,558,564],{"type":40,"text":555,"annotations":557,"plain_text":556,"href":21},{"content":556,"link":21},"Open Graph tags (title, description, image, and type) belong on every shareable page because they drive social previews. Open Graph tags also get used as answer-engine surface area on some sites, even though no answer engine formally documents OG tags as a citation signal; the companion answer-engine optimization (AEO) checklist ",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":40,"text":559,"annotations":563,"plain_text":560,"href":562},{"content":560,"link":561},"covers that layer in more depth",{"url":562},"https://www.ercule.com/blog/getting-started-aeo",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":40,"text":565,"annotations":567,"plain_text":566,"href":21},{"content":566,"link":21},", since answer-engine optimization is a layer on top of SEO.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":569,"type":98,"content":570},"40332a0f-f8ae-8108-80f8-de894a26277d",{"rich_text":571,"is_toggleable":44,"color":45},[572],{"type":40,"text":573,"annotations":575,"plain_text":574,"href":21},{"content":574,"link":21},"Tags",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":577},[578,586,594,602],{"id":579,"type":36,"content":580,"bulleted_list_start":46},"40332a0f-f8ae-81c7-a402-f9c1607dd450",{"rich_text":581,"color":45},[582],{"type":40,"text":583,"annotations":585,"plain_text":584,"href":21},{"content":584,"link":21},"No title tags at 0 characters. Every live, indexable page needs a title element.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":587,"type":36,"content":588},"40332a0f-f8ae-8156-a9e7-da261e753efe",{"rich_text":589,"color":45},[590],{"type":40,"text":591,"annotations":593,"plain_text":592,"href":21},{"content":592,"link":21},"No description tags at 0 characters. Missing descriptions tend to cluster on leftover templates, so fix the template. Page-by-page edits miss the cluster.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":595,"type":36,"content":596},"40332a0f-f8ae-8144-9d54-fec285530f8a",{"rich_text":597,"color":45},[598],{"type":40,"text":599,"annotations":601,"plain_text":600,"href":21},{"content":600,"link":21},"Semantic heading order. H1, then H2, then H3. If the CMS forces a skipped heading level, go fix the CMS.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":603,"type":36,"content":604,"bulleted_list_end":46},"40332a0f-f8ae-8106-a694-c32006a868a6",{"rich_text":605,"color":45},[606],{"type":40,"text":607,"annotations":609,"plain_text":608,"href":21},{"content":608,"link":21},"A real, user-ready main CTA. The hero and header need a concrete next step. A dead \"Learn more\" that loops back to the homepage doesn't count.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":611,"type":98,"content":612},"40332a0f-f8ae-8128-9d39-cdcd72b43313",{"rich_text":613,"is_toggleable":44,"color":45},[614],{"type":40,"text":615,"annotations":617,"plain_text":616,"href":21},{"content":616,"link":21},"URLs",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":619},[620,628,636,644,652,660],{"id":621,"type":36,"content":622,"bulleted_list_start":46},"40332a0f-f8ae-81b2-9134-d5cc3e538cca",{"rich_text":623,"color":45},[624],{"type":40,"text":625,"annotations":627,"plain_text":626,"href":21},{"content":626,"link":21},"Logical, consistent URL structure. Short, lowercase, and foldered by meaning — /blog, /docs, /product.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":629,"type":36,"content":630},"40332a0f-f8ae-811d-9f7f-f76e71be3e03",{"rich_text":631,"color":45},[632],{"type":40,"text":633,"annotations":635,"plain_text":634,"href":21},{"content":634,"link":21},"No extra URL parameters creating duplicate pages. Tracking parameters shouldn't generate separately indexable copies.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":637,"type":36,"content":638},"40332a0f-f8ae-810a-bed0-df339d2ac627",{"rich_text":639,"color":45},[640],{"type":40,"text":641,"annotations":643,"plain_text":642,"href":21},{"content":642,"link":21},"Deliberate nofollow links. Nofollow should be a deliberate choice; a page-wide meta nofollow is rarely right for content you care about.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":645,"type":36,"content":646},"40332a0f-f8ae-815f-8666-eb6f2c41b2cc",{"rich_text":647,"color":45},[648],{"type":40,"text":649,"annotations":651,"plain_text":650,"href":21},{"content":650,"link":21},"No redirect loops. Loops and long hop chains waste crawl budget and break sharing.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":653,"type":36,"content":654},"40332a0f-f8ae-812f-8086-d9c298851d98",{"rich_text":655,"color":45},[656],{"type":40,"text":657,"annotations":659,"plain_text":658,"href":21},{"content":658,"link":21},"301 redirects for non-preferred URLs. Retired URLs and host variants need permanent 301s (or 308s). A later promise to redirect isn't enough.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":661,"type":36,"content":662,"bulleted_list_end":46},"40332a0f-f8ae-81ca-9ee7-eca143340e36",{"rich_text":663,"color":45},[664],{"type":40,"text":665,"annotations":667,"plain_text":666,"href":21},{"content":666,"link":21},"301/308 over 302 on pages that moved. A temporary 302 on a page that's moved keeps the old URL in play.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":669,"type":98,"content":670},"40332a0f-f8ae-818c-8752-d8efeb9336da",{"rich_text":671,"is_toggleable":44,"color":45},[672],{"type":40,"text":673,"annotations":675,"plain_text":674,"href":21},{"content":674,"link":21},"Search Console",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":677},[678,686,694,702,710,718,726,734,742],{"id":679,"type":36,"content":680,"bulleted_list_start":46},"40332a0f-f8ae-81c9-8630-f9941bf84654",{"rich_text":681,"color":45},[682],{"type":40,"text":683,"annotations":685,"plain_text":684,"href":21},{"content":684,"link":21},"A Google Search Console (GSC) property exists. Domain property preferred — you can't audit unqueryable data.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":687,"type":36,"content":688},"40332a0f-f8ae-8160-b317-f06b2f7e98ef",{"rich_text":689,"color":45},[690],{"type":40,"text":691,"annotations":693,"plain_text":692,"href":21},{"content":692,"link":21},"Sitemap URLs return \"success.\" Redirects and 404s don't belong in a sitemap.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":695,"type":36,"content":696},"40332a0f-f8ae-8152-8231-d0c397c9463f",{"rich_text":697,"color":45},[698],{"type":40,"text":699,"annotations":701,"plain_text":700,"href":21},{"content":700,"link":21},"GSC indexes pages found via sitemap. Pages Google found that you didn't submit point to either a missing sitemap entry or a junk-URL problem.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":703,"type":36,"content":704},"40332a0f-f8ae-81ca-acdd-d5a946d7eae3",{"rich_text":705,"color":45},[706],{"type":40,"text":707,"annotations":709,"plain_text":708,"href":21},{"content":708,"link":21},"All sitemaps are submitted and validated. Submit the sitemap you ship, and check its last-read date and errors.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":711,"type":36,"content":712},"40332a0f-f8ae-8124-9862-dbc2a260a917",{"rich_text":713,"color":45},[714],{"type":40,"text":715,"annotations":717,"plain_text":716,"href":21},{"content":716,"link":21},"No manual actions or security issues. Confirm this directly inside Search Console — it doesn't show up in a crawl.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":719,"type":36,"content":720},"40332a0f-f8ae-81a7-a820-c5e153f53b8c",{"rich_text":721,"color":45},[722],{"type":40,"text":723,"annotations":725,"plain_text":724,"href":21},{"content":724,"link":21},"Robots.txt allows the key content. Don't disallow the paths you want indexed, and allow the AI crawlers you care about.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":727,"type":36,"content":728},"40332a0f-f8ae-81dc-895e-d334600eed40",{"rich_text":729,"color":45},[730],{"type":40,"text":731,"annotations":733,"plain_text":732,"href":21},{"content":732,"link":21},"Robots.txt fetches successfully. It needs to return 200 so your directives are read — a 404 reports the absence of restrictions, so none of your rules apply.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":735,"type":36,"content":736},"40332a0f-f8ae-8193-8f20-d74b568fa490",{"rich_text":737,"color":45},[738],{"type":40,"text":739,"annotations":741,"plain_text":740,"href":21},{"content":740,"link":21},"Robots.txt is formatted correctly. A User-agent line with no rule is sloppy; add an explicit empty Disallow: or real rules.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":743,"type":36,"content":744,"bulleted_list_end":46},"40332a0f-f8ae-8138-a11a-f436e5b3e179",{"rich_text":745,"color":45},[746],{"type":40,"text":747,"annotations":749,"plain_text":748,"href":21},{"content":748,"link":21},"Sitemap URLs show up in the GSC index. Zero impressions can mean the URL is indexed and ignored — treat recordings, author pages, and thin hubs differently from product pages.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":751,"type":98,"content":752},"40332a0f-f8ae-816f-ac2c-f85bab55c398",{"rich_text":753,"is_toggleable":44,"color":45},[754],{"type":40,"text":755,"annotations":757,"plain_text":756,"href":21},{"content":756,"link":21},"Analytics and tags",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":759},[760,768,776,784,792,800,808,816,824],{"id":761,"type":36,"content":762,"bulleted_list_start":46},"40332a0f-f8ae-8101-9d31-f32599bfdadb",{"rich_text":763,"color":45},[764],{"type":40,"text":765,"annotations":767,"plain_text":766,"href":21},{"content":766,"link":21},"A Google Analytics 4 (GA4) property exists. One production stream for the marketing host; extra destinations double events and make every other number in the audit unreliable.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":769,"type":36,"content":770},"40332a0f-f8ae-815b-a70b-ea7b7c579637",{"rich_text":771,"color":45},[772],{"type":40,"text":773,"annotations":775,"plain_text":774,"href":21},{"content":774,"link":21},"GA4 retention is set to 14 months. Shorter retention deletes the exploration data you'll want next quarter.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":777,"type":36,"content":778},"40332a0f-f8ae-81d0-9ebf-ca71e985c4ee",{"rich_text":779,"color":45},[780],{"type":40,"text":781,"annotations":783,"plain_text":782,"href":21},{"content":782,"link":21},"The GA4 property name describes its scope. The name should list the sites and streams it covers.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":785,"type":36,"content":786},"40332a0f-f8ae-81f3-bc22-c77acf4199e9",{"rich_text":787,"color":45},[788],{"type":40,"text":789,"annotations":791,"plain_text":790,"href":21},{"content":790,"link":21},"Staging subdomains are limited. Webflow.io previews and staging apps should be filtered out or kept in a separate property.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":793,"type":36,"content":794},"40332a0f-f8ae-8165-b4bc-f0009c724655",{"rich_text":795,"color":45},[796],{"type":40,"text":797,"annotations":799,"plain_text":798,"href":21},{"content":798,"link":21},"Organic traffic matches sitemap content. Indexable pages with traffic belong in the sitemap; noindexed pages with traffic do not.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":801,"type":36,"content":802},"40332a0f-f8ae-8157-8ff6-c6e62b460c31",{"rich_text":803,"color":45},[804],{"type":40,"text":805,"annotations":807,"plain_text":806,"href":21},{"content":806,"link":21},"Search Console is linked in GA4. Linking it feeds query data into landing-page reports.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":809,"type":36,"content":810},"40332a0f-f8ae-811c-97ad-fa1a64225206",{"rich_text":811,"color":45},[812],{"type":40,"text":813,"annotations":815,"plain_text":814,"href":21},{"content":814,"link":21},"Google Ads is linked, if you spend. The Ads link belongs in the same property as everything else.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":817,"type":36,"content":818},"40332a0f-f8ae-8100-a449-fe233dad2043",{"rich_text":819,"color":45},[820],{"type":40,"text":821,"annotations":823,"plain_text":822,"href":21},{"content":822,"link":21},"Google Tag Manager (GTM) is configured once. One container, loaded once, on the templates you intend.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":825,"type":36,"content":826,"bulleted_list_end":46},"40332a0f-f8ae-8181-8e8b-e8a9fadf48f4",{"rich_text":827,"color":45},[828],{"type":40,"text":829,"annotations":831,"plain_text":830,"href":21},{"content":830,"link":21},"GTM containers are correctly scoped. Don't fire one brand's GA4 stream on another host, and don't embed a tool like HubSpot twice.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":833,"type":98,"content":834},"40332a0f-f8ae-818d-b440-e23a0a04eb3a",{"rich_text":835,"is_toggleable":44,"color":45},[836],{"type":40,"text":837,"annotations":839,"plain_text":838,"href":21},{"content":838,"link":21},"Structure",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":841},[842,850,858,866],{"id":843,"type":36,"content":844,"bulleted_list_start":46},"40332a0f-f8ae-810a-8dd9-fb809d6a5514",{"rich_text":845,"color":45},[846],{"type":40,"text":847,"annotations":849,"plain_text":848,"href":21},{"content":848,"link":21},"Structured data validates. Organization, Article or BlogPosting, Product, FAQ, and Event markup, as they apply — invalid or duplicated JSON-LD (the structured-data markup format search engines read) is the defect to flag here regardless of type. FAQ rich results show up less often on typical marketing and SaaS pages than they used to, so still validate FAQ markup for correctness, but don't count on a rich-result payoff from implementing it.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":851,"type":36,"content":852},"40332a0f-f8ae-81fd-9e56-ff990f823f6f",{"rich_text":853,"color":45},[854],{"type":40,"text":855,"annotations":857,"plain_text":856,"href":21},{"content":856,"link":21},"Thin content pages are fixed or dropped. Recordings, author bios, and empty hubs under roughly 100 words need a real summary or should leave the index.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":859,"type":36,"content":860},"40332a0f-f8ae-81b3-8efa-d09394957186",{"rich_text":861,"color":45},[862],{"type":40,"text":863,"annotations":865,"plain_text":864,"href":21},{"content":864,"link":21},"Junk pages aren't indexable. CTA embeds and form gates that show up in the sitemap are junk; noindex and exclude them.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":867,"type":36,"content":868,"bulleted_list_end":46},"40332a0f-f8ae-813c-a486-c86045bde0ba",{"rich_text":869,"color":45},[870],{"type":40,"text":871,"annotations":873,"plain_text":872,"href":21},{"content":872,"link":21},"No pages with a single internal link. Listing pages that inject cards with JavaScript can leave the rest of the site orphaned in the raw HTML. Render the first page of each list in the server response so nothing's left stranded.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":875,"type":98,"content":876},"40332a0f-f8ae-819b-acab-d245a4f7f608",{"rich_text":877,"is_toggleable":44,"color":45},[878],{"type":40,"text":879,"annotations":881,"plain_text":880,"href":21},{"content":880,"link":21},"Prioritizing the backlog",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":883,"type":81,"content":884},"40332a0f-f8ae-8160-893c-de3f577751ea",{"rich_text":885,"icon":21,"color":45},[886],{"type":40,"text":887,"annotations":889,"plain_text":888,"href":21},{"content":888,"link":21},"60-some checks is a lot to hand a developer at once, so it helps to triage before you file tickets. This is our prioritization, based on experience. Anything in the top 10 that blocks crawling or indexing — broken canonicals, missing sitemaps, dead internal links — goes first, because Google has to find and understand the page before the other fixes help. Speed and analytics misconfiguration come next; they compound over months without blocking indexing. Content-level fixes like captions, alt text, and duplicate descriptions can usually sit in a standing backlog that gets worked a few items at a time.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":891,"type":81,"content":892},"40332a0f-f8ae-8170-bc66-f8b0efad476b",{"rich_text":893,"icon":21,"color":45},[894,898,904],{"type":40,"text":895,"annotations":897,"plain_text":896,"href":21},{"content":896,"link":21},"Keeping a spreadsheet of every URL and its status keeps that triage honest, instead of a one-time PDF that sits unused. If you want the crawl setup and scoring sheet behind this checklist, we walk through it in ercule' ",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":40,"text":899,"annotations":903,"plain_text":900,"href":902},{"content":900,"link":901},"technical SEO audit template",{"url":902},"https://www.ercule.com/blog/technical-audit-template",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":40,"text":905,"annotations":907,"plain_text":906,"href":21},{"content":906,"link":21},".",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":909,"type":98,"content":910},"40332a0f-f8ae-815e-97b0-c315ca24c1df",{"rich_text":911,"is_toggleable":44,"color":45},[912],{"type":40,"text":913,"annotations":915,"plain_text":914,"href":21},{"content":914,"link":21},"Keep the checklist current",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":917,"type":81,"content":918},"40332a0f-f8ae-81e6-a015-eb619724731b",{"rich_text":919,"icon":21,"color":45},[920],{"type":40,"text":921,"annotations":923,"plain_text":922,"href":21},{"content":922,"link":21},"Sites add pages, swap CMS templates, and pick up new third-party scripts constantly, and each of those can reopen an item you already fixed, so this checklist isn't a one-time pass. Re-running the full list on a cadence, beyond after a migration or traffic drop, keeps the audit current.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":925,"type":81,"content":926},"40332a0f-f8ae-8178-b5f2-d6968d18b687",{"rich_text":927,"icon":21,"color":45},[928,932,938],{"type":40,"text":929,"annotations":931,"plain_text":930,"href":21},{"content":930,"link":21},"Technical health and answer-engine visibility increasingly ",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":40,"text":933,"annotations":937,"plain_text":934,"href":936},{"content":934,"link":935},"overlap",{"url":936},"https://www.ercule.com/services/seo-and-geo",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":40,"text":939,"annotations":941,"plain_text":940,"href":21},{"content":940,"link":21},". Treat this checklist as the crawl-and-index work, and re-run it whenever you re-run the rest of site health.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":943,"type":98,"content":944},"40332a0f-f8ae-8137-bdbd-c59c94d63991",{"rich_text":945,"is_toggleable":44,"color":45},[946],{"type":40,"text":947,"annotations":949,"plain_text":948,"href":21},{"content":948,"link":21},"Frequently asked questions",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":951,"type":107,"content":952},"40332a0f-f8ae-81d5-958a-fc99af786eed",{"rich_text":953,"is_toggleable":44,"color":45},[954],{"type":40,"text":955,"annotations":957,"plain_text":956,"href":21},{"content":956,"link":21},"How is a technical SEO audit different from an on-page SEO checklist?",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":959,"type":81,"content":960},"40332a0f-f8ae-815f-8169-f1166430ba01",{"rich_text":961,"icon":21,"color":45},[962],{"type":40,"text":963,"annotations":965,"plain_text":964,"href":21},{"content":964,"link":21},"This checklist is about Google's (and other crawlers') ability to find, read, and trust the site at all — crawlability, canonicals, sitemaps, redirects, Core Web Vitals. An on-page checklist is closer to the content layer: keyword targeting, copy structure, internal linking strategy for a given page. The two overlap at the edges (title tags and headings show up in both conversations), but a site can get on-page work right and still lose rankings to a broken sitemap or a page stuck under a performance score of 30.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":967,"type":107,"content":968},"40332a0f-f8ae-8169-8b32-f558d467a808",{"rich_text":969,"is_toggleable":44,"color":45},[970],{"type":40,"text":971,"annotations":973,"plain_text":972,"href":21},{"content":972,"link":21},"How often should we re-run the full audit?",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":975,"type":81,"content":976},"40332a0f-f8ae-818f-9137-c59ea1f7f087",{"rich_text":977,"icon":21,"color":45},[978],{"type":40,"text":979,"annotations":981,"plain_text":980,"href":21},{"content":980,"link":21},"Treat it as a living checklist you revisit on a cadence. New CMS templates, added third-party scripts, and site migrations can all reopen an item that was already fixed, so re-running the list on a regular cadence keeps findings current.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":983,"type":107,"content":984},"40332a0f-f8ae-819a-8607-f42984dedfa1",{"rich_text":985,"is_toggleable":44,"color":45},[986],{"type":40,"text":987,"annotations":989,"plain_text":988,"href":21},{"content":988,"link":21},"Which items should block a launch versus go into the developer backlog?",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":991,"type":81,"content":992},"40332a0f-f8ae-8134-81d2-df3caa6e6369",{"rich_text":993,"icon":21,"color":45},[994],{"type":40,"text":995,"annotations":997,"plain_text":996,"href":21},{"content":996,"link":21},"The top 10 items are the ones worth treating as launch blockers, since they decide Google's ability to crawl, index, and understand the page: broken canonicals, missing sitemaps, dead internal links, duplicate titles, and sub-30 mobile speed scores fall in that group. The remaining roughly 60 checks — usability, accessibility details, analytics configuration, structured data — are real findings, but they're usually better worked as a standing, prioritized backlog.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":999,"type":107,"content":1000},"40332a0f-f8ae-8117-8731-f5ec3dc5be79",{"rich_text":1001,"is_toggleable":44,"color":45},[1002],{"type":40,"text":1003,"annotations":1005,"plain_text":1004,"href":21},{"content":1004,"link":21},"What counts as a \"good\" mobile page speed score?",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1007,"type":81,"content":1008},"40332a0f-f8ae-814d-b797-e95ed6e7ce69",{"rich_text":1009,"icon":21,"color":45},[1010],{"type":40,"text":1011,"annotations":1013,"plain_text":1012,"href":21},{"content":1012,"link":21},"Aim to stay above a performance score of 30 — ercule' internal ticketing threshold, distinct from any official Google or Lighthouse pass/fail line, as covered above — and keep field Largest Contentful Paint (measured through CrUX, Google's real-user field data) close to the 2.5-second target. When a page falls short, the cause is usually one of the Speed-section items above: unminified or unused CSS and JS, oversized images, or third-party scripts loading too early.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1015,"type":107,"content":1016},"40332a0f-f8ae-816a-a0ab-dd55c97f02d6",{"rich_text":1017,"is_toggleable":44,"color":45},[1018],{"type":40,"text":1019,"annotations":1021,"plain_text":1020,"href":21},{"content":1020,"link":21},"Do we need a separate checklist for AEO or other agent-facing issues?",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1023,"type":81,"content":1024},"40332a0f-f8ae-8170-9515-d33e0b45aa2c",{"rich_text":1025,"icon":21,"color":45},[1026],{"type":40,"text":1027,"annotations":1029,"plain_text":1028,"href":21},{"content":1028,"link":21},"Some of it, yes — answer-engine optimization is a complementary layer on top of this checklist. Open Graph tags are one example, covered in the Content section above. We cover that subsystem in more depth in the post on getting started with AEO, and a similar companion-checklist mindset applies there without duplicating everything in this technical SEO list.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1031,"type":107,"content":1032},"40332a0f-f8ae-81ed-a12e-fe38a5109813",{"rich_text":1033,"is_toggleable":44,"color":45},[1034],{"type":40,"text":1035,"annotations":1037,"plain_text":1036,"href":21},{"content":1036,"link":21},"What's the fastest way to find duplicate title tags and meta descriptions?",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1039,"type":81,"content":1040},"40332a0f-f8ae-81d9-a8d8-e17a760f51af",{"rich_text":1041,"icon":21,"color":45},[1042],{"type":40,"text":1043,"annotations":1045,"plain_text":1044,"href":21},{"content":1044,"link":21},"Crawl every indexable template and compare title and description strings directly instead of checking pages one at a time. Duplicates usually cluster by template — author hubs that all say \"About the author,\" webinar pages sharing a title with their recording, or a CMS default that wasn't overridden — so fixing the template fixes every page built from it at once.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1047,"type":107,"content":1048},"40332a0f-f8ae-8183-8da6-cf56a018563e",{"rich_text":1049,"is_toggleable":44,"color":45},[1050],{"type":40,"text":1051,"annotations":1053,"plain_text":1052,"href":21},{"content":1052,"link":21},"Why does GA4 data retention matter for an SEO audit?",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1055,"type":81,"content":1056},"40332a0f-f8ae-8155-849e-d2a275229f1d",{"rich_text":1057,"icon":21,"color":45},[1058],{"type":40,"text":1059,"annotations":1061,"plain_text":1060,"href":21},{"content":1060,"link":21},"If GA4 retention is set below 14 months, exploration reports older than that window get deleted, which costs you the year-over-year comparison you need most. It's a quick setting to check and an easy one to get wrong by default, since GA4's default retention window is shorter than that.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1063,"type":107,"content":1064},"40332a0f-f8ae-81b0-a8e0-e0eaf20aee08",{"rich_text":1065,"is_toggleable":44,"color":45},[1066],{"type":40,"text":1067,"annotations":1069,"plain_text":1068,"href":21},{"content":1068,"link":21},"What's the minimum Search Console setup before starting an audit?",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1071,"type":81,"content":1072},"40332a0f-f8ae-816f-8891-c5291bab86ce",{"rich_text":1073,"icon":21,"color":45},[1074],{"type":40,"text":1075,"annotations":1077,"plain_text":1076,"href":21},{"content":1076,"link":21},"At minimum: a verified domain property (you can't audit unqueryable data), a submitted and validated sitemap that returns \"success\" on every URL, and a manual check for manual actions or security issues, since that status doesn't show up in a crawl. Confirm a successful robots.txt fetch and correct formatting at the same time, since a blocked or malformed robots.txt can undercut everything else in the audit.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1079,"type":98,"content":1080},"40332a0f-f8ae-818b-97a6-c2dde44b0f3a",{"rich_text":1081,"is_toggleable":44,"color":45},[1082],{"type":40,"text":1083,"annotations":1085,"plain_text":1084,"href":21},{"content":1084,"link":21},"Related reading",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":32,"children":1087},[1088,1101],{"id":1089,"type":36,"content":1090,"bulleted_list_start":46},"40332a0f-f8ae-81d3-8ece-f22999793b3c",{"rich_text":1091,"color":45},[1092,1097],{"type":40,"text":1093,"annotations":1096,"plain_text":1094,"href":902},{"content":1094,"link":1095},"Technical SEO audit: how-to and template",{"url":902},{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":40,"text":1098,"annotations":1100,"plain_text":1099,"href":21},{"content":1099,"link":21}," — the spreadsheet and crawl setup that turns this checklist into a trackable backlog.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"id":1102,"type":36,"content":1103,"bulleted_list_end":46},"40332a0f-f8ae-81a5-929e-d209cdb661ec",{"rich_text":1104,"color":45},[1105,1110],{"type":40,"text":1106,"annotations":1109,"plain_text":1107,"href":562},{"content":1107,"link":1108},"Getting started with AEO",{"url":562},{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},{"type":40,"text":1111,"annotations":1113,"plain_text":1112,"href":21},{"content":1112,"link":21}," — the way answer-engine optimization builds on the crawlability and markup work covered here.",{"bold":44,"italic":44,"strikethrough":44,"underline":44,"code":44,"color":45},1792822454086]