Catalog / kaelith.tw
67

SEO audit for kaelith.tw

Kaelith 數位開發|清楚、穩定、安全的網站體驗

other

Health 67/100 (fair) · 45 pages crawled · generated 2026-08-26

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

Kaelith 數位開發專注網站體驗、前端工程、穩定維運與安全基礎,提供清楚且可長期管理的數位解決方案。

Screenshot of kaelith.tw
45
pages crawled
43
indexable pages
0
errors
108
warnings
85
notices
0
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Security 71 0 43 0
Content 74 0 39 0
Meta Description 83 0 25 17
Video 99 0 1 0
Performance 100 0 0 43
Social 100 0 0 25
Findings

Warnings (4 rules)

warning Content-Type header doesn't match the actual content

Rule headers.content_type_mismatch · Security · 43 occurrence(s)

  • https://kaelith.tw/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/about — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/access-control-idor — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/account-compromise-response — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/app-permission-safety — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/browser-extension-safety — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/cloud-sharing-privacy — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/content-security-policy — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/csrf-protection — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/data-breach-response — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/email-dns-security — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/online-shopping-security — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/qr-code-safety — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/scam-message-safety — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/secure-file-upload — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/session-cookie-security — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/articles/xss-prevention — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/changelog — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/contact — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/principles — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/privacy — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/security — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/services — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://kaelith.tw/status — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".

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

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

Notices (3 rules)

notice Missing Open Graph tags

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

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

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

  • https://kaelith.tw/ — 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://kaelith.tw/about — 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://kaelith.tw/articles/ — 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://kaelith.tw/articles/access-control-idor — 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://kaelith.tw/articles/account-compromise-response — 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://kaelith.tw/articles/app-permission-safety — 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://kaelith.tw/articles/browser-extension-safety — 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://kaelith.tw/articles/cloud-sharing-privacy — 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://kaelith.tw/articles/content-security-policy — 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://kaelith.tw/articles/csrf-protection — 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://kaelith.tw/articles/data-breach-response — 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://kaelith.tw/articles/email-dns-security — 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://kaelith.tw/articles/online-shopping-security — 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://kaelith.tw/articles/qr-code-safety — 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://kaelith.tw/articles/scam-message-safety — 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://kaelith.tw/articles/secure-file-upload — 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://kaelith.tw/articles/session-cookie-security — 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://kaelith.tw/articles/xss-prevention — 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://kaelith.tw/changelog — 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://kaelith.tw/contact — 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://kaelith.tw/principles — 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://kaelith.tw/privacy — 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://kaelith.tw/security — 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://kaelith.tw/services — 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://kaelith.tw/status — 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.
Pages (showing 45 of 45)
URLStatusIndexableWordsIn-links
https://kaelith.tw/
Kaelith 數位開發|清楚、穩定、安全的網站體驗
200 yes 114 43
https://kaelith.tw/about
關於 Kaelith 數位開發
200 yes 55 43
https://kaelith.tw/articles/
資安文章|給一般使用者與網站管理者的實用指南
200 yes 257 43
https://kaelith.tw/changelog
網站更新紀錄|Kaelith 數位開發
200 yes 53 43
https://kaelith.tw/contact
聯絡方式|Kaelith 數位開發
200 yes 47 43
https://kaelith.tw/principles
設計原則|Kaelith 數位開發
200 yes 45 43
https://kaelith.tw/privacy
隱私政策|Kaelith 數位開發
200 yes 54 43
https://kaelith.tw/security
網站安全與漏洞回報|Kaelith 數位開發
200 yes 64 43
https://kaelith.tw/services
專業服務|Kaelith 數位開發
200 yes 46 43
https://kaelith.tw/status
服務狀態|Kaelith 數位開發
200 yes 50 43
https://kaelith.tw/articles/qr-code-safety
QR Code 安全:掃描前看情境,開啟後看網址|Kaelith 資安文章
200 yes 210 35
https://kaelith.tw/articles/scam-message-safety
假客服與詐騙簡訊:先停三十秒,再確認對方是誰|Kaelith 資安文章
200 yes 185 35
https://kaelith.tw/articles/xss-prevention
XSS 跨站腳本攻擊:使用者怎麼辨識,網站維護者怎麼修|Kaelith 資安文章
200 yes 212 35
https://kaelith.tw/articles/2fa-recovery-codes
2FA 備援碼保存方式:避免手機遺失後連復原管道也一起消失|Kaelith 資安文章
200 yes 144 34
https://kaelith.tw/articles/access-control-idor
權限控制與 IDOR:網址換一個編號,不該看到別人的資料|Kaelith 資安文章
200 yes 149 34
https://kaelith.tw/articles/account-compromise-response
帳號疑似被盜:先保住信箱,再清理登入工作階段|Kaelith 資安文章
200 yes 176 34
https://kaelith.tw/articles/app-permission-safety
手機 App 權限:相機、麥克風與定位,只有需要時才開|Kaelith 資安文章
200 yes 184 34
https://kaelith.tw/articles/browser-extension-safety
瀏覽器擴充功能安全:安裝前看權限,更新後也要再看一次|Kaelith 資安文章
200 yes 174 34
https://kaelith.tw/articles/cloud-sharing-privacy
雲端連結分享:知道誰能看,也要知道連結會被轉傳|Kaelith 資安文章
200 yes 173 34
https://kaelith.tw/articles/content-security-policy
CSP 怎麼設才嚴格又不把網站弄壞:從盤點、上線到驗證|Kaelith 資安文章
200 yes 145 34
https://kaelith.tw/articles/csrf-protection
CSRF 跨站請求偽造:為什麼已登入反而會成為攻擊條件|Kaelith 資安文章
200 yes 145 34
https://kaelith.tw/articles/data-breach-response
服務發生資料外洩後:密碼、工作階段與詐騙風險要一起處理|Kaelith 資安文章
200 yes 174 34
https://kaelith.tw/articles/dns-basics
DNS 基礎:網站換主機時,真正改變的是解析路徑|Kaelith 資安文章
200 yes 144 34
https://kaelith.tw/articles/domain-dns-takeover
網域與 DNS 接管防護:別讓過期帳號與懸空 CNAME 接手品牌|Kaelith 資安文章
200 yes 152 34
https://kaelith.tw/articles/email-dns-security
郵件收不到或被冒用?從 MX、SPF、DKIM 到 DMARC 的完整檢查|Kaelith 資安文章
200 yes 226 34
https://kaelith.tw/articles/online-shopping-security
網購與付款安全:折扣可以等,付款網址要先確認|Kaelith 資安文章
200 yes 173 34
https://kaelith.tw/articles/password-manager
密碼管理器怎麼用:從唯一密碼到安全復原|Kaelith 資安文章
200 yes 143 34
https://kaelith.tw/articles/phishing
網路釣魚辨識:不要只看網址長得像不像|Kaelith 資安文章
200 yes 142 34
https://kaelith.tw/articles/public-wifi
公共 Wi-Fi 風險:加密連線之外,還要注意假熱點與裝置共享|Kaelith 資安文章
200 yes 145 34
https://kaelith.tw/articles/responsible-vulnerability-disclosure
發現網站漏洞怎麼回報:讓使用者、研究者與維護者都能安全處理|Kaelith 資安文章
200 yes 175 34
https://kaelith.tw/articles/secure-file-upload
網站檔案上傳安全:副檔名、MIME 與圖片壓縮都不夠|Kaelith 資安文章
200 yes 148 34
https://kaelith.tw/articles/security-incident-reporting
資安事件回報流程:先保留證據,再降低影響|Kaelith 資安文章
200 yes 142 34
https://kaelith.tw/articles/security-logging-monitoring
網站安全日誌與監控:記得夠用,但不要把密碼和 Token 也記進去|Kaelith 資安文章
200 yes 144 34
https://kaelith.tw/articles/self-xss
Self-XSS 防護:不要把陌生程式碼貼進瀏覽器主控台|Kaelith 資安文章
200 yes 145 34
https://kaelith.tw/articles/service-worker-cache-security
Service Worker 與快取安全:離線功能不能把舊版永久留在使用者裝置|Kaelith 資安文章
200 yes 146 34
https://kaelith.tw/articles/session-cookie-security
Cookie 與登入工作階段安全:別讓一次登入變成長期通行證|Kaelith 資安文章
200 yes 144 34
https://kaelith.tw/articles/social-engineering
社交工程防護:先辨識情緒,再驗證來源|Kaelith 資安文章
200 yes 142 34
https://kaelith.tw/articles/software-supply-chain
網站供應鏈安全:套件、CDN 與建置流程都可能成為入口|Kaelith 資安文章
200 yes 150 34
https://kaelith.tw/articles/ssl-certificate
SSL 憑證是什麼:理解網域驗證、有效期限與錯誤原因|Kaelith 資安文章
200 yes 144 34
https://kaelith.tw/articles/two-factor-authentication
雙重驗證 2FA:把第二道防線設計成可復原|Kaelith 資安文章
200 yes 143 34
https://kaelith.tw/articles/website-backup
網站備份為什麼重要:備份檔存在,不等於能成功還原|Kaelith 資安文章
200 yes 143 34
https://kaelith.tw/articles/website-maintenance-checklist
網站維護檢查表:內容、主機、安全與搜尋的固定週期|Kaelith 資安文章
200 yes 141 34
https://kaelith.tw/articles/website-malware
網站被掛馬怎麼辦:先隔離、保存證據,再確認入口|Kaelith 資安文章
200 yes 141 34
https://kaelith.tw/.well-known/security.txt 200 no 0 43
https://kaelith.tw/sitemap.xml 200 no 0 43

Audit your own site — free

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

Scan your site →