Catalog / nor.ma
66

SEO audit for nor.ma

Norma — Block distracting apps by scanning a steel disc

saasNext.js

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

Download Markdown report (feed to ChatGPT / Claude / Cursor)

Norma is a stainless steel NFC disc. Scan it with your iPhone and the distracting apps you choose disappear — until you scan again. No subscription, no battery, no charging. A physical focus tool to c…

Screenshot of nor.ma
27
pages crawled
26
indexable pages
0
errors
238
warnings
293
notices
2
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Links 0 0 214 1
Hreflang 87 0 12 0
Duplicate 96 0 4 2
Structured Data 96 0 4 28
Content 98 0 2 49
Titles 99 0 1 1
Video 99 0 1 0
Agent Readiness 100 0 0 1
Cache 100 0 0 12
Crawlability 100 0 0 15
Images 100 0 0 37
Meta Description 100 0 0 17
Performance 100 0 0 82
Security 100 0 0 26
Sitemap 100 0 0 4
Social 100 0 0 17
URL 100 0 0 1
Findings

Warnings (9 rules)

warning Thin content (low word count)

Rule content.thin · Content · 2 occurrence(s)

warning Duplicate page content

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

warning Duplicate <title> across pages

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

warning Self hreflang language disagrees with html lang

Rule hreflang.mismatch_html_lang · Hreflang · 12 occurrence(s)

  • https://nor.ma/affiliates — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog/cost-of-a-quick-check — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog/how-to-cut-screen-time — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog/norma-vs-brick-and-opal — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog/norma-vs-screen-time-apps — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog/notifications-silenced-iphone — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog/stop-infinite-scrolling-iphone — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog/the-steel-disc — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog/what-is-norma — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/blog/your-screen-time-isnt-your-fault — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://nor.ma/shop — the self-referencing hreflang is "en" but <html lang> is "fr" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.

warning Orphan page (no internal inlinks)

Rule links.orphan · Links · 2 occurrence(s)

warning Internal link points to a redirect

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

  • https://nor.ma/ — https://nor.ma/affiliates → https://nor.ma/fr/affiliates
  • https://nor.ma/ — https://nor.ma/blog → https://nor.ma/fr/blog
  • https://nor.ma/ — https://nor.ma/blog/norma-vs-brick-and-opal → https://nor.ma/fr/blog/norma-vs-brick-and-opal
  • https://nor.ma/ — https://nor.ma/blog/notifications-silenced-iphone → https://nor.ma/fr/blog/notifications-silenced-iphone
  • https://nor.ma/ — https://nor.ma/blog/stop-infinite-scrolling-iphone → https://nor.ma/fr/blog/stop-infinite-scrolling-iphone
  • https://nor.ma/ — https://nor.ma/blog/the-steel-disc → https://nor.ma/fr/blog/the-steel-disc
  • https://nor.ma/ — https://nor.ma/blog/what-is-norma → https://nor.ma/fr/blog/what-is-norma
  • https://nor.ma/ — https://nor.ma/faq → https://nor.ma/fr/faq
  • https://nor.ma/ — https://nor.ma/legal/privacy-policy → https://nor.ma/fr/legal/privacy-policy
  • https://nor.ma/ — https://nor.ma/legal/shipping-refund-policy → https://nor.ma/fr/legal/shipping-refund-policy
  • https://nor.ma/ — https://nor.ma/shop → https://nor.ma/fr/shop
  • https://nor.ma/app — https://nor.ma/affiliates → https://nor.ma/fr/affiliates
  • https://nor.ma/app — https://nor.ma/blog → https://nor.ma/fr/blog
  • https://nor.ma/app — https://nor.ma/faq → https://nor.ma/fr/faq
  • https://nor.ma/app — https://nor.ma/legal/privacy-policy → https://nor.ma/fr/legal/privacy-policy
  • https://nor.ma/app — https://nor.ma/legal/shipping-refund-policy → https://nor.ma/fr/legal/shipping-refund-policy
  • https://nor.ma/app — https://nor.ma/shop → https://nor.ma/fr/shop
  • https://nor.ma/mac — https://nor.ma/affiliates → https://nor.ma/fr/affiliates
  • https://nor.ma/mac — https://nor.ma/blog → https://nor.ma/fr/blog
  • https://nor.ma/mac — https://nor.ma/faq → https://nor.ma/fr/faq
  • https://nor.ma/mac — https://nor.ma/legal/privacy-policy → https://nor.ma/fr/legal/privacy-policy
  • https://nor.ma/mac — https://nor.ma/legal/shipping-refund-policy → https://nor.ma/fr/legal/shipping-refund-policy
  • https://nor.ma/mac — https://nor.ma/shop → https://nor.ma/fr/shop
  • https://nor.ma/story — https://nor.ma/blog → https://nor.ma/fr/blog
  • https://nor.ma/story — https://nor.ma/faq → https://nor.ma/fr/faq

warning Schema describes content not visible on the page

Rule schema.hidden_content · Structured Data · 4 occurrence(s)

  • https://nor.ma/affiliates — a schema name/headline ("Norma — Focus Disc") does not appear in the page's visible text — Google's policies prohibit marking up content not visible to readers. This is a heuristic (a static-HTML substring check): JS-rendered or abbreviated names can be false positives, so verify before removing.
  • https://nor.ma/legal/privacy-policy — a schema name/headline ("Norma — Focus Disc") does not appear in the page's visible text — Google's policies prohibit marking up content not visible to readers. This is a heuristic (a static-HTML substring check): JS-rendered or abbreviated names can be false positives, so verify before removing.
  • https://nor.ma/legal/shipping-refund-policy — a schema name/headline ("Norma — Focus Disc") does not appear in the page's visible text — Google's policies prohibit marking up content not visible to readers. This is a heuristic (a static-HTML substring check): JS-rendered or abbreviated names can be false positives, so verify before removing.
  • https://nor.ma/student — a schema name/headline ("Norma — Focus Disc") does not appear in the page's visible text — Google's policies prohibit marking up content not visible to readers. This is a heuristic (a static-HTML substring check): JS-rendered or abbreviated names can be false positives, so verify before removing.

warning Title likely truncated in SERP (too wide)

Rule title.too_long · Titles · 1 occurrence(s)

warning Video element present but hidden/zero-size (prominence)

Rule video.hidden · Video · 1 occurrence(s)

Notices (23 rules)

notice Heading levels skip a level

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

notice Page served uncached (no-store/private or CDN bypass)

Rule cache.not_cacheable · Cache · 12 occurrence(s)

notice Duplicate meta description across pages

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

notice Image filename is generic/auto-generated (missed image-search signal)

Rule images.generic_filename · Images · 11 occurrence(s)

  • https://nor.ma/ — 5 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog — 5 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog/cost-of-a-quick-check — 2 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog/how-to-cut-screen-time — 3 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog/norma-vs-brick-and-opal — 4 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog/norma-vs-screen-time-apps — 3 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog/notifications-silenced-iphone — 4 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog/stop-infinite-scrolling-iphone — 4 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog/the-steel-disc — 4 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog/what-is-norma — 5 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://nor.ma/blog/your-screen-time-isnt-your-fault — 2 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.

notice Likely hero image lacks fetchpriority=high

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

  • https://nor.ma/ — the likely hero/LCP image (wordmarkwhite.svg) 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://nor.ma/affiliates — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/app — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog/cost-of-a-quick-check — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog/how-to-cut-screen-time — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog/norma-vs-brick-and-opal — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog/norma-vs-screen-time-apps — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog/notifications-silenced-iphone — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog/stop-infinite-scrolling-iphone — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog/the-steel-disc — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog/what-is-norma — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/blog/your-screen-time-isnt-your-fault — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/brick-alternative — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/business — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/faq — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/fr/brick-alternative — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/fr/shop — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/legal/privacy-policy — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/legal/shipping-refund-policy — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/mac — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/shop — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/story — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/student — the likely hero/LCP image (wordmarkblack.svg) 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://nor.ma/support — the likely hero/LCP image (wordmarkblack.svg) 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 · 26 occurrence(s)

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

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

  • https://nor.ma/fr/support — 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 Legacy <meta name=keywords> tag present (Google ignores it)

Rule meta.keywords_present · Content · 26 occurrence(s)

notice Meta description too short

Rule meta_desc.too_short · Meta Description · 1 occurrence(s)

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

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

  • https://nor.ma/ — 20 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/app — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog — 5 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog/cost-of-a-quick-check — 3 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog/how-to-cut-screen-time — 4 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog/norma-vs-brick-and-opal — 5 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog/norma-vs-screen-time-apps — 4 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog/notifications-silenced-iphone — 5 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog/stop-infinite-scrolling-iphone — 5 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog/the-steel-disc — 5 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog/what-is-norma — 6 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/blog/your-screen-time-isnt-your-fault — 3 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/brick-alternative — 8 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/fr/brick-alternative — 8 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/fr/shop — 15 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/mac — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://nor.ma/shop — 15 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.

notice Large HTML document

Rule perf.large_html · Performance · 1 occurrence(s)

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

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

  • https://nor.ma/blog — 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://nor.ma/blog/cost-of-a-quick-check — 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://nor.ma/blog/how-to-cut-screen-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://nor.ma/blog/norma-vs-brick-and-opal — 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://nor.ma/blog/norma-vs-screen-time-apps — 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://nor.ma/blog/notifications-silenced-iphone — 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://nor.ma/blog/stop-infinite-scrolling-iphone — 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://nor.ma/blog/the-steel-disc — 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://nor.ma/blog/what-is-norma — 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://nor.ma/blog/your-screen-time-isnt-your-fault — 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://nor.ma/fr/shop — 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://nor.ma/shop — 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 · 26 occurrence(s)

  • https://nor.ma/ — 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://nor.ma/affiliates — 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://nor.ma/app — 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://nor.ma/blog — 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://nor.ma/blog/cost-of-a-quick-check — 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://nor.ma/blog/how-to-cut-screen-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://nor.ma/blog/norma-vs-brick-and-opal — 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://nor.ma/blog/norma-vs-screen-time-apps — 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://nor.ma/blog/notifications-silenced-iphone — 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://nor.ma/blog/stop-infinite-scrolling-iphone — 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://nor.ma/blog/the-steel-disc — 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://nor.ma/blog/what-is-norma — 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://nor.ma/blog/your-screen-time-isnt-your-fault — 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://nor.ma/brick-alternative — 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://nor.ma/business — 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://nor.ma/faq — 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://nor.ma/fr/brick-alternative — 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://nor.ma/fr/shop — 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://nor.ma/legal/privacy-policy — 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://nor.ma/legal/shipping-refund-policy — 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://nor.ma/mac — 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://nor.ma/shop — 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://nor.ma/story — 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://nor.ma/student — 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://nor.ma/support — 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 · 15 occurrence(s)

notice Deep page has no BreadcrumbList structured data

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

notice FAQPage structured data (rich result removed May 2026)

Rule schema.faq_deprecated · Structured Data · 26 occurrence(s)

  • https://nor.ma/ — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/affiliates — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/app — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog/cost-of-a-quick-check — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog/how-to-cut-screen-time — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog/norma-vs-brick-and-opal — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog/norma-vs-screen-time-apps — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog/notifications-silenced-iphone — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog/stop-infinite-scrolling-iphone — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog/the-steel-disc — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog/what-is-norma — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/blog/your-screen-time-isnt-your-fault — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/brick-alternative — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/business — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/faq — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/fr/brick-alternative — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/fr/shop — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/legal/privacy-policy — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/legal/shipping-refund-policy — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/mac — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/shop — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/story — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/student — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.
  • https://nor.ma/support — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.

notice Missing recommended security headers

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

notice Indexable page not listed in sitemap

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

notice Title is very short

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

notice Uppercase letters in URL path

Rule url.uppercase · URL · 1 occurrence(s)

Pages (showing 27 of 27)
URLStatusIndexableWordsIn-links
https://nor.ma/
Norma — Block distracting apps by scanning a steel disc
200 yes 1448 26
https://nor.ma/affiliates
Programme d'affiliation — gagnez avec Norma · Norma
200 yes 213 26
https://nor.ma/app
Download Norma Focus — iPhone & Mac app blocker · Norma
200 yes 94 26
https://nor.ma/blog
Journal — focus, attention et temps d'écran · Norma
200 yes 523 26
https://nor.ma/business
Norma for teams — focus, in bulk · Norma
200 yes 321 26
https://nor.ma/faq
Vos questions, nos réponses. · Norma
200 yes 543 26
https://nor.ma/legal/privacy-policy
Privacy Policy · Norma
200 yes 551 26
https://nor.ma/legal/shipping-refund-policy
Shipping & Refund Policy · Norma
200 yes 191 26
https://nor.ma/mac
Norma for Mac — block the web while you focus · Norma
200 yes 455 26
https://nor.ma/shop
Commandez votre Norma · Norma
200 yes 848 26
https://nor.ma/story
Our story — why Norma is a physical disc · Norma
200 yes 342 26
https://nor.ma/student
Student discount — 20% off · Norma
200 yes 200 26
https://nor.ma/support
Support · Norma
200 yes 702 26
https://nor.ma/fr/shop
Commandez votre Norma · Norma
200 yes 848 18
https://nor.ma/blog/stop-infinite-scrolling-iphone
How to stop infinite scrolling on your iPhone (so it actually sticks). · Norma
200 yes 913 10
https://nor.ma/blog/what-is-norma
What is Norma? · Norma
200 yes 758 10
https://nor.ma/blog/notifications-silenced-iphone
Why your iPhone says ‘Notifications Silenced’ — and when to want it. · Norma
200 yes 899 8
https://nor.ma/blog/the-steel-disc
The steel disc: why focus works better as an object. · Norma
200 yes 707 7
https://nor.ma/blog/your-screen-time-isnt-your-fault
Votre temps d'écran n'est pas de votre faute. · Norma
200 yes 1605 8
https://nor.ma/blog/norma-vs-brick-and-opal
Norma vs Brick vs Opal: which screen-time tool actually holds? · Norma
200 yes 899 3
https://nor.ma/blog/norma-vs-screen-time-apps
Norma face aux applications de temps d'écran. · Norma
200 yes 1153 6
https://nor.ma/fr/support
Aide · Norma
200 yes 724 1
https://nor.ma/blog/how-to-cut-screen-time
Comment vraiment réduire votre temps d'écran. · Norma
200 yes 1120 2
https://nor.ma/blog/cost-of-a-quick-check
Le vrai coût d'une « vérification rapide ». · Norma
200 yes 1108 2
https://nor.ma/brick-alternative
Norma or Brick — an honest comparison · Norma
200 yes 974 0
https://nor.ma/fr/brick-alternative
Norma ou Brick — le comparatif honnête · Norma
200 yes 1075 0
https://nor.ma/mac/Norma.dmg 200 no 0 2

Audit your own site — free

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

Scan your site →