Catalog / kruwirat.com
65

SEO audit for kruwirat.com

Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง

other

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

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

Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูงสำหรับองค์กรและสถานศึกษา

50
pages crawled
47
indexable pages
0
errors
289
warnings
553
notices
0
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Links 30 0 117 15
Agent Readiness 72 0 47 40
Canonical 72 0 47 0
Duplicate 89 0 19 47
Content 92 0 14 47
Performance 92 0 14 168
Titles 93 0 11 0
Headings 95 0 8 13
Images 95 0 8 48
Crawlability 99 0 2 4
Budget 99 0 1 0
Indexability 99 0 1 0
Cache 100 0 0 47
Security 100 0 0 47
Social 100 0 0 29
Structured Data 100 0 0 47
URL 100 0 0 1
Findings

Warnings (12 rules)

warning Control has no accessible name

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

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

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

  • https://kruwirat.com/login/google — this noindex page has 6 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://kruwirat.com/project-request, https://kruwirat.com/login, https://kruwirat.com/member/request-vip.

warning Duplicate <title> across pages

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

warning Images missing alt text

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

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

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

  • https://kruwirat.com/ — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.png) 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://kruwirat.com/?page=19 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.png) 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://kruwirat.com/?page=2 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.png) 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://kruwirat.com/?page=20 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.png) 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://kruwirat.com/?page=3 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.png) 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://kruwirat.com/?page=4 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.png) 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://kruwirat.com/?page=5 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.png) 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://kruwirat.com/?page=6 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.png) 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://kruwirat.com/courses — the likely hero/LCP image (course-clasp.svg) 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://kruwirat.com/knowledge — the likely hero/LCP image (ai-1.svg) 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://kruwirat.com/knowledge?category=1 — the likely hero/LCP image (ai-1.svg) 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://kruwirat.com/knowledge?page=2 — the likely hero/LCP image (web-18.svg) 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://kruwirat.com/plc — the likely hero/LCP image (jodgstflt5wtmpvyti8uqzos0fiow4zucicl8lsb.jpg) 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://kruwirat.com/showcase — the likely hero/LCP image (bgw0mjoisaupxwioz5vucmlgoqxhakowru6yvhjr.png) 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 noindex + nofollow (blocks link equity flow)

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

warning Internal link points to a redirect

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

  • https://kruwirat.com/ — https://kruwirat.com/download/213 → https://kruwirat.com/login
  • https://kruwirat.com/ — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/ — https://kruwirat.com/project-request → https://kruwirat.com/login
  • https://kruwirat.com/category/1 — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/category/1 — https://kruwirat.com/project-request → https://kruwirat.com/login
  • https://kruwirat.com/courses — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/courses — https://kruwirat.com/project-request → https://kruwirat.com/login
  • https://kruwirat.com/galleries — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/galleries — https://kruwirat.com/project-request → https://kruwirat.com/login
  • https://kruwirat.com/knowledge — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/knowledge — https://kruwirat.com/project-request → https://kruwirat.com/login
  • https://kruwirat.com/login — https://kruwirat.com/auth/facebook → https://www.facebook.com/login.php?skip_api_login=1&api_key=622547007309816&kid_directed_site=0&app_id=622547007309816&signed_next=1&next=https%3A%2F%2Fwww.facebook.com%2Fv3.3%2Fdialog%2Foauth%3Fclient_id%3D622547007309816%26redirect_uri%3Dhttps%253A%252F%252Fkruwirat.com%252Fauth%252Ffacebook%252Fcallback%26scope%3Demail%252Cpublic_profile%26response_type%3Dcode%26state%3DpAwBu42cNa7RTl4543G0zoR1yw7Y5i2X6pi4SU04%26ret%3Dlogin%26fbapp_pres%3D0%26logger_id%3D78c3594b-b484-42e2-8202-f33a11f3ebf2%26tp%3Dunspecified&cancel_url=https%3A%2F%2Fkruwirat.com%2Fauth%2Ffacebook%2Fcallback%3Ferror%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%26state%3DpAwBu42cNa7RTl4543G0zoR1yw7Y5i2X6pi4SU04%23_%3D_&display=page&locale=en_US&pl_dbl=0&is_business_login=0 (off-site)
  • https://kruwirat.com/login — https://kruwirat.com/login/google → https://accounts.google.com/v3/signin/identifier?opparams=%253F&dsh=S859571310%3A1784373630363389&client_id=248697808300-ui6u64rtkt8e5pht8elocaebs6nk9nre.apps.googleusercontent.com&o2v=1&redirect_uri=https%3A%2F%2Fkruwirat.com%2Flogin%2Fgoogle%2Fcallback&response_type=code&scope=openid+profile+email&service=lso&state=Ct9ei7gLM4zaENbAX0ZJvcMIxqmXXDVWvPc5nmW8&flowName=GeneralOAuthFlow&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hANSPuKaGYh48NiyuGfBZDOXjctpXtgWe9cB0pkL9ZcGFg0EufU4vi7F8UQ7raGHLhWsYqEk3ki4Nf_LrbMAf2vqPDeJ0QAMLwgFwODvRo-HqyIO_VTQbdgbTBQvhoIgepLSEFJ2w6vuR93QyN9bq1nO6_M3IfrUm8JflHOioZAAByU_6LUMpnt-BVpcOyrkX36LjWyl8e7NvDKTc2dyQMRlRX0ibaCnVLeM8B5UulJj6i4DM0LORWrjV8-kzUtaERXZAC-LqDdj9L8cSgLyA_khka5-FIaYdWFbc5qYBlEaBa_s0u8TKFwrGIZPW4b95Zud-hT7GrcmpjcE9STfoQVk8KepSqhgK4-GDJcymZM39CYvls3S3_gw-Qx0zPCXWi6Wn3usLHweKVpTswmpdId7yO8kzAaPbl6czQ6h-dXlMMSE3TPwXr0bOS8YBRfHNwSyyxZHR1SvH9WYxkfDxYTO1mNHQQ%26flowName%3DGeneralOAuthFlow%26as%3DS859571310%253A1784373630363389%26client_id%3D248697808300-ui6u64rtkt8e5pht8elocaebs6nk9nre.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&app_domain=https%3A%2F%2Fkruwirat.com&rart=ANgoxceLz0XBduCdQ9MrSgLrJ7pBeyatAg-iqcfTrn352sWovDNupPW8Z1dJPLSOyCg1s_WzkzaETznNKL1qj7CCVJjHmR2rIdEjLjNBqjXYASUr6YxhOrQ (off-site)
  • https://kruwirat.com/login — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/login — https://kruwirat.com/project-request → https://kruwirat.com/login
  • https://kruwirat.com/plc — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/plc — https://kruwirat.com/project-request → https://kruwirat.com/login
  • https://kruwirat.com/project-request — https://kruwirat.com/auth/facebook → https://www.facebook.com/login.php?skip_api_login=1&api_key=622547007309816&kid_directed_site=0&app_id=622547007309816&signed_next=1&next=https%3A%2F%2Fwww.facebook.com%2Fv3.3%2Fdialog%2Foauth%3Fclient_id%3D622547007309816%26redirect_uri%3Dhttps%253A%252F%252Fkruwirat.com%252Fauth%252Ffacebook%252Fcallback%26scope%3Demail%252Cpublic_profile%26response_type%3Dcode%26state%3DpAwBu42cNa7RTl4543G0zoR1yw7Y5i2X6pi4SU04%26ret%3Dlogin%26fbapp_pres%3D0%26logger_id%3D78c3594b-b484-42e2-8202-f33a11f3ebf2%26tp%3Dunspecified&cancel_url=https%3A%2F%2Fkruwirat.com%2Fauth%2Ffacebook%2Fcallback%3Ferror%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%26state%3DpAwBu42cNa7RTl4543G0zoR1yw7Y5i2X6pi4SU04%23_%3D_&display=page&locale=en_US&pl_dbl=0&is_business_login=0 (off-site)
  • https://kruwirat.com/project-request — https://kruwirat.com/login/google → https://accounts.google.com/v3/signin/identifier?opparams=%253F&dsh=S859571310%3A1784373630363389&client_id=248697808300-ui6u64rtkt8e5pht8elocaebs6nk9nre.apps.googleusercontent.com&o2v=1&redirect_uri=https%3A%2F%2Fkruwirat.com%2Flogin%2Fgoogle%2Fcallback&response_type=code&scope=openid+profile+email&service=lso&state=Ct9ei7gLM4zaENbAX0ZJvcMIxqmXXDVWvPc5nmW8&flowName=GeneralOAuthFlow&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hANSPuKaGYh48NiyuGfBZDOXjctpXtgWe9cB0pkL9ZcGFg0EufU4vi7F8UQ7raGHLhWsYqEk3ki4Nf_LrbMAf2vqPDeJ0QAMLwgFwODvRo-HqyIO_VTQbdgbTBQvhoIgepLSEFJ2w6vuR93QyN9bq1nO6_M3IfrUm8JflHOioZAAByU_6LUMpnt-BVpcOyrkX36LjWyl8e7NvDKTc2dyQMRlRX0ibaCnVLeM8B5UulJj6i4DM0LORWrjV8-kzUtaERXZAC-LqDdj9L8cSgLyA_khka5-FIaYdWFbc5qYBlEaBa_s0u8TKFwrGIZPW4b95Zud-hT7GrcmpjcE9STfoQVk8KepSqhgK4-GDJcymZM39CYvls3S3_gw-Qx0zPCXWi6Wn3usLHweKVpTswmpdId7yO8kzAaPbl6czQ6h-dXlMMSE3TPwXr0bOS8YBRfHNwSyyxZHR1SvH9WYxkfDxYTO1mNHQQ%26flowName%3DGeneralOAuthFlow%26as%3DS859571310%253A1784373630363389%26client_id%3D248697808300-ui6u64rtkt8e5pht8elocaebs6nk9nre.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&app_domain=https%3A%2F%2Fkruwirat.com&rart=ANgoxceLz0XBduCdQ9MrSgLrJ7pBeyatAg-iqcfTrn352sWovDNupPW8Z1dJPLSOyCg1s_WzkzaETznNKL1qj7CCVJjHmR2rIdEjLjNBqjXYASUr6YxhOrQ (off-site)
  • https://kruwirat.com/project-request — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/project-request — https://kruwirat.com/project-request → https://kruwirat.com/login
  • https://kruwirat.com/register — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/register — https://kruwirat.com/project-request → https://kruwirat.com/login
  • https://kruwirat.com/showcase — https://kruwirat.com/member/request-vip → https://kruwirat.com/login
  • https://kruwirat.com/showcase — https://kruwirat.com/project-request → https://kruwirat.com/login

warning Redirect chain (multiple hops)

Rule redirect.chain · Crawlability · 2 occurrence(s)

  • https://kruwirat.com/auth/facebook — 2 hops ending at https://www.facebook.com/login.php?skip_api_login=1&api_key=622547007309816&kid_directed_site=0&app_id=622547007309816&signed_next=1&next=https%3A%2F%2Fwww.facebook.com%2Fv3.3%2Fdialog%2Foauth%3Fclient_id%3D622547007309816%26redirect_uri%3Dhttps%253A%252F%252Fkruwirat.com%252Fauth%252Ffacebook%252Fcallback%26scope%3Demail%252Cpublic_profile%26response_type%3Dcode%26state%3DpAwBu42cNa7RTl4543G0zoR1yw7Y5i2X6pi4SU04%26ret%3Dlogin%26fbapp_pres%3D0%26logger_id%3D78c3594b-b484-42e2-8202-f33a11f3ebf2%26tp%3Dunspecified&cancel_url=https%3A%2F%2Fkruwirat.com%2Fauth%2Ffacebook%2Fcallback%3Ferror%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%26state%3DpAwBu42cNa7RTl4543G0zoR1yw7Y5i2X6pi4SU04%23_%3D_&display=page&locale=en_US&pl_dbl=0&is_business_login=0
  • https://kruwirat.com/login/google — 2 hops ending at https://accounts.google.com/v3/signin/identifier?opparams=%253F&dsh=S859571310%3A1784373630363389&client_id=248697808300-ui6u64rtkt8e5pht8elocaebs6nk9nre.apps.googleusercontent.com&o2v=1&redirect_uri=https%3A%2F%2Fkruwirat.com%2Flogin%2Fgoogle%2Fcallback&response_type=code&scope=openid+profile+email&service=lso&state=Ct9ei7gLM4zaENbAX0ZJvcMIxqmXXDVWvPc5nmW8&flowName=GeneralOAuthFlow&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hANSPuKaGYh48NiyuGfBZDOXjctpXtgWe9cB0pkL9ZcGFg0EufU4vi7F8UQ7raGHLhWsYqEk3ki4Nf_LrbMAf2vqPDeJ0QAMLwgFwODvRo-HqyIO_VTQbdgbTBQvhoIgepLSEFJ2w6vuR93QyN9bq1nO6_M3IfrUm8JflHOioZAAByU_6LUMpnt-BVpcOyrkX36LjWyl8e7NvDKTc2dyQMRlRX0ibaCnVLeM8B5UulJj6i4DM0LORWrjV8-kzUtaERXZAC-LqDdj9L8cSgLyA_khka5-FIaYdWFbc5qYBlEaBa_s0u8TKFwrGIZPW4b95Zud-hT7GrcmpjcE9STfoQVk8KepSqhgK4-GDJcymZM39CYvls3S3_gw-Qx0zPCXWi6Wn3usLHweKVpTswmpdId7yO8kzAaPbl6czQ6h-dXlMMSE3TPwXr0bOS8YBRfHNwSyyxZHR1SvH9WYxkfDxYTO1mNHQQ%26flowName%3DGeneralOAuthFlow%26as%3DS859571310%253A1784373630363389%26client_id%3D248697808300-ui6u64rtkt8e5pht8elocaebs6nk9nre.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&app_domain=https%3A%2F%2Fkruwirat.com&rart=ANgoxceLz0XBduCdQ9MrSgLrJ7pBeyatAg-iqcfTrn352sWovDNupPW8Z1dJPLSOyCg1s_WzkzaETznNKL1qj7CCVJjHmR2rIdEjLjNBqjXYASUr6YxhOrQ

warning Title likely truncated in SERP (too wide)

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

Notices (20 rules)

notice Heading levels skip a level

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

notice No llms.txt for AI agents

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

  • https://kruwirat.com/ — 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 · 47 occurrence(s)

notice Duplicate meta description across pages

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

notice Multiple <h1> elements

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

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

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

notice Likely hero image lacks fetchpriority=high

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

  • https://kruwirat.com/category/1 — the likely hero/LCP image (wvsrd7qzyqgjmosvibvcb8lzjynqsvmjdvk6m8rm.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://kruwirat.com/category/1?page=2 — the likely hero/LCP image (twdv9eswhhgledeuzh2ckcriqtbxmvwxpokhcnsp.jpg) 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://kruwirat.com/category/2 — the likely hero/LCP image (rrsvourtx7ezofb5cznkeqmymzy7lz1misw57vyf.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://kruwirat.com/category/3 — the likely hero/LCP image (til6mpgyh0hnacy4n7kp8zr5xmqzznsak7imj9ta.jpg) 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://kruwirat.com/category/5 — the likely hero/LCP image (yj4dehgmxktldmpdlivyiuxvd7sl0spywuwpeva9.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://kruwirat.com/category/6 — the likely hero/LCP image (bgw0mjoisaupxwioz5vucmlgoqxhakowru6yvhjr.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://kruwirat.com/courses/8 — the likely hero/LCP image (course-clasp.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://kruwirat.com/download/213 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.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://kruwirat.com/knowledge/ai-artificial-intelligence — the likely hero/LCP image (ai-1.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://kruwirat.com/login — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.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://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.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://kruwirat.com/member/request-vip — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.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://kruwirat.com/plc/1 — the likely hero/LCP image (jodgstflt5wtmpvyti8uqzos0fiow4zucicl8lsb.jpg) 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://kruwirat.com/project-request — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.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://kruwirat.com/project-request?program=318 — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.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://kruwirat.com/register — the likely hero/LCP image (hma3o34npd9feghxekzbqc3lw7hbk2uevho8oda0.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 · 47 occurrence(s)

notice Internal link has no anchor text / accessible name

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

  • https://kruwirat.com/ — 6 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/?page=19 — 6 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/?page=2 — 6 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/?page=20 — 6 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/?page=3 — 6 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/?page=4 — 6 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/?page=5 — 6 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/?page=6 — 6 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/download/213 — 1 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/login — 1 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — 1 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/member/request-vip — 1 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/project-request — 1 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/project-request?program=318 — 1 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://kruwirat.com/register — 1 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.

notice Legacy <meta name=keywords> tag present (Google ignores it)

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

notice Large DOM (over 1500 elements) slows rendering & interaction

Rule perf.dom_size_large · Performance · 9 occurrence(s)

  • https://kruwirat.com/ — the page has 2532 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
  • https://kruwirat.com/?page=19 — the page has 2533 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
  • https://kruwirat.com/?page=2 — the page has 2533 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
  • https://kruwirat.com/?page=20 — the page has 2125 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
  • https://kruwirat.com/?page=3 — the page has 2536 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
  • https://kruwirat.com/?page=4 — the page has 2537 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
  • https://kruwirat.com/?page=5 — the page has 2537 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
  • https://kruwirat.com/?page=6 — the page has 2536 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
  • https://kruwirat.com/showcase — the page has 3639 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.

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

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

  • https://kruwirat.com/ — 61 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://kruwirat.com/?page=2 — 61 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://kruwirat.com/category/1 — 14 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://kruwirat.com/category/1?page=2 — 14 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://kruwirat.com/category/2 — 14 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://kruwirat.com/courses — 2 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://kruwirat.com/courses/8 — 2 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://kruwirat.com/download/213 — 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://kruwirat.com/galleries — 2 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://kruwirat.com/knowledge — 2 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://kruwirat.com/knowledge/ai-artificial-intelligence — 2 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://kruwirat.com/knowledge?category=1 — 2 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://kruwirat.com/knowledge?page=2 — 2 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://kruwirat.com/login — 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://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — 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://kruwirat.com/member/request-vip — 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://kruwirat.com/password/reset — 2 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://kruwirat.com/plc — 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://kruwirat.com/plc/1 — 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://kruwirat.com/program/318 — 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://kruwirat.com/project-request — 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://kruwirat.com/project-request?program=318 — 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://kruwirat.com/register — 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://kruwirat.com/roadmap — 2 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://kruwirat.com/showcase — 232 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 No ETag header (no conditional GET for unchanged pages)

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

  • https://kruwirat.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://kruwirat.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://kruwirat.com/category/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://kruwirat.com/category/1?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://kruwirat.com/category/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://kruwirat.com/courses — 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://kruwirat.com/courses/8 — 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://kruwirat.com/download/213 — 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://kruwirat.com/galleries — 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://kruwirat.com/knowledge — 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://kruwirat.com/knowledge/ai-artificial-intelligence — 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://kruwirat.com/knowledge?category=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://kruwirat.com/knowledge?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://kruwirat.com/login — 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://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — 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://kruwirat.com/member/request-vip — 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://kruwirat.com/password/reset — 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://kruwirat.com/plc — 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://kruwirat.com/plc/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://kruwirat.com/program/318 — 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://kruwirat.com/project-request — 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://kruwirat.com/project-request?program=318 — 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://kruwirat.com/register — 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://kruwirat.com/roadmap — 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://kruwirat.com/showcase — 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 · 47 occurrence(s)

  • https://kruwirat.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://kruwirat.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://kruwirat.com/category/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://kruwirat.com/category/1?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://kruwirat.com/category/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://kruwirat.com/courses — 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://kruwirat.com/courses/8 — 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://kruwirat.com/download/213 — 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://kruwirat.com/galleries — 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://kruwirat.com/knowledge — 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://kruwirat.com/knowledge/ai-artificial-intelligence — 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://kruwirat.com/knowledge?category=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://kruwirat.com/knowledge?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://kruwirat.com/login — 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://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — 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://kruwirat.com/member/request-vip — 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://kruwirat.com/password/reset — 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://kruwirat.com/plc — 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://kruwirat.com/plc/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://kruwirat.com/program/318 — 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://kruwirat.com/project-request — 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://kruwirat.com/project-request?program=318 — 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://kruwirat.com/register — 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://kruwirat.com/roadmap — 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://kruwirat.com/showcase — 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 Slow server response

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

notice URL redirects to another URL

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

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

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

  • https://kruwirat.com/ — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/?page=2 — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/category/1 — 13 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/category/1?page=2 — 13 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/category/2 — 11 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/courses — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/courses/8 — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/download/213 — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/galleries — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/knowledge — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/knowledge/ai-artificial-intelligence — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/knowledge?category=1 — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/knowledge?page=2 — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/login — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/member/request-vip — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/password/reset — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/plc — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/plc/1 — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/program/318 — 9 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/project-request — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/project-request?program=318 — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/register — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/roadmap — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://kruwirat.com/showcase — 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 Underscores in URL path (prefer hyphens)

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

Pages (showing 50 of 50)
URLStatusIndexableWordsIn-links
https://kruwirat.com/
Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง
200 yes 2382 47
https://kruwirat.com/category/1
Google AppScript (GAS) - Devtaiban Programs Service
200 yes 392 47
https://kruwirat.com/category/2
PHP + MySQL - Devtaiban Programs Service
200 yes 364 47
https://kruwirat.com/category/3
Laravel Framework - Devtaiban Programs Service
200 yes 250 47
https://kruwirat.com/category/4
Angular Framework - Devtaiban Programs Service
200 yes 113 47
https://kruwirat.com/category/5
React Framework - Devtaiban Programs Service
200 yes 147 47
https://kruwirat.com/category/6
Go framework - Devtaiban Programs Service
200 yes 128 47
https://kruwirat.com/courses
คอร์สเรียนออนไลน์ - Devtaiban Services
200 yes 279 47
https://kruwirat.com/knowledge
คลังความรู้ - Devtaiban Services
200 yes 362 47
https://kruwirat.com/login
เข้าสู่ระบบ - Devtaiban Programs Service
200 yes 131 47
https://kruwirat.com/member/request-vip
เข้าสู่ระบบ - Devtaiban Programs Service
200 yes 131 47
https://kruwirat.com/plc
กิจกรรม PLC เพื่อการเรียนรู้ - Devtaiban
200 yes 122 47
https://kruwirat.com/project-request
เข้าสู่ระบบ - Devtaiban Programs Service
200 yes 131 47
https://kruwirat.com/register
สมัครสมาชิก - Devtaiban Programs Service
200 yes 175 47
https://kruwirat.com/showcase
ระบบและโปรแกรมทั้งหมดของเรา - Devtaiban
200 yes 3719 47
https://kruwirat.com/galleries
แกลเลอรี่รูปภาพ - Devtaiban Programs Service
200 yes 101 21
https://kruwirat.com/auth/facebook
Facebook
200 yes 78 6
https://kruwirat.com/login/google
Sign in - Google Accounts
200 no 129 6
https://kruwirat.com/password/reset
ขอรีเซ็ตรหัสผ่าน - Devtaiban Programs Service
200 yes 113 6
https://kruwirat.com/program/213
แจ้งซ่อมออนไลน์ 12/2025 - Devtaiban Programs Service
200 yes 413 10
https://kruwirat.com/program/314
ระบบจำหน่ายรถมือสองคุณภาพ ระดับพรีเมียม (demo) - Devtaiban Programs Service
200 yes 336 10
https://kruwirat.com/program/315
เว็บไซต์สำหรับจำหน่ายน้ำดื่ม Drinking Water Retail & Wholesale Web Application (Demo) - Devtaiban Programs Service
200 yes 358 10
https://kruwirat.com/program/317
SuperMart POS 2026 (Demo) update 16-07-2026 - Devtaiban Programs Service
200 yes 374 10
https://kruwirat.com/program/313
LRS · ระบบเอกสารใบลาราชการ - Devtaiban Programs Service
200 yes 496 10
https://kruwirat.com/program/316
ระบบเว็บไซต์โรงเรียน · School Website System (SWS) update15/07/2026 - Devtaiban Programs Service
200 yes 412 10
https://kruwirat.com/program/318
ระบบแฟ้มผลงานครู TPS — Teacher Portfolio System - Devtaiban Programs Service
200 yes 423 10
https://kruwirat.com/knowledge/ai-artificial-intelligence
AI หรือ ปัญญาประดิษฐ์ (Artificial Intelligence) คืออะไร — คลังความรู้
200 yes 614 11
https://kruwirat.com/courses/8
clasp + Google Apps Script — พัฒนา GAS แบบมืออาชีพด้วย VS Code และ Git - Devtaiban Services
200 yes 239 9
https://kruwirat.com/plc/1
PLC ระบบดูแลช่วยเหลือนักเรียน - PLC · Devtaiban
200 yes 146 9
https://kruwirat.com/program/308
ระบบแฟ้มสะสมผลงานออนไลน์ครูผู้สอน (Teacher E-Portfolio Landing Page) - Devtaiban Programs Service
200 yes 344 3
https://kruwirat.com/program/311
📱ระบบจัดการแฟ้มสะสมผลงานครู TEACHER PORTFOLIO 2026 Full V. #06/07/2569 - Devtaiban Programs Service
200 yes 358 3
https://kruwirat.com/program/307
📱WebApp : AQB · ระบบธนาคารขวด (Aqua Bottle Bank) - Devtaiban Programs Service
200 yes 543 3
https://kruwirat.com/program/309
📱WebApp : SRP · ระบบลงทะเบียนและออกเกียรติบัตร — พิธีทบทวนคำปฏิญาณและสวนสนาม - Devtaiban Programs Service
200 yes 534 3
https://kruwirat.com/program/310
📱WebApp : VRP · ระบบฝึกอ่านคำพื้นฐาน ป.1 (Basic Vocabulary Reading Practice) - Devtaiban Programs Service
200 yes 563 3
https://kruwirat.com/program/312
ระบบยืม-คืนครุภัณฑ์ด้วยบาร์โค้ด (EBR) - Devtaiban Programs Service
200 yes 811 3
https://kruwirat.com/download/213
เข้าสู่ระบบ - Devtaiban Programs Service
200 yes 132 10
https://kruwirat.com/knowledge?category=1
คลังความรู้ - Devtaiban Services
200 yes 368 4
https://kruwirat.com/roadmap
เส้นทางการเรียนรู้ (Roadmap) — คลังความรู้
200 yes 381 3
https://kruwirat.com/knowledge?page=2
คลังความรู้ - Devtaiban Services
200 yes 391 1
https://kruwirat.com/?page=2
Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง
200 yes 2470 7
https://kruwirat.com/?page=19
Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง
200 yes 2208 7
https://kruwirat.com/?page=20
Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง
200 yes 1852 7
https://kruwirat.com/category/1?page=2
Google AppScript (GAS) - Devtaiban Programs Service
200 yes 448 1
https://kruwirat.com/?page=5
Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง
200 yes 2429 5
https://kruwirat.com/?page=6
Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง
200 yes 2364 5
https://kruwirat.com/?page=3
Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง
200 yes 2433 4
https://kruwirat.com/?page=4
Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง
200 yes 2329 4
https://kruwirat.com/project-request?program=318
เข้าสู่ระบบ - Devtaiban Programs Service
200 yes 131 1
https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8
เข้าสู่ระบบ - Devtaiban Programs Service
200 yes 131 1
https://kruwirat.com/storage/settings/formal_letter_samples/lxmlacbkw8814yip6ojahxabjvnb0zkktcczdkpe.png 200 no 0 8

Audit your own site — free

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

Scan your site →