Catalog / rubywtf.com
65

SEO audit for rubywtf.com

Ruby WTF

other

Health 65/100 (fair) · 27 pages crawled · generated 2026-08-26

Download Markdown report (feed to ChatGPT / Claude / Cursor)
Screenshot of rubywtf.com
27
pages crawled
23
indexable pages
0
errors
153
warnings
290
notices
0
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Mobile 73 0 24 0
Performance 73 0 24 93
Headings 74 0 23 0
Agent Readiness 76 0 22 20
Images 76 0 22 23
Content 78 0 20 19
Duplicate 94 0 5 0
Indexability 96 0 4 0
Meta Description 96 0 4 14
Budget 97 0 3 0
Canonical 99 0 1 0
Links 99 0 1 46
Amp 100 0 0 19
Crawlability 100 0 0 2
Security 100 0 0 1
Sitemap 100 0 0 2
Social 100 0 0 42
Structured Data 100 0 0 2
Titles 100 0 0 7
Findings

Warnings (15 rules)

warning Control has no accessible name

Rule agent.control_no_name · Agent Readiness · 22 occurrence(s)

warning robots.txt-disallowed URL receives internal links (crawl-budget leak)

Rule budget.disallow_linked · Budget · 1 occurrence(s)

  • https://rubywtf.com/random — internal links point to https://rubywtf.com/random, which robots.txt disallows for Googlebot — Googlebot discovers the URL, checks robots, then rejects it without indexing, wasting crawl budget and losing the link equity. Remove the internal links, or use noindex instead of Disallow if the page should be fetchable. Linked from: https://rubywtf.com/, https://rubywtf.com/post/43670123738/nl-in-ruby, https://rubywtf.com/post/20624075127.

warning Noindex page receives internal links (crawl-budget waste)

Rule budget.noindex_linked · Budget · 2 occurrence(s)

  • https://rubywtf.com/mobile — this noindex page has 22 internal inlink(s) — Googlebot follows them, fetches the page, then drops it unindexed, spending crawl budget for no indexing benefit (and the links leak equity). Remove/redirect the links, or drop the noindex if the page should be indexed. Linked from: https://rubywtf.com/, https://rubywtf.com/post/43670123738/nl-in-ruby, https://rubywtf.com/post/20624075127.
  • https://rubywtf.com/mobile/page/2 — this noindex page has 1 internal inlink(s) — Googlebot follows them, fetches the page, then drops it unindexed, spending crawl budget for no indexing benefit (and the links leak equity). Remove/redirect the links, or drop the noindex if the page should be indexed. Linked from: https://rubywtf.com/mobile.

warning Missing canonical tag

Rule canonical.missing · Canonical · 1 occurrence(s)

warning noindex set via the X-Robots-Tag HTTP header (easy to miss)

Rule directives.noindex_via_x_robots · Indexability · 2 occurrence(s)

  • https://rubywtf.com/mobile — this page is noindex via the X-Robots-Tag HTTP header (not a meta tag) — set at the server/CDN layer and easy to miss. Confirm it's intentional; one broad rule can deindex a whole path.
  • https://rubywtf.com/mobile/page/2 — this page is noindex via the X-Robots-Tag HTTP header (not a meta tag) — set at the server/CDN layer and easy to miss. Confirm it's intentional; one broad rule can deindex a whole path.

warning Duplicate page content

Rule duplicate.content · Duplicate · 2 occurrence(s)

warning Duplicate <title> across pages

Rule duplicate.title · Duplicate · 3 occurrence(s)

warning Images missing alt text

Rule images.missing_alt · Images · 22 occurrence(s)

warning noindex + nofollow (blocks link equity flow)

Rule index.noindex_nofollow · Indexability · 2 occurrence(s)

warning Internal link points to a redirect

Rule links.redirect_target · Links · 1 occurrence(s)

warning Missing meta description

Rule meta_desc.missing · Meta Description · 4 occurrence(s)

warning Render-blocking script in <head> (no defer/async)

Rule perf.render_blocking · Performance · 24 occurrence(s)

Notices (23 rules)

notice No llms.txt for AI agents

Rule agent.llms_txt_missing · Agent Readiness · 1 occurrence(s)

  • https://rubywtf.com/ — no llms.txt found at the site root — add one so AI agents get a curated site summary

notice No main landmark for AI agents

Rule agent.no_main_landmark · Agent Readiness · 19 occurrence(s)

notice AMP markup present (no Google Search benefit since Jul 2026)

Rule amp.deprecated · Amp · 19 occurrence(s)

  • https://rubywtf.com/post/20611182546/the-global-hash-function — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/20619748793/class-variables — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/20621192256/but-there-is-no-file — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/20624075127 — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/20624194164/line-noise — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/20994130990/indiana-style — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/20994886315/x-versus-x — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/21041117654/ruby-mysteries — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/21041262473/how-can-this-happen — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/21660532373/objects-blank — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/21744020991/string-splitting — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/21748289557/assertnomatch — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/22333466966/rwtf-classic-the-seven-types-of-blocks — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/24037145224/the-definition-of-time — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/24158299137/as-opposed-to-mexican-ascii — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/31903896834/but-why-does-it-round — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/39059463698/it-depends-on-what-the-meaning-of-is-a-is — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/41892234788/when-abmin-a-b-a-b — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.
  • https://rubywtf.com/post/43670123738/nl-in-ruby — this page advertises an AMP variant via <link rel="amphtml"> — Google removed AMP from Search on 1 Jul 2026, so the AMP page earns no ranking or feature benefit. Consider removing the link and 301-redirecting /amp/ URLs to their canonical equivalents.

notice Likely hero image lacks fetchpriority=high

Rule images.hero_no_fetchpriority · Performance · 22 occurrence(s)

  • https://rubywtf.com/ — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/page/1 — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/page/2 — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/20611182546/the-global-hash-function — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/20619748793/class-variables — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/20621192256/but-there-is-no-file — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/20624075127 — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/20624194164/line-noise — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/20994130990/indiana-style — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/20994886315/x-versus-x — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/21041117654/ruby-mysteries — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/21041262473/how-can-this-happen — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/21660532373/objects-blank — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/21744020991/string-splitting — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/21748289557/assertnomatch — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/22333466966/rwtf-classic-the-seven-types-of-blocks — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/24037145224/the-definition-of-time — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/24158299137/as-opposed-to-mexican-ascii — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/31903896834/but-why-does-it-round — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/39059463698/it-depends-on-what-the-meaning-of-is-a-is — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/41892234788/when-abmin-a-b-a-b — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://rubywtf.com/post/43670123738/nl-in-ruby — the likely hero/LCP image (rubywtf.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.

notice Images without width/height (layout shift / CLS)

Rule images.missing_dimensions · Images · 23 occurrence(s)

notice Internal link has no anchor text / accessible name

Rule links.no_anchor_text · Links · 22 occurrence(s)

notice Page has only one internal inlink (fragile crawl path)

Rule links.single_inlink · Links · 1 occurrence(s)

  • https://rubywtf.com/page/1 — only one internal link points here — if that source changes, this page becomes an orphan. Add more contextual internal links to strengthen the crawl path.

notice Internal link points to a noindex page

Rule links.to_noindex · Links · 23 occurrence(s)

notice Missing Open Graph tags

Rule og.missing · Social · 23 occurrence(s)

notice Legacy image format (jpg/png/gif) with no next-gen fallback

Rule perf.images_legacy_format · Performance · 22 occurrence(s)

notice No ETag header (no conditional GET for unchanged pages)

Rule perf.no_etag · Performance · 24 occurrence(s)

  • https://rubywtf.com/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/mobile — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/mobile/page/2 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/page/1 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/page/2 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/20611182546/the-global-hash-function — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/20619748793/class-variables — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/20621192256/but-there-is-no-file — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/20624075127 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/20624194164/line-noise — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/20994130990/indiana-style — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/20994886315/x-versus-x — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/21041117654/ruby-mysteries — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/21041262473/how-can-this-happen — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/21660532373/objects-blank — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/21744020991/string-splitting — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/21748289557/assertnomatch — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/22333466966/rwtf-classic-the-seven-types-of-blocks — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/24037145224/the-definition-of-time — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/24158299137/as-opposed-to-mexican-ascii — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/31903896834/but-why-does-it-round — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/39059463698/it-depends-on-what-the-meaning-of-is-a-is — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/41892234788/when-abmin-a-b-a-b — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://rubywtf.com/post/43670123738/nl-in-ruby — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.

notice No Last-Modified header (no conditional GET for unchanged pages)

Rule perf.no_last_modified · Performance · 25 occurrence(s)

  • https://rubywtf.com/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/archive — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/mobile — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/mobile/page/2 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/page/1 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/page/2 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/20611182546/the-global-hash-function — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/20619748793/class-variables — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/20621192256/but-there-is-no-file — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/20624075127 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/20624194164/line-noise — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/20994130990/indiana-style — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/20994886315/x-versus-x — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/21041117654/ruby-mysteries — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/21041262473/how-can-this-happen — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/21660532373/objects-blank — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/21744020991/string-splitting — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/21748289557/assertnomatch — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/22333466966/rwtf-classic-the-seven-types-of-blocks — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/24037145224/the-definition-of-time — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/24158299137/as-opposed-to-mexican-ascii — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/31903896834/but-why-does-it-round — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/39059463698/it-depends-on-what-the-meaning-of-is-a-is — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/41892234788/when-abmin-a-b-a-b — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://rubywtf.com/post/43670123738/nl-in-ruby — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.

notice URL redirects to another URL

Rule redirect.single · Crawlability · 1 occurrence(s)

notice Blocked by robots.txt

Rule robots.blocked · Crawlability · 1 occurrence(s)

notice Deep page has no BreadcrumbList structured data

Rule schema.breadcrumb_missing · Structured Data · 1 occurrence(s)

notice No structured data detected

Rule schema.none · Structured Data · 1 occurrence(s)

notice Missing recommended security headers

Rule security.missing_headers · Security · 1 occurrence(s)

notice Indexable page not listed in sitemap

Rule sitemap.orphan_not_listed · Sitemap · 2 occurrence(s)

notice Title tag is identical to the H1 (missed keyword variation)

Rule title.same_as_h1 · Titles · 2 occurrence(s)

notice Title is very short

Rule title.too_short · Titles · 5 occurrence(s)

Pages (showing 27 of 27)
URLStatusIndexableWordsIn-links
https://rubywtf.com/
Ruby WTF
200 yes 497 23
https://rubywtf.com/archive
Ruby WTF: Archive
200 yes 5 22
https://rubywtf.com/mobile
Ruby WTF
200 no 456 22
https://rubywtf.com/mobile/page/2
Ruby WTF
200 no 284 1
https://rubywtf.com/post/21660532373/objects-blank
Ruby WTF, Object's blank?
200 yes 48 3
https://rubywtf.com/post/21744020991/string-splitting
Ruby WTF, String splitting
200 yes 76 3
https://rubywtf.com/post/21748289557/assertnomatch
Ruby WTF, assert_no_match
200 yes 62 3
https://rubywtf.com/post/22333466966/rwtf-classic-the-seven-types-of-blocks
Ruby WTF, RWTF Classic: The Seven Types of Blocks
200 yes 127 3
https://rubywtf.com/post/24037145224/the-definition-of-time
Ruby WTF, The definition of "time"
200 yes 69 3
https://rubywtf.com/post/24158299137/as-opposed-to-mexican-ascii
Ruby WTF, As Opposed to Mexican ASCII
200 yes 50 3
https://rubywtf.com/post/31903896834/but-why-does-it-round
Ruby WTF, But Why Does It Round
200 yes 54 3
https://rubywtf.com/post/39059463698/it-depends-on-what-the-meaning-of-is-a-is
Ruby WTF, It depends on what the meaning of "is a" is
200 yes 70 3
https://rubywtf.com/post/41892234788/when-abmin-a-b-a-b
Ruby WTF, When [a,b].min != a < b ? a : b
200 yes 64 3
https://rubywtf.com/post/43670123738/nl-in-ruby
Ruby WTF, NL in Ruby
200 yes 45 3
https://rubywtf.com/page/2
Ruby WTF
200 yes 332 2
https://rubywtf.com/post/20611182546/the-global-hash-function
Ruby WTF, The global hash function
200 yes 54 2
https://rubywtf.com/post/20619748793/class-variables
Ruby WTF, Class Variables
200 yes 61 2
https://rubywtf.com/post/20621192256/but-there-is-no-file
Ruby WTF, But there is no file
200 yes 49 2
https://rubywtf.com/post/20624075127
Ruby WTF, %%%%%%
200 yes 38 2
https://rubywtf.com/post/20624194164/line-noise
Ruby WTF, Line noise
200 yes 58 2
https://rubywtf.com/post/20994130990/indiana-style
Ruby WTF, Indiana-style
200 yes 40 2
https://rubywtf.com/post/20994886315/x-versus-x
Ruby WTF, x versus x
200 yes 61 2
https://rubywtf.com/post/21041117654/ruby-mysteries
Ruby WTF, Ruby Mysteries
200 yes 67 2
https://rubywtf.com/post/21041262473/how-can-this-happen
Ruby WTF, How can this happen?
200 yes 54 2
https://rubywtf.com/page/1
Ruby WTF
200 yes 497 1
https://rubywtf.com/random 0 no 0 22
https://rubywtf.com/rss 200 no 0 22

Audit your own site — free

157 checks, internal PageRank, render-diff. No signup, results in ~30s.

Scan your site →