[{"data":1,"prerenderedAt":2125},["ShallowReactive",2],{"blog-post-/blog/product-update-ai-friendly-checker":3,"blog-all-posts":258},{"id":4,"title":5,"author":6,"body":7,"category":239,"cover":240,"coverAlt":241,"description":242,"draft":243,"extension":244,"featured":243,"meta":245,"navigation":240,"path":246,"publishedAt":247,"seo":248,"stem":249,"tags":250,"updatedAt":256,"__hash__":257},"blog/blog/product-update-ai-friendly-checker.md","What's New: The AI-Friendly Checker, Smarter Meta Audits and Canonical Checks","SeoSitemap.app",{"type":8,"value":9,"toc":226},"minimark",[10,14,17,22,31,39,75,83,88,99,103,111,114,118,125,141,145,154,158,169,177,181],[11,12,13],"p",{},"We've shipped a run of updates over the last few weeks, and rather than let them disappear silently into production, we want to start writing them up. This is the first of what will be a regular changelog: the fixes and features that are already live, what they do, and why we built them.",[11,15,16],{},"Most of this batch points in one direction — making the tool useful in a world where AI assistants, not just search engines, read your pages. But there are some sharper audit checks in here too. Everything below is live right now; point the scanner at your sitemap and you'll see it.",[18,19,21],"h2",{"id":20},"the-big-one-an-ai-friendly-checker","The big one: an AI-Friendly Checker",[11,23,24,25,30],{},"The headline addition is a brand-new tool: the ",[26,27,29],"a",{"href":28},"/ai-friendly-checker","AI-Friendly Checker",". It scores how well each page on your site can be read, understood and cited by AI crawlers and answer engines like ChatGPT, Perplexity and Google's AI Overviews.",[11,32,33,34,38],{},"The key insight it's built around is that ",[35,36,37],"strong",{},"most AI crawlers don't run JavaScript"," — they read the raw HTML your server returns. So the checker fetches each page the same way, without executing scripts, and scores what it can actually extract. Each page gets a 0–100 readiness score broken down across the signals that matter:",[40,41,42,49,60,69],"ul",{},[43,44,45,48],"li",{},[35,46,47],{},"Extractable content"," — how much real text is in the raw HTML. A near-empty body is the biggest red flag, because it usually means the page is client-rendered and invisible to crawlers that don't run JavaScript.",[43,50,51,54,55,59],{},[35,52,53],{},"Structured data"," — whether the page ships JSON-LD (",[56,57,58],"code",{},"schema.org",") for machines to lift clean facts from.",[43,61,62,68],{},[35,63,64,65],{},"Title and description, heading outline, and a semantic ",[56,66,67],{},"\u003Cmain>"," — the structure a model uses to parse and represent your page.",[43,70,71,74],{},[35,72,73],{},"A declared language and a freshness signal"," — so assistants can answer in the right language and favour current content.",[11,76,77,78,82],{},"Click any score and it expands into a per-check breakdown so you can see exactly what passed, what's borderline, and what failed. If you want the full background on why these signals matter, we wrote a companion guide on ",[26,79,81],{"href":80},"/blog/generative-engine-optimization","generative engine optimisation",".",[84,85,87],"h3",{"id":86},"site-wide-ai-signals-too","Site-wide AI signals too",[11,89,90,91,94,95,98],{},"Two things that matter for AI can't be seen on any single page, so the checker handles them once per scan at the domain level. It reports whether you publish an ",[56,92,93],{},"llms.txt"," (a curated map for language models), and whether your ",[56,96,97],{},"robots.txt"," allows the major AI crawlers — GPTBot, ClaudeBot, PerplexityBot, Google-Extended and others — or blocks them. Plenty of sites block AI bots by accident in a copied robots file; now you can see at a glance whether yours does.",[18,100,102],{"id":101},"smarter-meta-audits-at-a-glance","Smarter meta audits at a glance",[11,104,105,106,110],{},"The meta audit got a usability upgrade that we'd wanted for a while. Previously, when you ran a ",[26,107,109],{"href":108},"/meta-tags-checker","meta tags audit",", the results table just showed a flat \"Yes\" to say metadata had been collected — which told you nothing about whether it was any good.",[11,112,113],{},"Now that column is a colour-coded summary chip for each page: green when everything's clean, amber when there are warnings, red when something critical is missing. Click it and it expands into a full per-field breakdown — title, description, canonical, robots, Open Graph and Twitter — each with its own status and a short note (for example, \"Title — 72 chars, over the 60 limit\"). It's the difference between knowing metadata exists and knowing whether it's actually working, without having to export a CSV to find out.",[18,115,117],{"id":116},"canonical-checks-that-actually-catch-problems","Canonical checks that actually catch problems",[11,119,120,121,124],{},"This one started as a gap a user spotted, and they were right. The scanner was reading each page's ",[56,122,123],{},"\u003Clink rel=\"canonical\">"," but never actually checking it — so a missing canonical, or one pointing at the wrong URL, passed completely silently.",[11,126,127,128,131,132,135,136,140],{},"That's fixed. The meta audit now validates canonicals two ways. First, ",[35,129,130],{},"presence",": pages with no canonical tag get flagged. Second, and more importantly, ",[35,133,134],{},"self-reference",": if a page's canonical points at a ",[137,138,139],"em",{},"different"," URL than the page itself, we flag it — because that's how a page quietly hands its ranking signals to another address, or disappears from the index entirely. The comparison is deliberately forgiving about the things that don't matter (an http-to-https upgrade, a trailing slash, a dropped tracking parameter all count as self-referential) so you only see the mismatches that are genuinely worth investigating.",[18,142,144],{"id":143},"we-made-the-site-itself-ai-friendly","We made the site itself AI-friendly",[11,146,147,148,150,151,153],{},"In the spirit of eating our own cooking, we also applied the advice to ourselves. SeoSitemap.app now publishes its own ",[56,149,93],{},", and our ",[56,152,97],{}," explicitly welcomes the major AI crawlers. It's a small thing, but it would be a bit awkward to ship an AI-friendliness checker and score badly on our own tool — and now we don't.",[18,155,157],{"id":156},"getting-the-data-out","Getting the data out",[11,159,160,161,164,165,168],{},"A quick reminder on exports, since they pair well with the new checks. Every scan can be exported three ways: a full per-URL CSV inventory, an ",[35,162,163],{},"issues-only CSV"," with one row per problem (handy for filtering and assigning work in a spreadsheet), and a shareable ",[35,166,167],{},"HTML report",". The AI readiness score and its per-check results now ride along in the CSV export too, so you can track readiness across a whole site over time.",[11,170,171,172,176],{},"If you're auditing a large site, remember the scanner pulls every URL from your ",[26,173,175],{"href":174},"/sitemap-checker","sitemap"," and audits up to 500 pages per run — so a complete, valid sitemap is the thing that determines how much of your site actually gets checked.",[18,178,180],{"id":179},"key-takeaways","Key takeaways",[40,182,183,197,203,209,220],{},[43,184,185,190,191,193,194,196],{},[35,186,187,188],{},"The new ",[26,189,29],{"href":28}," scores every page for how readable it is to AI crawlers — extractable text, structured data, semantics and freshness — plus site-wide ",[56,192,97],{}," and ",[56,195,93],{}," checks.",[43,198,199,202],{},[35,200,201],{},"The meta audit results"," now show a colour-coded summary chip per page that expands into a full per-field breakdown, instead of a flat \"collected\" flag.",[43,204,205,208],{},[35,206,207],{},"Canonical tags are now validated"," for presence and self-reference, catching missing canonicals and ones that point at the wrong URL.",[43,210,211,214,215,217,218,82],{},[35,212,213],{},"We made our own site AI-friendly"," with an ",[56,216,93],{}," and explicit AI-crawler access in ",[56,219,97],{},[43,221,222,225],{},[35,223,224],{},"Exports now include the AI readiness score",", alongside the existing CSV inventory, issues CSV and shareable HTML report.",{"title":227,"searchDepth":228,"depth":228,"links":229},"",2,[230,234,235,236,237,238],{"id":20,"depth":228,"text":21,"children":231},[232],{"id":86,"depth":233,"text":87},3,{"id":101,"depth":228,"text":102},{"id":116,"depth":228,"text":117},{"id":143,"depth":228,"text":144},{"id":156,"depth":228,"text":157},{"id":179,"depth":228,"text":180},"product-updates",true,"What's New: The AI-Friendly Checker, Smarter Meta Audits and Canonical Checks — SeoSitemap.app blog cover","A roundup of what we've shipped recently — a new AI-Friendly Checker, an interactive meta summary, real canonical validation, and AI-crawler discoverability.",false,"md",{},"/blog/product-update-ai-friendly-checker","2026-06-21",{"title":5,"description":242},"blog/product-update-ai-friendly-checker",[251,252,253,254,255],"product-update","ai-friendly-checker","meta-tags","canonical","changelog",null,"1sNaYldXmd01a-EzM09Sik-4TPMbyKLPaMB4TwduQyk",[259,612,752,1037,1381,1616,1834],{"id":260,"title":261,"author":6,"body":262,"category":600,"cover":240,"coverAlt":601,"description":602,"draft":243,"extension":244,"featured":243,"meta":603,"navigation":240,"path":80,"publishedAt":247,"seo":604,"stem":605,"tags":606,"updatedAt":256,"__hash__":611},"blog/blog/generative-engine-optimization.md","What Is GEO (Generative Engine Optimization)? How to Make Your Site AI-Friendly",{"type":8,"value":263,"toc":583},[264,267,270,274,281,288,292,295,299,310,317,323,327,330,333,357,361,383,387,398,402,405,409,432,435,443,454,458,461,525,536,538],[11,265,266],{},"A growing share of people no longer scroll a page of blue links to get an answer — they ask ChatGPT, Perplexity, or Google's AI Overviews, read the summary, and only sometimes click through. If your page isn't readable to the systems writing those answers, you're invisible in a channel that's quietly eating into classic search traffic. Optimising for it has a name: Generative Engine Optimization, or GEO.",[11,268,269],{},"The good news is that GEO isn't a separate discipline you have to learn from scratch. It overlaps heavily with the technical SEO you already do — clean structure, real text, machine-readable metadata. This guide explains what GEO actually is, why so many sites are accidentally invisible to AI crawlers, and the concrete things that make a page AI-friendly, ending with a checklist you can run today.",[18,271,273],{"id":272},"what-geo-actually-is-and-aeo","What GEO actually is (and AEO)",[11,275,276,277,280],{},"Generative Engine Optimization is the practice of making your content easy for AI systems to read, understand, and cite. You'll also see it called ",[35,278,279],{},"AEO"," (Answer Engine Optimization) — the terms are used more or less interchangeably, and the distinction rarely matters in practice. Both describe the same shift: optimising not just for a ranking position, but for being the source an AI model quotes when it answers a question.",[11,282,283,284,287],{},"It helps to be clear about what GEO is ",[137,285,286],{},"not",". It isn't a magic switch that gets you mentioned, and it isn't keyword stuffing for robots. AI models still judge content on quality, relevance, and authority, exactly like search engines do. What GEO covers is the technical groundwork — making sure that when a model does want to use your page, nothing stops it from reading and trusting what's there. Think of it as removing the blockers, not buying a guaranteed mention.",[18,289,291],{"id":290},"why-ai-crawlers-often-cant-see-your-content","Why AI crawlers often can't see your content",[11,293,294],{},"Here's the single most important thing to understand, because it catches out a surprising number of modern sites.",[84,296,298],{"id":297},"the-javascript-problem","The JavaScript problem",[11,300,301,302,305,306,309],{},"Most AI crawlers fetch the ",[35,303,304],{},"raw HTML"," your server returns and do not run JavaScript the way a browser does. A regular visitor's browser downloads your page, executes the framework, and ",[137,307,308],{},"then"," renders the content. An AI crawler often skips that last step entirely — it reads the HTML as delivered and moves on.",[11,311,312,313,316],{},"If your site is a single-page application that renders its content client-side, the raw HTML can be little more than an empty ",[56,314,315],{},"\u003Cdiv id=\"app\">"," and a script tag. A human sees a full article; the crawler sees a blank page. You can have brilliant content and still be completely absent from AI answers, simply because the words never made it into the document the crawler actually read.",[11,318,319,320,322],{},"The fix is to make sure your real content exists in the server response: server-side rendering (SSR), static site generation (SSG), or pre-rendering. If you're not sure which camp your site falls into, the quickest test is to view the raw HTML — fetch the page with something that doesn't execute JavaScript and check whether the body text is actually there. That's exactly the first thing our ",[26,321,29],{"href":28}," measures: it reads each page the way a crawler does and flags any that come back nearly empty.",[18,324,326],{"id":325},"the-building-blocks-of-an-ai-friendly-page","The building blocks of an AI-friendly page",[11,328,329],{},"Once your content is genuinely present in the HTML, a few things make it easier for a model to parse and represent.",[84,331,53],{"id":332},"structured-data",[11,334,335,336,338,339,342,343,342,346,342,349,352,353,356],{},"JSON-LD (the ",[56,337,58],{}," vocabulary) is the most reliable way to hand a machine clean, unambiguous facts about your page — what it is, who wrote it, when it was updated, what questions it answers. Instead of forcing a model to infer these things from prose, you state them directly. It's not a ranking lever, but it measurably lowers the chance of the model getting your details wrong, and the common types (",[56,340,341],{},"Article",", ",[56,344,345],{},"FAQPage",[56,347,348],{},"Organization",[56,350,351],{},"Product",") are cheap to add. While you're auditing your metadata, our ",[26,354,355],{"href":108},"meta tags checker"," will also flag the title, description and canonical issues that affect how your page gets summarised.",[84,358,360],{"id":359},"clean-semantics-and-headings","Clean semantics and headings",[11,362,363,364,367,368,371,372,375,376,378,379,382],{},"AI models lean on document structure to understand a page. A single, clear ",[56,365,366],{},"\u003Ch1>",", headings that don't skip levels (no ",[56,369,370],{},"\u003Ch2>"," jumping straight to ",[56,373,374],{},"\u003Ch4>","), and a ",[56,377,67],{}," or ",[56,380,381],{},"\u003Carticle>"," element marking where the real content lives all help a model separate substance from boilerplate. This is the same heading hygiene that classic SEO rewards, so you're rarely doing extra work — you're just being rewarded twice.",[84,384,386],{"id":385},"a-freshness-signal","A freshness signal",[11,388,389,390,393,394,397],{},"Answer engines tend to favour current content, and they look for evidence of it: a visible published or modified date, a ",[56,391,392],{},"dateModified"," in your structured data, or a ",[56,395,396],{},"\u003Ctime>"," element. If your pages carry no date signal at all, you're handing the model no way to tell whether your information is six days or six years old.",[18,399,401],{"id":400},"site-wide-signals-robotstxt-and-llmstxt","Site-wide signals: robots.txt and llms.txt",[11,403,404],{},"Two files sit above any individual page and shape how AI systems treat your whole domain.",[84,406,408],{"id":407},"letting-ai-crawlers-in","Letting AI crawlers in",[11,410,411,412,414,415,342,418,342,421,342,424,427,428,431],{},"Your ",[56,413,97],{}," decides which crawlers may fetch your site, and that now includes AI user-agents — ",[56,416,417],{},"GPTBot",[56,419,420],{},"ClaudeBot",[56,422,423],{},"PerplexityBot",[56,425,426],{},"Google-Extended"," and others. Whether to allow them is a genuine business decision: allowing them lets your content appear in AI answers and get cited; blocking them keeps your content out of those systems. Neither is wrong. What ",[137,429,430],{},"is"," a mistake is blocking them by accident in a copied-and-pasted robots file, or assuming you allow them without checking. Decide on purpose, then confirm the file matches the decision.",[84,433,93],{"id":434},"llmstxt",[11,436,437,439,440,442],{},[56,438,93],{}," is a proposed standard (from llmstxt.org): a curated Markdown file at the root of your site that gives language models a clean map of your most important pages. It's worth being honest here — the major AI crawlers don't officially consume ",[56,441,93],{}," yet, so treat it as a cheap, low-risk signal and a statement of intent rather than a guaranteed lever. It costs almost nothing to publish, and for content-led sites it's a tidy way to point models at the pages you most want understood.",[11,444,445,446,448,449,451,452,82],{},"Both of these are domain-level rather than page-level, so they're easy to forget when you're auditing one URL at a time. Our ",[26,447,29],{"href":28}," checks them once per scan, reporting whether your ",[56,450,93],{}," exists and whether each major AI crawler is allowed or blocked in ",[56,453,97],{},[18,455,457],{"id":456},"a-practical-ai-friendliness-checklist","A practical AI-friendliness checklist",[11,459,460],{},"If you want a quick pass over your own site, work through this:",[40,462,463,469,483,493,499,508,517],{},[43,464,465,468],{},[35,466,467],{},"Render content server-side."," View the raw HTML and confirm your main text is actually in it — not injected later by JavaScript.",[43,470,471,474,475,378,477,479,480,482],{},[35,472,473],{},"Add structured data."," Use JSON-LD for at least ",[56,476,341],{},[56,478,345],{},", plus ",[56,481,348],{}," on your home page.",[43,484,485,488,489,378,491,82],{},[35,486,487],{},"Keep one clean H1 and a logical heading outline."," No skipped levels; wrap the main content in ",[56,490,67],{},[56,492,381],{},[43,494,495,498],{},[35,496,497],{},"Write a real title and meta description"," for every page — they're what a model is most likely to quote verbatim.",[43,500,501,504,505,507],{},[35,502,503],{},"Expose a freshness signal"," — a visible date and a ",[56,506,392],{}," in your schema.",[43,509,510,516],{},[35,511,512,513,515],{},"Check ",[56,514,97],{}," on purpose."," Decide whether you want AI crawlers in, then make the file say so.",[43,518,519,524],{},[35,520,521,522],{},"Consider publishing ",[56,523,93],{}," — low effort, on-brand for a content site, even if its payoff is still emerging.",[11,526,527,528,530,531,193,533,535],{},"You don't have to grade every page by hand. Point the ",[26,529,29],{"href":28}," at your sitemap and it scores each page across these signals — extractable content, structured data, metadata, semantics and freshness — and runs the site-wide ",[56,532,97],{},[56,534,93],{}," checks in one pass.",[18,537,180],{"id":179},[40,539,540,546,552,558,566,574],{},[43,541,542,545],{},[35,543,544],{},"GEO (or AEO) is about making your content readable and citable by AI assistants"," — the technical groundwork, not a guaranteed mention.",[43,547,548,551],{},[35,549,550],{},"The biggest trap is client-side rendering:"," most AI crawlers don't run JavaScript, so content that only appears in the browser is invisible to them. Render it server-side.",[43,553,554,557],{},[35,555,556],{},"Structured data, a clean heading outline, real metadata and a freshness signal"," all help a model parse and represent your page correctly.",[43,559,560,565],{},[35,561,562,564],{},[56,563,97],{}," controls AI-crawler access"," — decide whether to allow GPTBot, ClaudeBot and friends deliberately, and confirm the file matches.",[43,567,568,573],{},[35,569,570,572],{},[56,571,93],{}," is a cheap, on-brand signal"," worth publishing, even though major crawlers don't officially consume it yet.",[43,575,576,579,580,582],{},[35,577,578],{},"You can audit all of this at once"," with our ",[26,581,29],{"href":28},", which scores each page and checks your site-wide AI signals in a single scan.",{"title":227,"searchDepth":228,"depth":228,"links":584},[585,586,589,594,598,599],{"id":272,"depth":228,"text":273},{"id":290,"depth":228,"text":291,"children":587},[588],{"id":297,"depth":233,"text":298},{"id":325,"depth":228,"text":326,"children":590},[591,592,593],{"id":332,"depth":233,"text":53},{"id":359,"depth":233,"text":360},{"id":385,"depth":233,"text":386},{"id":400,"depth":228,"text":401,"children":595},[596,597],{"id":407,"depth":233,"text":408},{"id":434,"depth":233,"text":93},{"id":456,"depth":228,"text":457},{"id":179,"depth":228,"text":180},"technical-seo","What Is GEO (Generative Engine Optimization)? How to Make Your Site AI-Friendly — SeoSitemap.app blog cover","A practical guide to Generative Engine Optimization: why AI crawlers can't see JavaScript-rendered pages, and how structured data, llms.txt and robots.txt make your site AI-friendly.",{},{"title":261,"description":602},"blog/generative-engine-optimization",[607,608,609,610,332],"generative-engine-optimization","ai-seo","llms-txt","ai-crawlers","XDUEMRjL9uigeMGPI-llZk-txrwvx_ovw1abQqj9rO0",{"id":4,"title":5,"author":6,"body":613,"category":239,"cover":240,"coverAlt":241,"description":242,"draft":243,"extension":244,"featured":243,"meta":749,"navigation":240,"path":246,"publishedAt":247,"seo":750,"stem":249,"tags":751,"updatedAt":256,"__hash__":257},{"type":8,"value":614,"toc":739},[615,617,619,621,625,629,651,655,657,663,665,669,671,673,677,685,687,693,695,701,705,707],[11,616,13],{},[11,618,16],{},[18,620,21],{"id":20},[11,622,24,623,30],{},[26,624,29],{"href":28},[11,626,33,627,38],{},[35,628,37],{},[40,630,631,635,641,647],{},[43,632,633,48],{},[35,634,47],{},[43,636,637,54,639,59],{},[35,638,53],{},[56,640,58],{},[43,642,643,68],{},[35,644,64,645],{},[56,646,67],{},[43,648,649,74],{},[35,650,73],{},[11,652,77,653,82],{},[26,654,81],{"href":80},[84,656,87],{"id":86},[11,658,90,659,94,661,98],{},[56,660,93],{},[56,662,97],{},[18,664,102],{"id":101},[11,666,105,667,110],{},[26,668,109],{"href":108},[11,670,113],{},[18,672,117],{"id":116},[11,674,120,675,124],{},[56,676,123],{},[11,678,127,679,131,681,135,683,140],{},[35,680,130],{},[35,682,134],{},[137,684,139],{},[18,686,144],{"id":143},[11,688,147,689,150,691,153],{},[56,690,93],{},[56,692,97],{},[18,694,157],{"id":156},[11,696,160,697,164,699,168],{},[35,698,163],{},[35,700,167],{},[11,702,171,703,176],{},[26,704,175],{"href":174},[18,706,180],{"id":179},[40,708,709,719,723,727,735],{},[43,710,711,190,715,193,717,196],{},[35,712,187,713],{},[26,714,29],{"href":28},[56,716,97],{},[56,718,93],{},[43,720,721,202],{},[35,722,201],{},[43,724,725,208],{},[35,726,207],{},[43,728,729,214,731,217,733,82],{},[35,730,213],{},[56,732,93],{},[56,734,97],{},[43,736,737,225],{},[35,738,224],{},{"title":227,"searchDepth":228,"depth":228,"links":740},[741,744,745,746,747,748],{"id":20,"depth":228,"text":21,"children":742},[743],{"id":86,"depth":233,"text":87},{"id":101,"depth":228,"text":102},{"id":116,"depth":228,"text":117},{"id":143,"depth":228,"text":144},{"id":156,"depth":228,"text":157},{"id":179,"depth":228,"text":180},{},{"title":5,"description":242},[251,252,253,254,255],{"id":753,"title":754,"author":6,"body":755,"category":1023,"cover":240,"coverAlt":1024,"description":1025,"draft":243,"extension":244,"featured":243,"meta":1026,"navigation":240,"path":1027,"publishedAt":1028,"seo":1029,"stem":1030,"tags":1031,"updatedAt":256,"__hash__":1036},"blog/blog/image-alt-text.md","Image Alt Text: Writing It for SEO and Accessibility",{"type":8,"value":756,"toc":1007},[757,772,775,779,782,786,792,799,803,806,813,817,820,846,861,865,879,882,902,912,916,919,923,929,933,938,942,949,953,956,960,963,975,978,980],[11,758,759,760,763,764,767,768,771],{},"Alt text is one of those small HTML attributes that almost everyone knows they ",[137,761,762],{},"should"," fill in, and almost everyone leaves half-done. It's the ",[56,765,766],{},"alt"," on an ",[56,769,770],{},"\u003Cimg>"," tag — a short text alternative for an image — and it quietly serves two audiences at once: people who can't see the picture, and search engines that can't really \"see\" it either.",[11,773,774],{},"Get it right and you improve accessibility, give Google Images something to work with, and add a little more context to the page. Get it wrong — or skip it — and you leave screen-reader users guessing and hand search engines a blank where a description should be. Here's how to write alt text that actually does its job, and how to find the pages where it's missing.",[18,776,778],{"id":777},"what-alt-text-is-actually-for","What alt text is actually for",[11,780,781],{},"It helps to separate the two jobs alt text does, because writing for one without the other is how most people get it slightly wrong.",[84,783,785],{"id":784},"for-people-who-cant-see-the-image","For people who can't see the image",[11,787,788,789,791],{},"This is the original purpose, and it's still the most important one. Screen-reader users — and anyone whose image simply failed to load — rely on the ",[56,790,766],{}," attribute to know what an image conveys. The screen reader reads it aloud; the browser shows it in place of a broken image. Under the WCAG accessibility guidelines, every image that carries meaning needs a text alternative. This isn't a nice-to-have: for a lot of users it's the difference between a usable page and a confusing one.",[11,793,794,795,798],{},"The mental test we use: if you covered the image and replaced it with your alt text, would the sentence around it still make sense? If yes, you've described its ",[137,796,797],{},"function",", not just its pixels.",[84,800,802],{"id":801},"for-search-engines","For search engines",[11,804,805],{},"Google can't read an image the way a person does, so alt text is one of the main signals it uses to understand what a picture shows and whether it's relevant to a query. That matters for Google Images (a real source of traffic for product, recipe, and how-to sites) and it adds topical context to the page itself. It's a modest ranking input, not a magic one — but it's free, and it compounds across every image on a content-heavy site.",[11,807,808,809,812],{},"The key thing: these two jobs ",[137,810,811],{},"align",". Alt text written to genuinely help a blind user is almost always the alt text Google wants too. Write for the person, and the SEO follows.",[18,814,816],{"id":815},"how-to-write-good-alt-text","How to write good alt text",[11,818,819],{},"There's no rigid formula, but a few habits cover the vast majority of cases.",[40,821,822,828,834,840],{},[43,823,824,827],{},[35,825,826],{},"Describe the meaning in context, not every detail."," \"Bar chart showing organic traffic doubling after the redesign\" beats \"a chart\". The first tells the reader why the image is there; the second makes them ask.",[43,829,830,833],{},[35,831,832],{},"Be specific but concise."," Aim for roughly a sentence — somewhere under ~125 characters is a good guide, since some screen readers cut off around there. If an image genuinely needs a paragraph, put that in the surrounding text and keep the alt short.",[43,835,836,839],{},[35,837,838],{},"Don't start with \"image of\" or \"picture of\"."," Screen readers already announce that it's an image. \"Photo of a red bicycle\" becomes, in effect, \"image, image of a red bicycle\".",[43,841,842,845],{},[35,843,844],{},"Match the image's purpose."," A product photo's alt should name the product (\"Blue ceramic mug, 350 ml\"); a diagram's alt should explain what it demonstrates; a photo illustrating a story should describe what's happening.",[11,847,848,849,852,853,856,857,860],{},"A quick before/after. Weak: ",[56,850,851],{},"alt=\"seo\"",". Better: ",[56,854,855],{},"alt=\"Search Console report highlighting twelve pages with duplicate titles\"",". The second works for a screen reader ",[137,858,859],{},"and"," tells Google exactly what the screenshot is about.",[18,862,864],{"id":863},"decorative-images-are-the-exception","Decorative images are the exception",[11,866,867,868,871,872,875,876,878],{},"Not every image needs a description. Purely decorative images — background textures, dividers, an icon that sits next to a text label that already says the same thing — should have an ",[35,869,870],{},"empty"," alt attribute: ",[56,873,874],{},"alt=\"\"",". That's deliberate, not lazy: an empty ",[56,877,766],{}," tells the screen reader to skip the image entirely, so the user isn't read a list of meaningless \"decorative swirl, decorative swirl\" announcements.",[11,880,881],{},"The distinction that trips people up:",[40,883,884,889],{},[43,885,886,888],{},[56,887,874],{}," (present but empty) → \"this image is decorative, skip it.\" Correct for decoration.",[43,890,891,897,898,901],{},[35,892,893,894,896],{},"no ",[56,895,766],{}," attribute at all"," → the screen reader has nothing to fall back on and may read out the file name (",[56,899,900],{},"img_4032_final_v2.jpg","). This is the one to avoid.",[11,903,904,905,908,909,911],{},"So the rule isn't \"every image needs words\" — it's \"every image needs a ",[137,906,907],{},"decision",": describe it, or mark it decorative with ",[56,910,874],{},".\"",[18,913,915],{"id":914},"the-mistakes-that-quietly-hurt","The mistakes that quietly hurt",[11,917,918],{},"Most alt-text problems fall into four buckets, and they tend to hide on the templated pages nobody reviews by hand.",[84,920,922],{"id":921},"missing-the-attribute-entirely","Missing the attribute entirely",[11,924,925,926,928],{},"A meaningful image with no ",[56,927,766],{}," at all is the worst case: no accessibility fallback, and a file name read aloud. It's extremely common on CMS uploads where the field was left blank, and on theme components that forgot it.",[84,930,932],{"id":931},"an-empty-alt-on-a-meaningful-image","An empty alt on a meaningful image",[11,934,935,937],{},[56,936,874],{}," on your hero product shot or an infographic is almost as bad — it tells assistive tech to ignore something the user actually needs. Empty alt is only correct for decoration.",[84,939,941],{"id":940},"keyword-stuffed-alt","Keyword-stuffed alt",[11,943,944,945,948],{},"Cramming keywords into alt text (",[56,946,947],{},"alt=\"cheap shoes buy shoes best shoes running shoes\"",") is spam. It reads as gibberish to a screen-reader user and Google treats it the same way it treats keyword stuffing anywhere else — as a low-quality signal. Describe the image honestly; if your keyword genuinely describes it, it'll appear naturally.",[84,950,952],{"id":951},"alt-that-just-repeats-the-caption","Alt that just repeats the caption",[11,954,955],{},"If a visible caption already describes the image, repeating it word-for-word in the alt makes a screen reader announce the same sentence twice. Either vary the alt to add what the caption leaves out, or — if the caption fully covers it — a short, distinct alt is fine.",[18,957,959],{"id":958},"finding-the-pages-missing-alt-text","Finding the pages missing alt text",[11,961,962],{},"Spot-checking a few images in the browser will never catch this, because the offenders are almost always the pages you forget about — old posts, bulk-uploaded product galleries, auto-generated archives. The only reliable approach is to check every page.",[11,964,965,966,970,971,974],{},"That's one of the things our ",[26,967,969],{"href":968},"/content-analysis","Content Analyser"," does: it crawls every URL in your sitemap and counts how many images on each page are missing alt text, so instead of guessing you get a ranked list of the worst offenders to fix first. Pair it with the ",[26,972,973],{"href":174},"Sitemap Checker"," to make sure the crawler reaches every page worth auditing — a page that isn't in your sitemap is a page whose images you'll never get around to reviewing.",[11,976,977],{},"Work through the results by impact: fix missing alt on your most important, most-linked pages first (product pages, cornerstone content), then the long tail. You'll usually find a handful of templates or a single bulk import is responsible for most of the gaps, so one fix can clear dozens of images.",[18,979,180],{"id":179},[40,981,982,985,992,1001,1004],{},[43,983,984],{},"Alt text serves two aligned audiences — screen-reader users and search engines. Write it for the person and the SEO benefit follows.",[43,986,987,988,991],{},"Describe the image's ",[35,989,990],{},"meaning in context",", keep it to about a sentence, and don't start with \"image of\".",[43,993,994,995,997,998,1000],{},"Decorative images take an ",[35,996,870],{}," ",[56,999,874],{}," (so they're skipped); meaningful images need a real description. Never omit the attribute entirely.",[43,1002,1003],{},"The mistakes that cost you: missing alt, empty alt on meaningful images, keyword stuffing, and blindly duplicating the caption.",[43,1005,1006],{},"Audit at scale, not page by page — use the Content Analyser to flag every page missing alt text across your whole site.",{"title":227,"searchDepth":228,"depth":228,"links":1008},[1009,1013,1014,1015,1021,1022],{"id":777,"depth":228,"text":778,"children":1010},[1011,1012],{"id":784,"depth":233,"text":785},{"id":801,"depth":233,"text":802},{"id":815,"depth":228,"text":816},{"id":863,"depth":228,"text":864},{"id":914,"depth":228,"text":915,"children":1016},[1017,1018,1019,1020],{"id":921,"depth":233,"text":922},{"id":931,"depth":233,"text":932},{"id":940,"depth":233,"text":941},{"id":951,"depth":233,"text":952},{"id":958,"depth":228,"text":959},{"id":179,"depth":228,"text":180},"content","Image Alt Text: Writing It for SEO and Accessibility — SeoSitemap.app blog cover","What alt text is really for, how to write it well, the mistakes that quietly hurt you, and how to find every page that's missing it across your whole site.",{},"/blog/image-alt-text","2026-06-16",{"title":754,"description":1025},"blog/image-alt-text",[1032,1033,1034,1035],"alt-text","accessibility","images","on-page-seo","JBVTCS5prbXFJzBpW6b1ojEmhB1uqrxe9IdtO0zBpQc",{"id":1038,"title":1039,"author":6,"body":1040,"category":1369,"cover":240,"coverAlt":1370,"description":1371,"draft":243,"extension":244,"featured":240,"meta":1372,"navigation":240,"path":1373,"publishedAt":1374,"seo":1375,"stem":1376,"tags":1377,"updatedAt":256,"__hash__":1380},"blog/blog/how-to-find-your-sitemap.md","How to Find Your Sitemap.xml (and What to Do When You Can't)",{"type":8,"value":1041,"toc":1355},[1042,1045,1048,1052,1055,1072,1094,1097,1101,1107,1116,1123,1129,1136,1145,1149,1152,1156,1174,1178,1194,1198,1207,1211,1220,1224,1233,1237,1240,1273,1277,1284,1290,1320,1323,1325],[11,1043,1044],{},"A sitemap is the single most useful file for understanding a website at a glance: it's the site's own list of the pages it wants search engines to know about. When we built SeoSitemap.app, the very first thing every scan needs is that file — and we quickly learned that \"where is the sitemap?\" trips people up more often than you'd expect.",[11,1046,1047],{},"This guide walks through exactly how to find the sitemap for any site, in the order we actually try ourselves, plus what to do when the obvious paths come back empty.",[18,1049,1051],{"id":1050},"start-with-the-obvious-sitemapxml","Start with the obvious: /sitemap.xml",[11,1053,1054],{},"Nine times out of ten the sitemap lives at the root of the domain. Before anything clever, just type the address bar guesses:",[40,1056,1057,1062,1067],{},[43,1058,1059],{},[56,1060,1061],{},"https://example.com/sitemap.xml",[43,1063,1064],{},[56,1065,1066],{},"https://example.com/sitemap_index.xml",[43,1068,1069],{},[56,1070,1071],{},"https://example.com/sitemap-index.xml",[11,1073,1074,1075,1078,1079,1082,1083,1086,1087,997,1090,1093],{},"That ",[56,1076,1077],{},"_index"," variant matters. Large sites split their sitemap into chunks (a sitemap ",[35,1080,1081],{},"index"," that points to many child sitemaps), because a single sitemap file is capped at 50,000 URLs or 50 MB. If ",[56,1084,1085],{},"/sitemap.xml"," shows a short list of ",[137,1088,1089],{},"other",[56,1091,1092],{},".xml"," links rather than your actual pages, you've found an index file — that's normal, and a good auditor will follow those children automatically.",[11,1095,1096],{},"If one of these loads, you're done. If they all 404, don't give up — move to the reliable shortcut below.",[18,1098,1100],{"id":1099},"check-robotstxt-the-reliable-shortcut","Check robots.txt (the reliable shortcut)",[11,1102,1103,1104,1106],{},"Every well-configured site has a ",[56,1105,97],{}," at its root, and by convention it declares where the sitemap lives. Open:",[1108,1109,1114],"pre",{"className":1110,"code":1112,"language":1113},[1111],"language-text","https://example.com/robots.txt\n","text",[56,1115,1112],{"__ignoreMap":227},[11,1117,1118,1119,1122],{},"Look for a line that starts with ",[56,1120,1121],{},"Sitemap:",". You'll often see something like this:",[1108,1124,1127],{"className":1125,"code":1126,"language":1113},[1111],"User-agent: *\nAllow: /\n\nSitemap: https://example.com/sitemap.xml\n",[56,1128,1126],{"__ignoreMap":227},[11,1130,1131,1132,1135],{},"This is the most dependable method, because it's the location the site ",[137,1133,1134],{},"itself"," advertises to Googlebot — no guessing required. A site can even list several sitemaps here (one for pages, one for images, one for news), so scan the whole file, not just the first match.",[11,1137,1138,1139,1141,1142,1144],{},"If ",[56,1140,97],{}," exists but has no ",[56,1143,1121],{}," line, that's a finding in itself: the site is making search engines work harder than they should. Adding that one line is a free, five-second SEO win.",[18,1146,1148],{"id":1147},"platform-specific-sitemap-locations","Platform-specific sitemap locations",[11,1150,1151],{},"If you know what the site is built on, you can skip straight to the right path. Here are the defaults for the platforms we see most often:",[84,1153,1155],{"id":1154},"wordpress","WordPress",[11,1157,1158,1159,1162,1163,378,1166,1169,1170,1173],{},"Modern WordPress generates a sitemap at ",[56,1160,1161],{},"/wp-sitemap.xml"," out of the box. If the site uses ",[35,1164,1165],{},"Yoast SEO",[35,1167,1168],{},"Rank Math"," (most do), the canonical location becomes ",[56,1171,1172],{},"/sitemap_index.xml"," instead — those plugins take over sitemap duties.",[84,1175,1177],{"id":1176},"shopify","Shopify",[11,1179,1180,1181,1183,1184,342,1187,342,1190,1193],{},"Always ",[56,1182,1085],{},", and it's always an index file that links to ",[56,1185,1186],{},"sitemap_products_1.xml",[56,1188,1189],{},"sitemap_pages_1.xml",[56,1191,1192],{},"sitemap_collections_1.xml",", and so on. You can't customise it on Shopify, which is actually convenient — you always know where it is.",[84,1195,1197],{"id":1196},"wix-and-squarespace","Wix and Squarespace",[11,1199,1200,1201,1203,1204,1206],{},"Both expose ",[56,1202,1085],{}," automatically and don't let you move it. Squarespace also responds to ",[56,1205,1085],{}," for every site by default.",[84,1208,1210],{"id":1209},"webflow","Webflow",[11,1212,1213,1215,1216,1219],{},[56,1214,1085],{},", but note Webflow only auto-generates it when the setting is enabled in ",[35,1217,1218],{},"Project Settings → SEO",". On some plans you have to paste a sitemap in manually.",[84,1221,1223],{"id":1222},"custom-framework-sites","Custom / framework sites",[11,1225,1226,1227,1229,1230,1232],{},"Static-site frameworks (Next.js, Nuxt, Astro, Hugo) usually emit ",[56,1228,1085],{}," at build time via a plugin. If a developer built the site, ask them — or fall back to ",[56,1231,97],{},", which is the one place a custom setup almost always points correctly.",[18,1234,1236],{"id":1235},"still-cant-find-it-three-fallbacks","Still can't find it? Three fallbacks",[11,1238,1239],{},"Occasionally none of the above works. Here's what we reach for next:",[1241,1242,1243,1253,1267],"ol",{},[43,1244,1245,1248,1249,1252],{},[35,1246,1247],{},"Google Search Console."," If you own the site, open ",[35,1250,1251],{},"Indexing → Sitemaps",". Any sitemap that's been submitted is listed there with its exact URL and submission status. This is the source of truth for what Google is actually reading.",[43,1254,1255,1262,1263,1266],{},[35,1256,1257,1258,1261],{},"A ",[56,1259,1260],{},"site:"," search."," Search ",[56,1264,1265],{},"site:example.com"," in Google to see what's indexed. It won't hand you the sitemap file, but it confirms whether the site is indexed at all — useful for ruling out a bigger problem.",[43,1268,1269,1272],{},[35,1270,1271],{},"No sitemap exists."," Some small or older sites genuinely don't have one. That's not the end of the world for a handful of pages, but for anything larger it's worth generating one. Every major platform and CMS plugin can create a sitemap automatically; there's rarely a reason not to have one.",[18,1274,1276],{"id":1275},"found-it-now-audit-it","Found it — now audit it",[11,1278,1279,1280,1283],{},"Locating the sitemap is step one. The reason you went looking is usually step two: you want to know whether the pages ",[137,1281,1282],{},"in"," it are healthy.",[11,1285,1286,1287,1289],{},"This is exactly what we built SeoSitemap.app to do. Paste the sitemap URL you just found into the ",[26,1288,973],{"href":174}," and it pulls every URL from the file and audits each page — up to 500 at a time — for the things that quietly hurt rankings:",[40,1291,1292,1298,1304,1310],{},[43,1293,1294,1297],{},[35,1295,1296],{},"Missing, empty or duplicate H1 tags"," across the whole site.",[43,1299,1300,1303],{},[35,1301,1302],{},"Title and meta description problems"," — too long, too short, or missing entirely.",[43,1305,1306,1309],{},[35,1307,1308],{},"Broken links and redirect chains"," that waste crawl budget.",[43,1311,1312,1315,1316,1319],{},[35,1313,1314],{},"Duplicate titles and H1s"," that signal ",[26,1317,1318],{"href":968},"keyword cannibalisation"," between competing pages.",[11,1321,1322],{},"Reading a sitemap by eye tells you which pages exist. Auditing it tells you which ones are actually doing their job — and that's the difference between a list of URLs and an SEO action plan.",[18,1324,180],{"id":179},[40,1326,1327,1338,1346,1349,1352],{},[43,1328,1329,1330,193,1332,1334,1335,1337],{},"Try ",[56,1331,1085],{},[56,1333,1172],{}," first; the ",[56,1336,1077],{}," version means the site splits its sitemap into chunks.",[43,1339,1340,1342,1343,1345],{},[56,1341,97],{}," is the most reliable place to find the declared sitemap location — look for the ",[56,1344,1121],{}," line.",[43,1347,1348],{},"Most platforms (WordPress, Shopify, Wix, Squarespace, Webflow) expose the sitemap at a predictable path.",[43,1350,1351],{},"If all else fails, Google Search Console shows the exact sitemap Google is reading.",[43,1353,1354],{},"Finding the sitemap is just the start — audit the pages inside it to turn that list into something actionable.",{"title":227,"searchDepth":228,"depth":228,"links":1356},[1357,1358,1359,1366,1367,1368],{"id":1050,"depth":228,"text":1051},{"id":1099,"depth":228,"text":1100},{"id":1147,"depth":228,"text":1148,"children":1360},[1361,1362,1363,1364,1365],{"id":1154,"depth":233,"text":1155},{"id":1176,"depth":233,"text":1177},{"id":1196,"depth":233,"text":1197},{"id":1209,"depth":233,"text":1210},{"id":1222,"depth":233,"text":1223},{"id":1235,"depth":228,"text":1236},{"id":1275,"depth":228,"text":1276},{"id":179,"depth":228,"text":180},"sitemaps","How to Find Your Sitemap.xml — SeoSitemap.app blog cover","A practical, step-by-step guide to locating any website's sitemap — the common URLs, the robots.txt shortcut, platform-specific paths, and how to audit it once you've found it.",{},"/blog/how-to-find-your-sitemap","2026-06-07",{"title":1039,"description":1371},"blog/how-to-find-your-sitemap",[175,97,1378,1379],"crawling","indexing","g2_23FGrMzt1bZ4zo4FgS5Cp4iCgJkCcLHP8ZSz_k2w",{"id":1382,"title":1383,"author":6,"body":1384,"category":1023,"cover":240,"coverAlt":1604,"description":1605,"draft":243,"extension":244,"featured":243,"meta":1606,"navigation":240,"path":1607,"publishedAt":1608,"seo":1609,"stem":1610,"tags":1611,"updatedAt":256,"__hash__":1615},"blog/blog/keyword-cannibalization.md","Keyword Cannibalization: How to Find and Fix It",{"type":8,"value":1385,"toc":1588},[1386,1389,1392,1396,1403,1406,1410,1413,1420,1424,1427,1431,1434,1437,1441,1444,1458,1464,1475,1479,1485,1489,1496,1499,1503,1509,1512,1516,1526,1529,1533,1536,1539,1548,1550],[11,1387,1388],{},"You wrote two solid articles on the same broad topic, published both, and now neither ranks as well as you hoped. The pages aren't fighting Google — they're fighting each other. That's keyword cannibalisation, and it's one of the quieter ways a growing site sabotages its own search performance.",[11,1390,1391],{},"The good news: it's diagnosable and fixable without guesswork. In this guide we'll define what cannibalisation actually is (and clear up a common myth), show you how to spot it across a whole site quickly, and walk through a decision framework for fixing each case.",[18,1393,1395],{"id":1394},"what-keyword-cannibalisation-really-is","What keyword cannibalisation really is",[11,1397,1398,1399,1402],{},"Keyword cannibalisation happens when two or more pages on your site target the same ",[35,1400,1401],{},"search intent"," — the underlying job a searcher is trying to get done — so they end up competing for the same positions in the results. Google has to pick one URL per site for a given query in most cases, and when your pages are too similar, it picks for you. Often it picks badly, splitting signals (links, clicks, relevance) across both pages so neither earns the authority a single consolidated page would.",[11,1404,1405],{},"The symptoms are familiar. Rankings flip-flop between two URLs week to week. A page that used to sit at position four slides to nine when you publish a near-duplicate. Internal links and backlinks get diluted because they point at two competing destinations instead of one.",[84,1407,1409],{"id":1408},"the-myth-its-about-overlapping-intent-not-reused-keywords","The myth: it's about overlapping intent, not reused keywords",[11,1411,1412],{},"The biggest misconception is that cannibalisation means \"using the same keyword on more than one page\". It doesn't. You can mention \"running shoes\" on dozens of pages — a category page, a buying guide, individual product pages, a blog post about marathon training — without any of them cannibalising each other, because each serves a different intent.",[11,1414,1415,1416,1419],{},"Cannibalisation is about intent overlap. \"Best running shoes for beginners\" and \"running shoes for new runners\" are different strings but the ",[137,1417,1418],{},"same"," intent, so two articles built around them will compete. Meanwhile \"buy Nike Pegasus 41\" (transactional) and \"how to choose running shoes\" (informational) share words but serve genuinely different needs, so they coexist happily. When you audit, ask \"would the same searcher be satisfied by either page?\" If yes, you have overlap worth fixing.",[18,1421,1423],{"id":1422},"how-to-detect-it","How to detect it",[11,1425,1426],{},"There are two reliable signals, and you'll usually want both.",[84,1428,1430],{"id":1429},"search-console-one-query-multiple-urls","Search Console: one query, multiple URLs",[11,1432,1433],{},"The clearest evidence lives in Google Search Console. Open Performance, add a filter for a specific query, then switch to the Pages tab. If a single query is being served by two or more of your URLs over time — especially if their positions are similar and unstable — those pages are competing for it. Sort by impressions to find the queries that matter most, and watch for queries where the average position is mediocre despite decent impressions. That mediocrity is often two pages each pulling the other down.",[11,1435,1436],{},"This tells you which queries are affected, but it's slow to review one query at a time, and it only surfaces pages Google already has data for.",[84,1438,1440],{"id":1439},"duplicate-titles-and-h1s-across-the-site","Duplicate titles and H1s across the site",[11,1442,1443],{},"The faster, more structural signal is duplication in your on-page metadata. When two pages carry near-identical title tags or the same H1 heading, that's a strong hint they were written around the same intent — and it's something you can check across an entire site at once, before Search Console has even accumulated data.",[11,1445,1446,1447,1449,1450,1453,1454,1457],{},"This is exactly what our ",[26,1448,969],{"href":968}," is built for. Point it at your site and it pulls every URL from your sitemap, then groups identical and near-identical H1s and title tags across the whole site so the clusters jump out immediately. Instead of squinting at one query at a time, you get a list: \"these four pages all use the H1 ",[137,1451,1452],{},"Email Marketing Tips","\", \"these two share the title ",[137,1455,1456],{},"Pricing","\". Each cluster is a cannibalisation candidate to investigate.",[11,1459,1460,1461,1463],{},"A practical workflow: run the ",[26,1462,969],{"href":968}," first to find the structural duplicates fast, then confirm the real damage in Search Console for the clusters that matter. Structure tells you where to look; Search Console tells you whether it's actually costing you rankings.",[11,1465,1466,1467,1470,1471,1474],{},"If the analyser only sees part of your site, the problem is usually that pages are missing from your sitemap — so the auditor never reaches them. Run the ",[26,1468,1469],{"href":174},"sitemap checker"," to confirm your sitemap is complete and valid first, and if you're not sure where your sitemap even lives, our guide on ",[26,1472,1473],{"href":1373},"how to find your sitemap"," walks through it.",[18,1476,1478],{"id":1477},"the-fix-framework","The fix framework",[11,1480,1481,1482,1484],{},"Once you've identified a cluster, you have three options. Pick based on whether the pages ",[137,1483,762],{}," exist separately at all.",[84,1486,1488],{"id":1487},"_1-merge-the-weaker-page-into-the-stronger-one","1. Merge the weaker page into the stronger one",[11,1490,1491,1492,1495],{},"This is the right call when both pages target the same intent and there's no good reason to keep two. Decide which page is stronger — usually the one with more backlinks, better rankings, higher engagement, or simply the better-written piece. Fold the unique, useful content from the weaker page into the stronger one so nothing valuable is lost, then ",[35,1493,1494],{},"301-redirect"," the weaker URL to the stronger one.",[11,1497,1498],{},"The 301 (a permanent redirect) matters: it passes the weaker page's accumulated link equity to the survivor and tells search engines the content has permanently moved, consolidating the signals you'd otherwise be splitting. Update any internal links that pointed at the old URL so they target the survivor directly rather than bouncing through the redirect.",[84,1500,1502],{"id":1501},"_2-differentiate-the-intent-and-headings","2. Differentiate the intent and headings",[11,1504,1505,1506,1508],{},"Sometimes the two pages ",[137,1507,762],{}," exist — they were just written too similarly. Maybe one was meant to be a beginner overview and the other an advanced deep-dive, but both drifted into covering the same middle ground. Here the fix is editorial: pull them apart so each clearly owns a distinct intent.",[11,1510,1511],{},"Rewrite the titles, H1s, and opening paragraphs to signal who each page is for. Trim the overlapping sections from each so they stop repeating one another, and add internal links between them (\"new to this? start with our beginner's guide\") so the relationship is explicit. Done well, you turn two competing pages into a complementary pair that each rank for their own queries.",[84,1513,1515],{"id":1514},"_3-canonicalise-when-they-must-coexist","3. Canonicalise when they must coexist",[11,1517,1518,1519,1522,1523,1525],{},"Occasionally you need two near-identical pages for reasons that have nothing to do with search — say a printable version, or the same product reachable through two category paths. When the duplication is unavoidable, use a ",[35,1520,1521],{},"canonical tag"," (a ",[56,1524,123],{}," pointing at the preferred URL) to tell search engines which version is the original. Search engines then consolidate ranking signals onto the canonical and leave the duplicate out of the index, without you having to delete or redirect anything.",[11,1527,1528],{},"Canonicalisation is the weakest of the three because it's a hint rather than a command, and it doesn't help users who land on the \"wrong\" version. Reach for merge or differentiate first; canonicalise only when neither fits.",[18,1530,1532],{"id":1531},"how-to-prevent-it","How to prevent it",[11,1534,1535],{},"Fixing cannibalisation is satisfying, but not creating it is cheaper. Two habits do most of the work.",[11,1537,1538],{},"First, keep a simple content plan that maps one primary intent to one page. Before commissioning anything new, check whether an existing page already owns that intent — if it does, improve that page instead of publishing a rival. A spreadsheet of \"page → primary query → intent\" is enough; the point is forcing the question before you write.",[11,1540,1541,1542,1544,1545,1547],{},"Second, use internal linking deliberately to nominate the canonical page for each topic. When you consistently link to the ",[137,1543,1418],{}," page with the same descriptive anchor text whenever a topic comes up, you tell search engines which page is the authoritative one — and you tell yourself, which keeps future articles from drifting into its territory. Re-running the ",[26,1546,969],{"href":968}," after big publishing pushes turns this into a routine: catch new duplicate H1s and titles before they've had time to hurt.",[18,1549,180],{"id":179},[40,1551,1552,1558,1564,1570,1576,1582],{},[43,1553,1554,1557],{},[35,1555,1556],{},"Cannibalisation is about overlapping intent, not reused keywords"," — the test is whether the same searcher would be satisfied by either page.",[43,1559,1560,1563],{},[35,1561,1562],{},"Detect it two ways",": one query serving multiple URLs in Search Console, and duplicate titles or H1s across your site. Structure points you to the problem; Search Console confirms the cost.",[43,1565,1566,1569],{},[35,1567,1568],{},"Our Content Analyser groups identical and near-identical H1s and titles across the whole site",", so cannibalisation clusters surface fast — far quicker than reviewing queries one at a time.",[43,1571,1572,1575],{},[35,1573,1574],{},"Fix with one of three moves",": merge the weaker page and 301-redirect it, differentiate the intent and headings, or canonicalise when the pages genuinely must coexist.",[43,1577,1578,1581],{},[35,1579,1580],{},"Prefer merge or differentiate over canonicalise"," — a canonical is a hint, and it doesn't help users who land on the duplicate.",[43,1583,1584,1587],{},[35,1585,1586],{},"Prevent it"," with a one-intent-per-page content plan and consistent internal linking that nominates the authoritative page for each topic.",{"title":227,"searchDepth":228,"depth":228,"links":1589},[1590,1593,1597,1602,1603],{"id":1394,"depth":228,"text":1395,"children":1591},[1592],{"id":1408,"depth":233,"text":1409},{"id":1422,"depth":228,"text":1423,"children":1594},[1595,1596],{"id":1429,"depth":233,"text":1430},{"id":1439,"depth":233,"text":1440},{"id":1477,"depth":228,"text":1478,"children":1598},[1599,1600,1601],{"id":1487,"depth":233,"text":1488},{"id":1501,"depth":233,"text":1502},{"id":1514,"depth":233,"text":1515},{"id":1531,"depth":228,"text":1532},{"id":179,"depth":228,"text":180},"Keyword Cannibalization: How to Find and Fix It — SeoSitemap.app blog cover","What keyword cannibalization actually is, how to tell whether two of your pages are competing, and a practical workflow to fix it — merge, differentiate, or canonicalise.",{},"/blog/keyword-cannibalization","2026-06-06",{"title":1383,"description":1605},"blog/keyword-cannibalization",[1612,1613,1614],"keyword-cannibalization","duplicate-content","content-strategy","aLUKvlevbrrww5K0-ytTYl3TT8A8iQL4CXt45GVWD3s",{"id":1617,"title":1618,"author":6,"body":1619,"category":600,"cover":240,"coverAlt":1823,"description":1824,"draft":243,"extension":244,"featured":243,"meta":1825,"navigation":240,"path":1826,"publishedAt":1827,"seo":1828,"stem":1829,"tags":1830,"updatedAt":256,"__hash__":1833},"blog/blog/multiple-h1-tags.md","Multiple H1 Tags: Does It Still Hurt Your SEO?",{"type":8,"value":1620,"toc":1807},[1621,1624,1627,1631,1638,1641,1644,1648,1654,1672,1675,1679,1683,1686,1690,1693,1696,1700,1703,1709,1713,1716,1720,1723,1727,1738,1742,1748,1754,1758,1761,1767,1770,1772],[11,1622,1623],{},"If you have ever run an SEO audit, you have probably seen a warning about\nH1 tags — too many of them, none at all, or the same one repeated across\nyour site. The old advice was strict: one H1 per page, no exceptions. But\nthe web has changed, Google has clarified its position, and a lot of that\nadvice is now out of date.",[11,1625,1626],{},"So let's settle it. Does having more than one H1 actually hurt your\nrankings in 2026? The short answer is no — not on its own. The longer\nanswer is more useful, because a few genuine H1 problems still do harm,\nand they are easy to miss without checking every page.",[18,1628,1630],{"id":1629},"where-the-exactly-one-h1-rule-came-from","Where the \"exactly one H1\" rule came from",[11,1632,1633,1634,1637],{},"The single-H1 rule is older than most people realise. In the HTML 4 era,\nthe document outline was flat: there was one top-level heading, and\neverything else nested beneath it. An H1 was understood to be ",[137,1635,1636],{},"the"," title\nof the page, full stop. Putting two of them on a page felt like having two\ntitles on a book cover — confusing and a bit broken.",[11,1639,1640],{},"Early SEO guidance baked this in. Crawlers were less sophisticated, and\nthe safest way to tell a search engine \"this is what the page is about\"\nwas a single, keyword-rich H1 at the top. The rule stuck around long after\nthe technology that justified it had moved on. To this day you will find\naudit tools, checklists and blog posts that flag any page with more than\none H1 as an error.",[11,1642,1643],{},"It is worth being honest about this: the rule was never wrong, exactly. It\nwas a reasonable default that got frozen in time and then treated as a law\nof physics.",[18,1645,1647],{"id":1646},"what-google-actually-says-now","What Google actually says now",[11,1649,1650,1651,1653],{},"Google has been unusually clear on this one. Its representatives have\nstated publicly, more than once, that using multiple H1 tags on a page is\n",[35,1652,286],{}," a problem for Google Search. Modern Googlebot renders pages much\nlike a browser, understands document structure, and does not penalise you\nfor the number of H1s it finds. You can have one, several, or — in\npractice — even zero, and Google will still try to work out what your page\nis about from the content, the title tag, and the overall structure.",[11,1655,1656,1657,342,1660,342,1662,193,1665,1668,1669,1671],{},"Part of the reason is HTML5. The introduction of sectioning elements like\n",[56,1658,1659],{},"\u003Csection>",[56,1661,381],{},[56,1663,1664],{},"\u003Caside>",[56,1666,1667],{},"\u003Cnav>"," changed how documents are\nmeant to be structured. Under the HTML5 model, each sectioning element can\nhave its own heading hierarchy. A long page with several distinct articles\ncould legitimately carry an H1 inside each ",[56,1670,381],{},". Browsers and\nassistive technology never fully implemented the \"document outline\nalgorithm\" that this model promised, but the spirit of it — that pages are\ncomposed of nested sections rather than one flat outline — is now baked\ninto how the web is built.",[11,1673,1674],{},"So if Google does not care about the count, why are we still recommending\none clear H1? Because ranking is not the only thing that matters, and\n\"Google won't penalise it\" is a lower bar than \"this is the best choice\nfor your page\".",[18,1676,1678],{"id":1677},"why-one-clear-h1-is-still-the-safe-default","Why one clear H1 is still the safe default",[84,1680,1682],{"id":1681},"clarity-for-readers","Clarity for readers",[11,1684,1685],{},"A page with a single, obvious H1 tells everyone — humans and machines —\nwhat they are looking at within half a second. When you scatter several\nH1s across a page, you blur the answer to the most basic question a visitor\nasks: \"what is this page about?\" One H1 is simply the clearest way to say\n\"this, specifically, is the topic.\"",[84,1687,1689],{"id":1688},"accessibility-and-screen-reader-navigation","Accessibility and screen-reader navigation",[11,1691,1692],{},"This is the strongest practical argument, and it is the one most people\nforget. Screen-reader users navigate by headings. They pull up a list of\nall the headings on a page and jump between them, exactly the way a sighted\nuser scans down the screen. A clean hierarchy — one H1, then H2s for major\nsections, H3s nested beneath those — gives them a reliable map.",[11,1694,1695],{},"Multiple H1s, or headings that skip levels (H1 straight to H3), break that\nmap. The user can no longer tell which heading is the page title and which\nare subsections. Getting this right is not an SEO trick; it is a\nbaseline of building a usable page. And because accessible structure and\ngood SEO structure are the same structure, you get both for the price of\none.",[84,1697,1699],{"id":1698},"an-unambiguous-page-topic","An unambiguous page topic",[11,1701,1702],{},"Search engines weigh your H1 as a strong hint about the page's subject.\nWhen you have one H1, that hint is unambiguous. When you have five, you are\neither diluting the signal or — worse — sending conflicting signals if the\nH1s cover different topics. One clear H1 keeps your most important on-page\nsignal sharp.",[11,1704,1705,1706,1708],{},"You can check how clearly your main heading lines up with the rest of your\ncopy using our ",[26,1707,969],{"href":968}," tool, which looks at how your headings,\ntitle and body content reinforce a single topic rather than pulling in\ndifferent directions.",[18,1710,1712],{"id":1711},"the-h1-problems-that-genuinely-hurt","The H1 problems that genuinely hurt",[11,1714,1715],{},"Here is the part that matters more than the count. A few H1 issues do real\ndamage, and they tend to hide in the pages you never look at.",[84,1717,1719],{"id":1718},"missing-h1","Missing H1",[11,1721,1722],{},"A page with no H1 at all leaves both readers and crawlers without that\ntop-level anchor. It is rarely fatal — Google will fall back to other\nsignals — but it is a missed opportunity to state your topic plainly, and\nit is a common symptom of a template that dropped the heading somewhere\nalong the way. Templated pages, category archives and landing pages built\nin a hurry are the usual offenders.",[84,1724,1726],{"id":1725},"empty-h1","Empty H1",[11,1728,1729,1730,1733,1734,1737],{},"Worse than missing is an H1 that ",[137,1731,1732],{},"exists"," but contains nothing useful — an\nempty ",[56,1735,1736],{},"\u003Ch1>\u003C/h1>",", an H1 wrapping only a logo image with no alt text, or an\nH1 holding a single non-breaking space. To a crawler and a screen reader\nthis is an H1 that says nothing. It passes a naive \"does an H1 exist?\"\ncheck while delivering none of the benefit. These are surprisingly common\nin themes that put the site logo inside an H1 on every page.",[84,1739,1741],{"id":1740},"the-same-h1-repeated-across-many-pages","The same H1 repeated across many pages",[11,1743,1744,1745,1747],{},"This is the H1 problem with the clearest SEO downside, and it has nothing\nto do with how many H1s sit on a single page. It is about the ",[137,1746,1418],{}," H1\ntext appearing on dozens or hundreds of different URLs.",[11,1749,1750,1751,1753],{},"When many pages share an identical H1 — think \"Products\", \"Blog\", or your\nbrand name on every page — you are telling search engines that these pages\nare about the same thing. That is a textbook signal of keyword\ncannibalisation, where multiple pages compete for the same query and none\nof them ranks as well as one focused page would. If that sounds familiar,\nour guide to ",[26,1752,1318],{"href":1607}," walks through how to diagnose\nand fix it. Distinct, descriptive H1s are one of the simplest ways to keep\nyour pages clearly differentiated.",[18,1755,1757],{"id":1756},"how-to-audit-h1s-across-a-whole-site","How to audit H1s across a whole site",[11,1759,1760],{},"Spot-checking a handful of pages by hand will never catch these problems,\nbecause the broken pages are almost always the ones you forget exist — old\narchives, paginated lists, auto-generated tag pages. The only reliable\napproach is to check every URL.",[11,1762,1763,1764,1766],{},"That is exactly what the ",[26,1765,973],{"href":174}," is for. It pulls every URL\nfrom your sitemap and audits each page's heading structure, so instead of\nguessing you get a concrete list: which pages have no H1, which have an\nempty one, where the same H1 is duplicated across many URLs, and where the\nheading levels skip. From there you can prioritise — fix the missing and\nempty H1s first, then hunt down the duplicates that point to\ncannibalisation.",[11,1768,1769],{},"The point is to move from \"I think our headings are fine\" to \"here are the\nseventeen pages that aren't, in order of severity\". At that scale, an\nautomated pass beats human review every time.",[18,1771,180],{"id":179},[40,1773,1774,1780,1783,1786,1799],{},[43,1775,1776,1777,1779],{},"Multiple H1s on a single page do ",[35,1778,286],{}," hurt your rankings — Google has\nsaid this directly, and HTML5 sectioning makes several H1s structurally\nvalid.",[43,1781,1782],{},"One clear H1 is still the pragmatic default because it gives readers,\nscreen-reader users and crawlers an unambiguous answer to \"what is this\npage about?\".",[43,1784,1785],{},"Accessibility is the strongest reason to keep a clean hierarchy: screen\nreaders navigate by headings, so don't skip levels or scatter H1s.",[43,1787,1788,1789,1792,1793,1795,1796,1798],{},"The H1 issues that genuinely cost you are ",[35,1790,1791],{},"missing"," H1s, ",[35,1794,870],{}," H1s,\nand the ",[35,1797,1418],{}," H1 repeated across many pages — the last being a clear\ncannibalisation signal.",[43,1800,1801,1802,1804,1805,82],{},"Hand-checking won't catch these; audit every URL with the\n",[26,1803,973],{"href":174}," and confirm your topic focus with the ",[26,1806,969],{"href":968},{"title":227,"searchDepth":228,"depth":228,"links":1808},[1809,1810,1811,1816,1821,1822],{"id":1629,"depth":228,"text":1630},{"id":1646,"depth":228,"text":1647},{"id":1677,"depth":228,"text":1678,"children":1812},[1813,1814,1815],{"id":1681,"depth":233,"text":1682},{"id":1688,"depth":233,"text":1689},{"id":1698,"depth":233,"text":1699},{"id":1711,"depth":228,"text":1712,"children":1817},[1818,1819,1820],{"id":1718,"depth":233,"text":1719},{"id":1725,"depth":233,"text":1726},{"id":1740,"depth":233,"text":1741},{"id":1756,"depth":228,"text":1757},{"id":179,"depth":228,"text":180},"Multiple H1 Tags: Does It Still Hurt Your SEO? — SeoSitemap.app blog cover","Whether multiple H1s actually hurt rankings today, what Google really says, why one clear H1 is still the safe default, and how to audit your whole site for H1 problems.",{},"/blog/multiple-h1-tags","2026-06-05",{"title":1618,"description":1824},"blog/multiple-h1-tags",[1831,1832,1035,1033],"h1","headings","3NJG_Aks_tMOpHccIPQAEkKEY7qs7blUkl7_ETkLjBs",{"id":1835,"title":1836,"author":6,"body":1837,"category":1023,"cover":240,"coverAlt":2113,"description":2114,"draft":243,"extension":244,"featured":243,"meta":2115,"navigation":240,"path":2116,"publishedAt":2117,"seo":2118,"stem":2119,"tags":2120,"updatedAt":256,"__hash__":2124},"blog/blog/meta-tag-length.md","Title & Meta Description Length: What Google Actually Shows",{"type":8,"value":1838,"toc":2099},[1839,1842,1845,1849,1852,1859,1863,1885,1888,1916,1920,1927,1931,1938,1941,1945,1952,1956,1963,1967,1970,1977,1981,1984,1998,2001,2027,2036,2040,2047,2053,2056,2058],[11,1840,1841],{},"Your title tag and meta description are the two lines a searcher reads before deciding whether to click. They are also the two pieces of metadata most likely to get cut off mid-word, quietly rewritten by Google, or left blank because nobody filled them in. None of that is catastrophic on its own, but together it adds up to a search result that undersells the page behind it.",[11,1843,1844],{},"This guide covers the practical limits for both, why Google so often ignores what you wrote, and how to write titles and descriptions that survive truncation and still earn the click. We will keep the rules of thumb honest: they are guides, not laws, and the real constraint is pixels, not characters.",[18,1846,1848],{"id":1847},"why-length-matters-at-all","Why length matters at all",[11,1850,1851],{},"The search engine results page (SERP) gives each result a fixed amount of horizontal space. When your title or description overflows that space, Google truncates it — usually with an ellipsis (…) — and the part that gets cut is the end. If your most persuasive words live there, the searcher never sees them.",[11,1853,1854,1855,1858],{},"Truncation rarely tanks your rankings directly. What it costs you is click-through rate (CTR): the share of people who see your result and actually click it. A result that reads ",[56,1856,1857],{},"How to Audit Your Site's Heading Structure in Und…"," is doing less work than one that finishes its thought. On a page that ranks well but converts few of its impressions into visits, tightening the title and description is some of the cheapest SEO work you can do.",[18,1860,1862],{"id":1861},"title-tags-the-pixel-width-reality","Title tags: the pixel-width reality",[11,1864,1865,1866,1869,1870,1873,1874,1877,1878,1873,1881,1884],{},"Here is the detail most \"title tag length\" advice skips: ",[35,1867,1868],{},"Google truncates titles by pixel width, not character count."," Desktop results have roughly 580 pixels of room for the title. A title of capital ",[56,1871,1872],{},"W","s and ",[56,1875,1876],{},"M","s fills that space far faster than one of ",[56,1879,1880],{},"i",[56,1882,1883],{},"l","s, so two titles with the same character count can render completely differently — one whole, one clipped.",[11,1886,1887],{},"You do not need to count pixels by hand. The reliable shortcut is this:",[40,1889,1890,1896,1910],{},[43,1891,1892,1895],{},[35,1893,1894],{},"Aim for about 50–60 characters."," Below ~60 characters, most titles render in full on desktop. Treat 60 as a soft ceiling, not a finish line.",[43,1897,1898,1901,1902,1905,1906,1909],{},[35,1899,1900],{},"Watch the wide letters."," A 58-character title that is mostly uppercase or full of ",[56,1903,1904],{},"m","/",[56,1907,1908],{},"w"," can still be cut. If a title is visually dense, trim it a little harder.",[43,1911,1912,1915],{},[35,1913,1914],{},"Mobile is narrower."," Phones wrap rather than clip, but the principle holds: shorter titles read cleanly across more devices.",[84,1917,1919],{"id":1918},"front-load-the-words-that-matter","Front-load the words that matter",[11,1921,1922,1923,1926],{},"Because the end is what gets cut, put your most important, most descriptive terms first. A title like ",[56,1924,1925],{},"Meta Tags Checker — Audit Titles & Descriptions Across Your Site"," leads with what the page is. The reverse — opening with your brand or a generic phrase — wastes the prime real estate that always survives truncation.",[84,1928,1930],{"id":1929},"where-the-brand-goes","Where the brand goes",[11,1932,1933,1934,1937],{},"For most pages, append your brand at the end, separated by a pipe or dash: ",[56,1935,1936],{},"Sitemap Validator | SeoSitemap.app",". That way, if Google clips the title, it loses the brand (which the searcher can often infer from the URL) rather than the descriptive part. The homepage is the natural exception — there, leading with the brand makes sense.",[11,1939,1940],{},"Two small habits prevent a surprising number of problems. Make every title unique: duplicate titles across pages confuse both searchers and Google, and they are a classic symptom of templating gone wrong. And give every page a title at all — a missing title tag forces Google to invent one from whatever it can find, usually the page's first heading or a snippet of body text.",[18,1942,1944],{"id":1943},"meta-descriptions-a-ctr-tool-not-a-ranking-signal","Meta descriptions: a CTR tool, not a ranking signal",[11,1946,1947,1948,1951],{},"Let us be precise about what a meta description does. It is ",[35,1949,1950],{},"not a ranking factor"," — Google has said for years that the text of your description does not influence where you rank. What it does influence is whether anyone clicks. It is your sales pitch in the SERP, the one chance to explain in your own words why this result answers the query.",[84,1953,1955],{"id":1954},"the-150160-character-guide","The ~150–160 character guide",[11,1957,1958,1959,1962],{},"As a practical limit, ",[35,1960,1961],{},"keep descriptions to about 150–160 characters."," Like titles, the true constraint is pixel width and the cut-off varies — Google has at times shown longer snippets and at other times shorter ones — but 150–160 is the range that renders reliably on desktop without getting clipped. On mobile the visible portion is shorter still, so the first sentence has to carry the weight.",[84,1964,1966],{"id":1965},"write-for-the-query-not-the-keyword","Write for the query, not the keyword",[11,1968,1969],{},"A good description does three things: it confirms the page matches what the searcher asked, it previews the value (a number, a benefit, a specific feature), and it does so in natural language. \"Free meta tags checker — scan every page on your site and flag titles or descriptions that are too long, too short, or missing\" tells a searcher exactly what they will get. Stuffing the same keyword three times does the opposite; it reads like spam and Google may discard it.",[11,1971,1972,1973,1976],{},"One more reason to write a good one: when your description contains the words the searcher typed, Google ",[35,1974,1975],{},"bolds"," those terms in the snippet. A description written around the genuine query naturally collects those bolded matches, which makes the result more eye-catching.",[18,1978,1980],{"id":1979},"why-google-rewrites-your-tags-and-how-to-reduce-the-odds","Why Google rewrites your tags — and how to reduce the odds",[11,1982,1983],{},"You can write a perfect title and description and still see something different in the wild. Google frequently rewrites both, and understanding why helps you write tags it is more likely to keep.",[11,1985,1986,1987,1990,1991,1993,1994,1997],{},"Google rewrites a ",[35,1988,1989],{},"title"," when it judges your version to be a poor fit for the query — too long, half-empty boilerplate, keyword-stuffed, identical across many pages, or simply less descriptive than your own ",[56,1992,366],{}," or a clear bit of on-page text. It rewrites a ",[35,1995,1996],{},"description"," even more readily: if your description does not address the specific search, Google will often pull a more relevant sentence straight from the page body instead. This is why the same page can show different descriptions for different queries — there is no single \"the\" snippet.",[11,1999,2000],{},"You cannot force Google to use your text, but you can stack the odds:",[40,2002,2003,2009,2015,2021],{},[43,2004,2005,2008],{},[35,2006,2007],{},"Be accurate and specific."," Tags that genuinely summarise the page get kept far more often than vague ones.",[43,2010,2011,2014],{},[35,2012,2013],{},"Match real search intent."," If people reach the page via several distinct queries, a description that speaks to the page's core purpose travels better than one tuned to a single phrase.",[43,2016,2017,2020],{},[35,2018,2019],{},"Avoid the obvious triggers."," Cut keyword stuffing, kill duplicate tags, and make sure nothing is auto-generated filler.",[43,2022,2023,2026],{},[35,2024,2025],{},"Keep within the visible limits."," A tag that fits is a tag Google has less reason to trim or replace.",[11,2028,2029,2030,2032,2033,2035],{},"Treat rewrites as feedback. If Google consistently swaps your title for your ",[56,2031,366],{},", that is a strong hint your ",[56,2034,366],{}," is the clearer summary — so bring your title closer to it.",[18,2037,2039],{"id":2038},"auditing-length-across-every-page-at-once","Auditing length across every page at once",[11,2041,2042,2043,2046],{},"Checking one page in a browser tab is easy. Checking five hundred is not, and that is exactly where length problems hide — in the templated pages nobody reviews by hand. This is the job our ",[26,2044,2045],{"href":108},"Meta Tags Checker"," is built for: point it at your site and it crawls every page, then flags titles and descriptions that are too long, too short, or missing entirely, so you can fix the worst offenders first instead of guessing.",[11,2048,2049,2050,2052],{},"To make sure the crawler reaches every page worth checking, it is worth confirming your sitemap is complete and valid first — our ",[26,2051,973],{"href":174}," pulls and validates the sitemap that feeds the audit. A page missing from your sitemap is a page whose tags you will never get around to reviewing.",[11,2054,2055],{},"Work through the results in priority order: missing tags first (Google is improvising those completely), then over-length titles on pages that already rank (where truncation is costing you clicks you have already earned), then thin or duplicate descriptions. You will usually find that a handful of templates are responsible for most of the issues, so one fix can clear dozens of pages.",[18,2057,180],{"id":179},[40,2059,2060,2066,2072,2078,2084,2090],{},[43,2061,2062,2065],{},[35,2063,2064],{},"Titles are limited by pixel width, not characters"," — use ~50–60 characters as a safe rule of thumb and trim harder when the text is visually wide.",[43,2067,2068,2071],{},[35,2069,2070],{},"Front-load the descriptive words"," and put your brand at the end, so truncation eats the least important part.",[43,2073,2074,2077],{},[35,2075,2076],{},"Meta descriptions do not affect rankings"," but they drive CTR; aim for ~150–160 characters and write for the actual query.",[43,2079,2080,2083],{},[35,2081,2082],{},"Google rewrites titles and descriptions often"," — keep tags accurate, specific, unique, and within the visible limits to reduce the odds.",[43,2085,2086,2089],{},[35,2087,2088],{},"Audit at scale, not page by page."," Use the meta tags checker to flag length problems across the whole site, after validating your sitemap so nothing is missed.",[43,2091,2092,2095,2096,2098],{},[35,2093,2094],{},"Treat rewrites as feedback"," — if Google keeps swapping in your ",[56,2097,366],{},", your title probably should look more like it.",{"title":227,"searchDepth":228,"depth":228,"links":2100},[2101,2102,2106,2110,2111,2112],{"id":1847,"depth":228,"text":1848},{"id":1861,"depth":228,"text":1862,"children":2103},[2104,2105],{"id":1918,"depth":233,"text":1919},{"id":1929,"depth":233,"text":1930},{"id":1943,"depth":228,"text":1944,"children":2107},[2108,2109],{"id":1954,"depth":233,"text":1955},{"id":1965,"depth":233,"text":1966},{"id":1979,"depth":228,"text":1980},{"id":2038,"depth":228,"text":2039},{"id":179,"depth":228,"text":180},"Title & Meta Description Length: What Google Actually Shows — SeoSitemap.app blog cover","The practical limits for title tags and meta descriptions, why Google rewrites them, and how to write ones that survive truncation and earn more clicks.",{},"/blog/meta-tag-length","2026-06-04",{"title":1836,"description":2114},"blog/meta-tag-length",[253,2121,2122,2123],"title-tag","meta-description","ctr","Sv1BV1dIWNeuslAdhc7xAUNxHLEZ0XLPhYuCksfLIN0",1782683586853]