Internal Link Rot: Articles Point to Renamed or Deleted Slugs
Half your internal links return 404 because you renamed slugs without redirects. Run linkinator or lychee in CI, add a redirects file, fail prebuild on dangling links.
Articles tagged with #Site quality
Half your internal links return 404 because you renamed slugs without redirects. Run linkinator or lychee in CI, add a redirects file, fail prebuild on dangling links.
ZH pages have a canonical link pointing at the EN version — Google deindexes the ZH variant. Per-page canonical from current URL, verify with curl + view-source.
Your article has FAQPage JSON-LD but Google never shows the FAQ rich result. Causes: wrong Question/Answer nesting, page noindex, mismatched heading text. Fix and re-test.
Hreflang URLs don't pair, wrong language codes (zh vs zh-CN), missing x-default. Auto-emit from translationKey, validate with hreflang.org, fix at the source.
Articles use img tags with no alt attribute — bad for accessibility, bad for image search, bad for AdSense quality signals. Audit, backfill, enforce via MDX lint.
publishedAt never moves even when content is rewritten. Add updatedAt, use volatile for fast-moving topics, refresh dates only on substantial edits — not cosmetic ones.
Tag pages exist but have 0 published articles after cleanup. Audit tag usage, require minimum 1 article per tag, auto-deindex or 410 the empty archives.
Solo edits drift EN and ZH apart — sections, code blocks, links diverge. Audit pairs by structure, diff bilingual content, and enforce translate-as-you-edit policy.
Articles read fine but rank nowhere, get AdSense rejected for "unoriginal content." "Unique value" is one of six concrete additions — examples, data, contrarian POV, original research.
"We have 800 articles!" — but 60% are bilingual duplicates, drafts, or thin redirects. Count what matters: unique, indexable, substantive URLs.
English got updated 5 times, Chinese once. ZH version has outdated screenshots, broken cross-links, hreflang warnings. Audit drift, decide per pair, automate the sync.
Category page is title + cards. Google sees navigation, not content. Add a 300-word editorial intro + curated "start here" + a take, and the category becomes a hub article.
Build deployed pages still marked `draft: true`. They got indexed with placeholder text. Audit, deindex, then add CI guards so it can't happen again.
Audit flags 80 pages sharing the same `<title>`. Usually template fallback, pagination, or bilingual collision. Make per-page title required and CI-enforced.
200 outbound links on the homepage = 0.5% boost per link. Cut to 30 well-chosen destinations; move long lists to dedicated index pages.
Top 10 pages have 80% of internal links; 200 pages have 0–2. Audit + body-text linking + smart related-articles widget = rebalance one of the highest-leverage SEO actions.
500 articles, top 20 pages get 80% of impressions, the tail gets 0–5/month. Power-law is normal — dead tail is the bug. Validate keywords, fix intent + links.
Pages with zero internal inbound links earn nothing. Not just an indexing debt — a quality signal to Google. Detect + integrate or remove.
"Crawled — not indexed" balloons to thousands of `?sort=`, `?page=`, tag-combo URLs. Triage by source, block via canonical / robots / noindex; reclaim crawl budget.
100 articles in 3 months — same structure, same examples, same conclusion. Templated thinking, not AI per se. Diversify angle + slow down before publishing more.
Half your articles are 3+ years old, referencing tools that changed dramatically. Refresh top-traffic stale articles with real edits (not date-bump tricks).
800 tags, 600 with 1-2 articles each = 600 thin archive pages. Set minimum-article threshold, merge synonyms, noindex the rest.
500+ pages, Google considers most thin. Audit by word count + traffic, then tag each as expand / merge / noindex / 410. Cut the weakest 20-40%.
Pillar + 2 supporting articles isn't a cluster — it's a stub. Real clusters have 6-10+ supporting articles. Brainstorm sub-topics, ship steadily over months, link bidirectionally.