Catalog / io.tt
63

SEO audit for io.tt

io.tt - The Connected Experiences Platform

saasNext.js

Health 63/100 (fair) · 50 pages crawled · generated 2026-08-26

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

io.tt enables brands to drive digital experiences for their customers through QR codes, NFC, and AR on their packaging and digital media. Find out how here.

Screenshot of io.tt
50
pages crawled
48
indexable pages
4
errors
105
warnings
281
notices
0
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Crawlability 96 2 0 0
Sitemap 96 2 0 0
Canonical 71 0 48 0
Performance 73 0 45 50
Duplicate 98 0 4 5
Content 99 0 2 61
Headings 99 0 2 41
Indexability 99 0 2 0
Images 99 0 1 9
Titles 99 0 1 2
Agent Readiness 100 0 0 37
Cache 100 0 0 2
Meta Description 100 0 0 7
Security 100 0 0 51
Structured Data 100 0 0 16
Findings

Errors (2 rules)

error Non-200 URL listed in sitemap

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

error Client error (4xx) response

Rule status.4xx · Crawlability · 2 occurrence(s)

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 Missing <h1>

Rule h1.missing · Headings · 2 occurrence(s)

warning Images missing alt text

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

warning Hero/LCP image is lazy-loaded (loading=lazy delays LCP)

Rule images.no_lazy_lcp_candidate · Performance · 45 occurrence(s)

  • https://io.tt/ — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/about — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/5-dynamic-connected-experiences-that-brands-are-getting-right — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/compliance-engagement-and-authentication-connected-products-in-luxury — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/dpps-labelling-gs1-and-consumer-engagement-the-business-case-for-connected-packaging-beauty — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/fake-products-real-consequences — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/gs1-sunrise-first-party-data-and-authentication-connected-packaging-in-cpg — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/labelling-consumer-engagement-and-gs1-sunrise-the-business-case-for-beer — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/navigating-the-eus-ppwr-and-espr-regulations-what-brands-need-to-know — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/the-power-of-2d-barcodes-bridging-the-gap-between-consumers-and-supply — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/what-connected-experience-data-reveals-about-consumer-behaviour — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/blog/why-gs1-project-sunrise-matters-the-future-of-product-identification — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/case-study — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/pricing — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/product — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/resolver — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/roi — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/signup — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/signup?plan=free-trial — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/solutions/compliance — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/solutions/consumer-engagement — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/solutions/data-opportunity — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/templates — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://io.tt/whitepapers/cxr3 — the likely hero/LCP image (image) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.

warning Page is noindex

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

warning Title likely truncated in SERP (too wide)

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

Notices (16 rules)

notice Heading levels skip a level

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

notice No llms.txt for AI agents

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

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

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

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

notice Main text is hard to read (low Flesch Reading Ease)

Rule content.readability_poor · Content · 44 occurrence(s)

  • https://io.tt/ — this page reads as very difficult (Flesch Reading Ease 27, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/about — this page reads as difficult (Flesch Reading Ease 43, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/5-dynamic-connected-experiences-that-brands-are-getting-right — this page reads as difficult (Flesch Reading Ease 30, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/compliance-engagement-and-authentication-connected-products-in-luxury — this page reads as very difficult (Flesch Reading Ease 17, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/dpps-labelling-gs1-and-consumer-engagement-the-business-case-for-connected-packaging-beauty — this page reads as very difficult (Flesch Reading Ease 19, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/fake-products-real-consequences — this page reads as difficult (Flesch Reading Ease 42, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/gs1-sunrise-first-party-data-and-authentication-connected-packaging-in-cpg — this page reads as very difficult (Flesch Reading Ease 25, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/labelling-consumer-engagement-and-gs1-sunrise-the-business-case-for-beer — this page reads as difficult (Flesch Reading Ease 36, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/navigating-the-eus-ppwr-and-espr-regulations-what-brands-need-to-know — this page reads as very difficult (Flesch Reading Ease 25, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/the-power-of-2d-barcodes-bridging-the-gap-between-consumers-and-supply — this page reads as difficult (Flesch Reading Ease 33, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/what-connected-experience-data-reveals-about-consumer-behaviour — this page reads as difficult (Flesch Reading Ease 36, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/blog/why-gs1-project-sunrise-matters-the-future-of-product-identification — this page reads as very difficult (Flesch Reading Ease 19, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/case-study — this page reads as difficult (Flesch Reading Ease 37, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/contact — this page reads as difficult (Flesch Reading Ease 49, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/pricing — this page reads as very difficult (Flesch Reading Ease 5, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/product — this page reads as very difficult (Flesch Reading Ease 25, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/resolver — this page reads as difficult (Flesch Reading Ease 36, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/roi — this page reads as difficult (Flesch Reading Ease 44, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/signup — this page reads as difficult (Flesch Reading Ease 39, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/signup?plan=free-trial — this page reads as difficult (Flesch Reading Ease 39, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/solutions/compliance — this page reads as very difficult (Flesch Reading Ease 29, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/solutions/consumer-engagement — this page reads as very difficult (Flesch Reading Ease 24, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/solutions/data-opportunity — this page reads as difficult (Flesch Reading Ease 41, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/templates — this page reads as difficult (Flesch Reading Ease 40, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://io.tt/whitepapers/cxr3 — this page reads as difficult (Flesch Reading Ease 39, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.

notice Duplicate meta description across pages

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

notice Multiple <h1> elements

Rule h1.multiple · Headings · 41 occurrence(s)

notice Image alt text is very long (possible keyword stuffing)

Rule images.alt_too_long · Images · 9 occurrence(s)

notice Meta description too short

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

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

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

  • https://io.tt/signup — 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://io.tt/signup?plan=free-trial — 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 · 48 occurrence(s)

  • https://io.tt/ — 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://io.tt/about — 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://io.tt/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://io.tt/blog/5-dynamic-connected-experiences-that-brands-are-getting-right — 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://io.tt/blog/dpps-labelling-gs1-and-consumer-engagement-the-business-case-for-connected-packaging-beauty — 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://io.tt/blog/fake-products-real-consequences — 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://io.tt/blog/navigating-the-eus-ppwr-and-espr-regulations-what-brands-need-to-know — 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://io.tt/blog/the-power-of-2d-barcodes-bridging-the-gap-between-consumers-and-supply — 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://io.tt/blog/what-connected-experience-data-reveals-about-consumer-behaviour — 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://io.tt/blog/why-gs1-project-sunrise-matters-the-future-of-product-identification — 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://io.tt/case-study — 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://io.tt/contact — 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://io.tt/pricing — 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://io.tt/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://io.tt/product — 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://io.tt/resolver — 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://io.tt/roi — 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://io.tt/signup — 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://io.tt/signup?plan=free-trial — 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://io.tt/solutions/compliance — 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://io.tt/solutions/consumer-engagement — 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://io.tt/solutions/data-opportunity — 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://io.tt/templates — 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://io.tt/terms-conditions — 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://io.tt/whitepapers/cxr3 — 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 Missing recommended security headers

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

notice target=_blank link without rel=noopener (tab-napping)

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

  • https://io.tt/privacy-policy — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".

notice Title is very short

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

Pages (showing 50 of 50)
URLStatusIndexableWordsIn-links
https://io.tt/
io.tt - The Connected Experiences Platform
200 yes 295 50
https://io.tt/about
Our Company and Purpose | io.tt
200 yes 264 50
https://io.tt/blog
Connected Experiences Insight & Research | io.tt
200 yes 92 50
https://io.tt/case-study
Our Customer Case Studies | io.tt
200 yes 356 50
https://io.tt/contact
Contact Us | io.tt
200 yes 157 50
https://io.tt/pricing
Pricing | io.tt
200 yes 349 50
https://io.tt/privacy-policy
Privacy Policy | io.tt
200 yes 1302 50
https://io.tt/product
Product Features and Benefits | io.tt
200 yes 440 50
https://io.tt/resolver
Resolver | io.tt
200 yes 403 50
https://io.tt/signup
Signup | io.tt
200 yes 204 50
https://io.tt/templates
Connected Packaging Templates | io.tt
200 yes 381 50
https://io.tt/terms-conditions
Platform Terms and Conditions | io.tt
200 yes 860 50
https://io.tt/solutions/consumer-engagement
Customer Engagement With Connected Experiences | io.tt
200 yes 254 19
https://io.tt/solutions/data-opportunity
Customer Data With Connected Experiences | io.tt
200 yes 258 19
https://io.tt/solutions/compliance
Regulation Compliance With Connected Experiences | io.tt
200 yes 250 13
https://io.tt/signup?plan=free-trial
Signup | io.tt
200 yes 204 9
https://io.tt/blog/navigating-the-eus-ppwr-and-espr-regulations-what-brands-need-to-know
Navigating the EU’s PPWR and ESPR Regulations | io.tt
200 yes 1152 10
https://io.tt/blog/dynamic-vs-static-qr-codes
Dynamic vs Static QR Codes | io.tt
200 yes 1034 9
https://io.tt/blog/why-nfc-could-be-the-smart-choice-for-digital-product-passports-dpps
Why NFC Could Help With Digital Product Passports (DPPs) | io.tt
200 yes 1092 7
https://io.tt/blog/what-is-gs1-digital-link-the-future-of-smart-connected-products
What Is GS1 Digital Link? | io.tt
200 yes 1107 6
https://io.tt/blog/gs1-sunrise-checklist-how-to-prepare
A Guide to GS1 Sunrise 2027 | io.tt
200 yes 672 4
https://io.tt/blog/10-connected-experiences-your-brand-should-be-doing
10 Connected Experiences Your Brand Should Be Doing | io.tt
200 yes 1763 3
https://io.tt/blog/connected-experiences-and-the-value-of-post-purchase-physical-data
The Value of Post Purchase Data | io.tt
200 yes 883 3
https://io.tt/blog/5-dynamic-connected-experiences-that-brands-are-getting-right
5 Dynamic Connected Experiences Brands Are Getting Right | io.tt
200 yes 1139 3
https://io.tt/blog/the-importance-of-qr-code-serialisation
The importance of QR code serialisation | io.tt
200 yes 1207 2
https://io.tt/whitepapers/cxr3
Connected Experiences Report Vol. 3 | io.tt
200 yes 273 1
https://io.tt/blog/fake-products-real-consequences
Fake Products. Real Consequences. | io.tt
200 yes 1054 1
https://io.tt/blog/what-connected-experience-data-reveals-about-consumer-behaviour
Connected Experience Data and Consumer Behaviour | io.tt
200 yes 1145 1
https://io.tt/blog/how-to-use-your-own-media-channel-to-reduce-reliance-on-retailer-data
How to Use Packaging to Reduce Reliance on Retailers | io.tt
200 yes 1141 1
https://io.tt/blog/5-rules-for-creating-connected-experiences-with-qr-codes-and-nfc-tags
5 Rules for Creating Connected Experiences | io.tt
200 yes 1160 0
https://io.tt/blog/5-takeaways-from-paris-packaging-week
5 takeaways from Paris Packaging Week | io.tt
200 yes 918 0
https://io.tt/blog/a-smarter-way-to-support-health-connected-packaging
A Smarter Way to Support Health - Connected Packaging | io.tt
200 yes 933 0
https://io.tt/blog/compliance-engagement-and-authentication-connected-products-in-luxury
A Guide to Connected Products in the Luxury Industry | io.tt
200 yes 1343 0
https://io.tt/blog/compliance-engagement-and-authentication-the-business-case-for-connected-packaging-wine
A Guide to Connected Packaging in the Wine Industry | io.tt
200 yes 1564 0
https://io.tt/blog/compliance-engagement-gifting-and-authentication-connected-packaging-in-spirits
A Guide to Connected Packaging in the Spirits Industry | io.tt
200 yes 1278 0
https://io.tt/blog/decoding-gs1-sunrise-should-your-packaging-have-two-qr-codes
GS1 Sunrise - Should Your Packaging Have 2 QR Codes? | io.tt
200 yes 1083 0
https://io.tt/blog/dpps-consumer-engagement-authentication-the-case-for-connected-packaging-fashion
A Guide to Connected Products in the Fashion Industry | io.tt
200 yes 1589 0
https://io.tt/blog/dpps-labelling-gs1-and-consumer-engagement-the-business-case-for-connected-packaging-beauty
A Guide to Connected Packaging in the Beauty Industry | io.tt
200 yes 1705 0
https://io.tt/blog/gs1-sunrise-first-party-data-and-authentication-connected-packaging-in-cpg
A Guide to Connected Packaging in the CPG Industry | io.tt
200 yes 1599 0
https://io.tt/blog/interpack-2026-the-moment-connected-packaging-started-looking-like-infrastructure
Interpack 2026: The Moment Connected Packaging Started Looking Like Infrastructure | io.tt
200 yes 1108 0
https://io.tt/blog/labelling-consumer-engagement-and-gs1-sunrise-the-business-case-for-beer
A Guide to Connected Packaging in the Beer Industry | io.tt
200 yes 1337 0
https://io.tt/blog/paris-packaging-week-2025-6-lessons-from-the-show
Paris Packaging Week 2025 – 6 Lessons from the Show | io.tt
200 yes 992 0
https://io.tt/blog/sustainability-transparency-and-engagement-connected-packaging-in-soft-drinks
A Guide to Connected Packaging in the Soft Drinks Industry | io.tt
200 yes 1332 0
https://io.tt/blog/the-power-of-2d-barcodes-bridging-the-gap-between-consumers-and-supply
The Power of 2D Barcodes | io.tt
200 yes 1146 0
https://io.tt/blog/the-value-of-authentication-in-the-resale-market
The Value of Authentication in the Resale Market | io.tt | io.tt
200 yes 1289 0
https://io.tt/blog/ushering-in-a-new-age-of-nfc
Ushering in a new age of NFC | io.tt | io.tt
200 yes 470 0
https://io.tt/blog/why-gs1-project-sunrise-matters-the-future-of-product-identification
Why GS1 Project Sunrise Matters | io.tt
200 yes 1103 0
https://io.tt/roi
Connected Products ROI Calculator | io.tt
200 yes 245 0
https://io.tt/solutions
io.tt
404 no 97 0
https://io.tt/whitepapers
io.tt
404 no 97 0

Audit your own site — free

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

Scan your site →