SEO audit for kruwirat.com
Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูง
Health 65/100 (fair) · 50 pages crawled · generated 2026-08-26
Download Markdown report (feed to ChatGPT / Claude / Cursor)Devtaiban Programs Service - บริการโปรแกรมสำเร็จรูปคุณภาพสูงสำหรับองค์กรและสถานศึกษา
| Category | Score | Errors | Warnings | Notices |
|---|---|---|---|---|
| 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 |
Warnings (12 rules)
warning Control has no accessible name
Rule agent.control_no_name · Agent Readiness · 47 occurrence(s)
- https://kruwirat.com/ — 11 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/?page=2 — 11 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/category/1 — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/category/1?page=2 — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/category/2 — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/courses — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/courses/8 — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/download/213 — 6 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/galleries — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/knowledge — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/knowledge/ai-artificial-intelligence — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/knowledge?category=1 — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/knowledge?page=2 — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/login — 6 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — 6 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/member/request-vip — 6 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/password/reset — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/plc — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/plc/1 — 9 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/program/318 — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/project-request — 6 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/project-request?program=318 — 6 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/register — 6 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/roadmap — 5 button/link(s) with no text or aria-label — an agent can't target them
- https://kruwirat.com/showcase — 5 button/link(s) with no text or aria-label — an agent can't target them
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 Missing canonical tag
Rule canonical.missing · Canonical · 47 occurrence(s)
- https://kruwirat.com/
- https://kruwirat.com/?page=2
- https://kruwirat.com/category/1
- https://kruwirat.com/category/1?page=2
- https://kruwirat.com/category/2
- https://kruwirat.com/courses
- https://kruwirat.com/courses/8
- https://kruwirat.com/download/213
- https://kruwirat.com/galleries
- https://kruwirat.com/knowledge
- https://kruwirat.com/knowledge/ai-artificial-intelligence
- https://kruwirat.com/knowledge?category=1
- https://kruwirat.com/knowledge?page=2
- https://kruwirat.com/login
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8
- https://kruwirat.com/member/request-vip
- https://kruwirat.com/password/reset
- https://kruwirat.com/plc
- https://kruwirat.com/plc/1
- https://kruwirat.com/program/318
- https://kruwirat.com/project-request
- https://kruwirat.com/project-request?program=318
- https://kruwirat.com/register
- https://kruwirat.com/roadmap
- https://kruwirat.com/showcase
warning Thin content (low word count)
Rule content.thin · Content · 14 occurrence(s)
- https://kruwirat.com/category/4 — 113 words
- https://kruwirat.com/category/5 — 147 words
- https://kruwirat.com/category/6 — 128 words
- https://kruwirat.com/download/213 — 132 words
- https://kruwirat.com/galleries — 101 words
- https://kruwirat.com/login — 131 words
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — 131 words
- https://kruwirat.com/member/request-vip — 131 words
- https://kruwirat.com/password/reset — 113 words
- https://kruwirat.com/plc — 122 words
- https://kruwirat.com/plc/1 — 146 words
- https://kruwirat.com/project-request — 131 words
- https://kruwirat.com/project-request?program=318 — 131 words
- https://kruwirat.com/register — 175 words
warning Duplicate <title> across pages
Rule duplicate.title · Duplicate · 19 occurrence(s)
- https://kruwirat.com/ — title shared by 8 pages: https://kruwirat.com/?page=2, https://kruwirat.com/?page=3, https://kruwirat.com/?page=4
- https://kruwirat.com/?page=19 — title shared by 8 pages: https://kruwirat.com/, https://kruwirat.com/?page=2, https://kruwirat.com/?page=3
- https://kruwirat.com/?page=2 — title shared by 8 pages: https://kruwirat.com/, https://kruwirat.com/?page=3, https://kruwirat.com/?page=4
- https://kruwirat.com/?page=20 — title shared by 8 pages: https://kruwirat.com/, https://kruwirat.com/?page=2, https://kruwirat.com/?page=3
- https://kruwirat.com/?page=3 — title shared by 8 pages: https://kruwirat.com/, https://kruwirat.com/?page=2, https://kruwirat.com/?page=4
- https://kruwirat.com/?page=4 — title shared by 8 pages: https://kruwirat.com/, https://kruwirat.com/?page=2, https://kruwirat.com/?page=3
- https://kruwirat.com/?page=5 — title shared by 8 pages: https://kruwirat.com/, https://kruwirat.com/?page=2, https://kruwirat.com/?page=3
- https://kruwirat.com/?page=6 — title shared by 8 pages: https://kruwirat.com/, https://kruwirat.com/?page=2, https://kruwirat.com/?page=3
- https://kruwirat.com/category/1 — title shared by 2 pages: https://kruwirat.com/category/1?page=2
- https://kruwirat.com/category/1?page=2 — title shared by 2 pages: https://kruwirat.com/category/1
- https://kruwirat.com/download/213 — title shared by 6 pages: https://kruwirat.com/project-request, https://kruwirat.com/login, https://kruwirat.com/member/request-vip
- https://kruwirat.com/knowledge — title shared by 3 pages: https://kruwirat.com/knowledge?category=1, https://kruwirat.com/knowledge?page=2
- https://kruwirat.com/knowledge?category=1 — title shared by 3 pages: https://kruwirat.com/knowledge, https://kruwirat.com/knowledge?page=2
- https://kruwirat.com/knowledge?page=2 — title shared by 3 pages: https://kruwirat.com/knowledge, https://kruwirat.com/knowledge?category=1
- https://kruwirat.com/login — title shared by 6 pages: https://kruwirat.com/project-request, https://kruwirat.com/member/request-vip, https://kruwirat.com/download/213
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — title shared by 6 pages: https://kruwirat.com/project-request, https://kruwirat.com/login, https://kruwirat.com/member/request-vip
- https://kruwirat.com/member/request-vip — title shared by 6 pages: https://kruwirat.com/project-request, https://kruwirat.com/login, https://kruwirat.com/download/213
- https://kruwirat.com/project-request — title shared by 6 pages: https://kruwirat.com/login, https://kruwirat.com/member/request-vip, https://kruwirat.com/download/213
- https://kruwirat.com/project-request?program=318 — title shared by 6 pages: https://kruwirat.com/project-request, https://kruwirat.com/login, https://kruwirat.com/member/request-vip
warning Missing <h1>
Rule h1.missing · Headings · 8 occurrence(s)
- https://kruwirat.com/download/213
- https://kruwirat.com/login
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8
- https://kruwirat.com/member/request-vip
- https://kruwirat.com/password/reset
- https://kruwirat.com/project-request
- https://kruwirat.com/project-request?program=318
- https://kruwirat.com/register
warning Images missing alt text
Rule images.missing_alt · Images · 8 occurrence(s)
- https://kruwirat.com/ — 6 of 72 images missing alt
- https://kruwirat.com/?page=19 — 6 of 72 images missing alt
- https://kruwirat.com/?page=2 — 6 of 72 images missing alt
- https://kruwirat.com/?page=20 — 6 of 52 images missing alt
- https://kruwirat.com/?page=3 — 6 of 72 images missing alt
- https://kruwirat.com/?page=4 — 6 of 72 images missing alt
- https://kruwirat.com/?page=5 — 6 of 72 images missing alt
- https://kruwirat.com/?page=6 — 6 of 72 images missing alt
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)
- https://kruwirat.com/login/google — meta/X-Robots: meta=noindex, nofollow
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)
- https://kruwirat.com/courses/8 — 91 chars, ~739px (limit ~580px)
- https://kruwirat.com/program/307 — 78 chars, ~639px (limit ~580px)
- https://kruwirat.com/program/308 — 97 chars, ~803px (limit ~580px)
- https://kruwirat.com/program/309 — 106 chars, ~909px (limit ~580px)
- https://kruwirat.com/program/310 — 106 chars, ~862px (limit ~580px)
- https://kruwirat.com/program/311 — 99 chars, ~859px (limit ~580px)
- https://kruwirat.com/program/314 — 75 chars, ~637px (limit ~580px)
- https://kruwirat.com/program/315 — 114 chars, ~932px (limit ~580px)
- https://kruwirat.com/program/316 — 96 chars, ~810px (limit ~580px)
- https://kruwirat.com/program/317 — 72 chars, ~602px (limit ~580px)
- https://kruwirat.com/program/318 — 76 chars, ~626px (limit ~580px)
Notices (20 rules)
notice Heading levels skip a level
Rule agent.heading_skip · Agent Readiness · 39 occurrence(s)
- https://kruwirat.com/ — h3 follows h1 — skips h2
- https://kruwirat.com/?page=2 — h3 follows h1 — skips h2
- https://kruwirat.com/category/1 — h5 follows h1 — skips h2
- https://kruwirat.com/category/1?page=2 — h5 follows h1 — skips h2
- https://kruwirat.com/category/2 — h5 follows h1 — skips h2
- https://kruwirat.com/category/3 — h5 follows h1 — skips h2
- https://kruwirat.com/category/4 — h4 follows h1 — skips h2
- https://kruwirat.com/category/5 — h5 follows h1 — skips h2
- https://kruwirat.com/category/6 — h5 follows h1 — skips h2
- https://kruwirat.com/courses — h3 follows h1 — skips h2
- https://kruwirat.com/courses/8 — h3 follows h1 — skips h2
- https://kruwirat.com/galleries — h4 follows h1 — skips h2
- https://kruwirat.com/knowledge — h3 follows h1 — skips h2
- https://kruwirat.com/knowledge/ai-artificial-intelligence — h6 follows h1 — skips h2
- https://kruwirat.com/knowledge?category=1 — h3 follows h1 — skips h2
- https://kruwirat.com/knowledge?page=2 — h3 follows h1 — skips h2
- https://kruwirat.com/plc — h3 follows h1 — skips h2
- https://kruwirat.com/plc/1 — h4 follows h1 — skips h2
- https://kruwirat.com/program/314 — h4 follows h1 — skips h2
- https://kruwirat.com/program/315 — h4 follows h1 — skips h2
- https://kruwirat.com/program/316 — h3 follows h1 — skips h2
- https://kruwirat.com/program/317 — h4 follows h1 — skips h2
- https://kruwirat.com/program/318 — h3 follows h1 — skips h2
- https://kruwirat.com/register — h6 follows h3 — skips h4
- https://kruwirat.com/roadmap — h3 follows h1 — skips h2
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)
- https://kruwirat.com/ — Cache-Control: no-cache, private
- https://kruwirat.com/?page=2 — Cache-Control: no-cache, private
- https://kruwirat.com/category/1 — Cache-Control: no-cache, private
- https://kruwirat.com/category/1?page=2 — Cache-Control: no-cache, private
- https://kruwirat.com/category/2 — Cache-Control: no-cache, private
- https://kruwirat.com/courses — Cache-Control: no-cache, private
- https://kruwirat.com/courses/8 — Cache-Control: no-cache, private
- https://kruwirat.com/download/213 — Cache-Control: no-cache, private
- https://kruwirat.com/galleries — Cache-Control: no-cache, private
- https://kruwirat.com/knowledge — Cache-Control: no-cache, private
- https://kruwirat.com/knowledge/ai-artificial-intelligence — Cache-Control: no-cache, private
- https://kruwirat.com/knowledge?category=1 — Cache-Control: no-cache, private
- https://kruwirat.com/knowledge?page=2 — Cache-Control: no-cache, private
- https://kruwirat.com/login — Cache-Control: no-cache, private
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — Cache-Control: no-cache, private
- https://kruwirat.com/member/request-vip — Cache-Control: no-cache, private
- https://kruwirat.com/password/reset — Cache-Control: no-cache, private
- https://kruwirat.com/plc — Cache-Control: no-cache, private
- https://kruwirat.com/plc/1 — Cache-Control: no-cache, private
- https://kruwirat.com/program/318 — Cache-Control: no-cache, private
- https://kruwirat.com/project-request — Cache-Control: no-cache, private
- https://kruwirat.com/project-request?program=318 — Cache-Control: no-cache, private
- https://kruwirat.com/register — Cache-Control: no-cache, private
- https://kruwirat.com/roadmap — Cache-Control: no-cache, private
- https://kruwirat.com/showcase — Cache-Control: no-cache, private
notice Duplicate meta description across pages
Rule duplicate.meta_desc · Duplicate · 47 occurrence(s)
- https://kruwirat.com/ — meta description shared by 47 pages: https://kruwirat.com/category/1, https://kruwirat.com/courses, https://kruwirat.com/showcase
- https://kruwirat.com/?page=2 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/category/1 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/courses, https://kruwirat.com/showcase
- https://kruwirat.com/category/1?page=2 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/category/2 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/courses — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/showcase
- https://kruwirat.com/courses/8 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/download/213 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/galleries — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/knowledge — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/knowledge/ai-artificial-intelligence — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/knowledge?category=1 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/knowledge?page=2 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/login — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/member/request-vip — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/password/reset — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/plc — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/plc/1 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/program/318 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/project-request — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/project-request?program=318 — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/register — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/roadmap — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
- https://kruwirat.com/showcase — meta description shared by 47 pages: https://kruwirat.com/, https://kruwirat.com/category/1, https://kruwirat.com/courses
notice Multiple <h1> elements
Rule h1.multiple · Headings · 13 occurrence(s)
- https://kruwirat.com/program/213 — 2 <h1> elements
- https://kruwirat.com/program/307 — 2 <h1> elements
- https://kruwirat.com/program/308 — 2 <h1> elements
- https://kruwirat.com/program/309 — 2 <h1> elements
- https://kruwirat.com/program/310 — 2 <h1> elements
- https://kruwirat.com/program/311 — 2 <h1> elements
- https://kruwirat.com/program/312 — 2 <h1> elements
- https://kruwirat.com/program/313 — 2 <h1> elements
- https://kruwirat.com/program/314 — 2 <h1> elements
- https://kruwirat.com/program/315 — 2 <h1> elements
- https://kruwirat.com/program/316 — 2 <h1> elements
- https://kruwirat.com/program/317 — 2 <h1> elements
- https://kruwirat.com/program/318 — 2 <h1> elements
notice Image alt text is very long (possible keyword stuffing)
Rule images.alt_too_long · Images · 1 occurrence(s)
- https://kruwirat.com/showcase — 1 image(s) with alt text over 100 chars — shorten it to a concise description
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)
- https://kruwirat.com/ — 72 of 72 images without width/height
- https://kruwirat.com/?page=2 — 72 of 72 images without width/height
- https://kruwirat.com/category/1 — 14 of 14 images without width/height
- https://kruwirat.com/category/1?page=2 — 14 of 14 images without width/height
- https://kruwirat.com/category/2 — 14 of 14 images without width/height
- https://kruwirat.com/courses — 10 of 10 images without width/height
- https://kruwirat.com/courses/8 — 3 of 3 images without width/height
- https://kruwirat.com/download/213 — 3 of 3 images without width/height
- https://kruwirat.com/galleries — 2 of 2 images without width/height
- https://kruwirat.com/knowledge — 14 of 14 images without width/height
- https://kruwirat.com/knowledge/ai-artificial-intelligence — 3 of 3 images without width/height
- https://kruwirat.com/knowledge?category=1 — 13 of 13 images without width/height
- https://kruwirat.com/knowledge?page=2 — 14 of 14 images without width/height
- https://kruwirat.com/login — 3 of 3 images without width/height
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — 3 of 3 images without width/height
- https://kruwirat.com/member/request-vip — 3 of 3 images without width/height
- https://kruwirat.com/password/reset — 2 of 2 images without width/height
- https://kruwirat.com/plc — 3 of 3 images without width/height
- https://kruwirat.com/plc/1 — 3 of 3 images without width/height
- https://kruwirat.com/program/318 — 4 of 4 images without width/height
- https://kruwirat.com/project-request — 3 of 3 images without width/height
- https://kruwirat.com/project-request?program=318 — 3 of 3 images without width/height
- https://kruwirat.com/register — 4 of 4 images without width/height
- https://kruwirat.com/roadmap — 2 of 2 images without width/height
- https://kruwirat.com/showcase — 232 of 232 images without width/height
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)
- https://kruwirat.com/ — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/?page=2 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/category/1 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/category/1?page=2 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/category/2 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/courses — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/courses/8 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/download/213 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/galleries — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/knowledge — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/knowledge/ai-artificial-intelligence — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/knowledge?category=1 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/knowledge?page=2 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/login — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/member/request-vip — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/password/reset — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/plc — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/plc/1 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/program/318 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/project-request — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/project-request?program=318 — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/register — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/roadmap — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
- https://kruwirat.com/showcase — a <meta name="keywords"> tag is present — Google has ignored it since 2009; remove it to cut template debt
notice Missing Open Graph tags
Rule og.missing · Social · 29 occurrence(s)
- https://kruwirat.com/ — og:image
- https://kruwirat.com/?page=2 — og:image
- https://kruwirat.com/?page=3 — og:image
- https://kruwirat.com/?page=4 — og:image
- https://kruwirat.com/category/1 — og:image
- https://kruwirat.com/category/1?page=2 — og:image
- https://kruwirat.com/category/2 — og:image
- https://kruwirat.com/category/3 — og:image
- https://kruwirat.com/category/4 — og:image
- https://kruwirat.com/category/5 — og:image
- https://kruwirat.com/category/6 — og:image
- https://kruwirat.com/courses — og:image
- https://kruwirat.com/download/213 — og:image
- https://kruwirat.com/galleries — og:image
- https://kruwirat.com/knowledge — og:image
- https://kruwirat.com/knowledge?category=1 — og:image
- https://kruwirat.com/knowledge?page=2 — og:image
- https://kruwirat.com/login — og:image
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8 — og:image
- https://kruwirat.com/member/request-vip — og:image
- https://kruwirat.com/password/reset — og:image
- https://kruwirat.com/project-request — og:image
- https://kruwirat.com/project-request?program=318 — og:image
- https://kruwirat.com/register — og:image
- https://kruwirat.com/roadmap — og:image
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)
- https://kruwirat.com/download/213 — redirects to https://kruwirat.com/login
- https://kruwirat.com/member/request-vip — redirects to https://kruwirat.com/login
- https://kruwirat.com/project-request — redirects to https://kruwirat.com/login
- https://kruwirat.com/project-request?program=318 — redirects to https://kruwirat.com/login
notice No structured data detected
Rule schema.none · Structured Data · 47 occurrence(s)
- https://kruwirat.com/
- https://kruwirat.com/?page=2
- https://kruwirat.com/category/1
- https://kruwirat.com/category/1?page=2
- https://kruwirat.com/category/2
- https://kruwirat.com/courses
- https://kruwirat.com/courses/8
- https://kruwirat.com/download/213
- https://kruwirat.com/galleries
- https://kruwirat.com/knowledge
- https://kruwirat.com/knowledge/ai-artificial-intelligence
- https://kruwirat.com/knowledge?category=1
- https://kruwirat.com/knowledge?page=2
- https://kruwirat.com/login
- https://kruwirat.com/login?redirect=https://kruwirat.com/courses/8
- https://kruwirat.com/member/request-vip
- https://kruwirat.com/password/reset
- https://kruwirat.com/plc
- https://kruwirat.com/plc/1
- https://kruwirat.com/program/318
- https://kruwirat.com/project-request
- https://kruwirat.com/project-request?program=318
- https://kruwirat.com/register
- https://kruwirat.com/roadmap
- https://kruwirat.com/showcase
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)
| URL | Status | Indexable | Words | In-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 |
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.