kiwi-walk 的 /blogs/ 總覽,8 個分類的奇異鳥 logo 排成兩列

kiwi-walk分類 logo 從 883 KiB 瘦到 114 KiB,載入速度大大提升

/blogs/ 那 8 隻奇異鳥 logo 只顯示 108px,卻每隻都是 200 多 KB 的 PNG。這篇記錄怎麼換成 R2 上 128px/256px 的 WebP、為什麼沒用 srcset,以及讓上傳腳本以後自動把文章圖縮到 1400px 並轉 WebP。

2026-10-20 · 7 分鐘
blog-seo-audit 本地 Lighthouse 6 次中位數:改前 gtag/js 在 head、10 ms 開始請求,load 1697 ms;改後 load 602 ms,gtag/js 在 load 之後才請求。FCP 1.50 → 1.21 s,LCP 1.80 → 1.80 s,Unused JS 72 → 72 KiB

kiwi-walk將 GA 延後載入,load 有提早,但 unused JS 卻沒下降

PageSpeed 說我有 72 KiB 沒用到的 JavaScript、10 KiB 舊式 JavaScript。把 GA 的 gtag/js 移到 window load 之後、只在正式 build 載入,load 提早約 1.1 秒、FCP 小幅改善;但 Lighthouse 照樣量到 72 KiB,而那 10 KiB 根本是 Cloudflare 的 beacon。第一次拿兩個不同 host 比出來的 LCP 進步,換成同條件 A/B 也不見了。

2026-10-20 · 7 分鐘
改之前線上 preview 首頁有 22 個 href 指向 kiwi-walk.com;換成 pages-build.sh 後本地模擬的 preview 22 個 href 都指向自己的 host;main 分支的輸出跟直接跑 hugo 逐檔相同

kiwi-walkCloudflare Pages 的 preview,點了連結就跳回正式站

kiwi-walk 的 Cloudflare Pages preview 上,首頁 22 個站內連結全部指向 https://kiwi-walk.com/,點一下就離開 preview。原因是 hugo.yml 寫死的 baseURL;改用一支 build script 讀 CF_PAGES_BRANCH 與 CF_PAGES_URL,在 preview 上換成部署自己的網址,並用逐檔 diff 確認正式站輸出不變。

2026-10-20 · 6 分鐘
kiwi-walk 的 HTTP 安全標頭:HTTP Observatory 從 D 30 分升到 A− 85 分,securityheaders.com 從 D 升到 A+;CSP、X-Frame-Options、Permissions-Policy、HSTS 補上,SRI 接受扣分

kiwi-walk解決之前被網站偵測的安全標頭,從 D 到 A 的路上

kiwi-walk 的 HTTP 安全標頭在 Mozilla HTTP Observatory 拿 D(30 分)。這篇記錄怎麼補上 X-Frame-Options、Permissions-Policy 和 CSP,把全站 18 段 inline script 搬成檔案,讓 CSP 可以強制執行,再開 HSTS,Observatory 升到 A−(85 分)、securityheaders.com 從 D 升到 A+;也記錄三個只在正式網域才出現、預覽網址完全抓不到的問題,以及清單上標成完成、實際卻還沒生效的 HSTS。

2026-10-17 · 9 分鐘

kiwi-walk網站效能、搜尋與資安的免費檢測工具

想知道自己的網站快不快、Google 讀不讀得懂、安不安全,七個免費線上工具就能從三個面向做一次體檢:效能看 PageSpeed Insights,搜尋看 Rich Results Test、Schema Markup Validator 和 Search Console,資安看 HTTP Observatory、securityheaders.com 和 SSL Labs。以 kiwi-walk 的實測為例,說明每個工具看什麼、報告怎麼讀,以及哪些過了、哪些沒過。

2026-10-16 · 10 分鐘
之前 www.kiwi-walk.com 經兩筆 A 記錄指到 Amazon EC2 的 IP,IP 已換主人,顯示別人的發票系統登入頁;之後 www 以 CNAME 接到 Pages 專案,再用 Redirect Rule 301 到 https://kiwi-walk.com

kiwi-walkSEO 健檢之後:www 子網域掛著別人的登入頁

SEO 健檢之後到 Cloudflare 後台收尾,發現 www.kiwi-walk.com 顯示的是別人的西班牙文發票系統登入頁:DNS 裡兩筆指向 Amazon EC2 的 A 記錄,IP 早已換了主人。記錄怎麼查到、怎麼修,pages.dev 轉址為什麼不勾 Include subdomains,以及替 CDN 加快取規則時,被 curl -I 誤導、以為規則沒生效的經過。

2026-10-16 · 6 分鐘

kiwi-walk一個月兩萬次 AI 爬蟲:kiwi-walk 的 Cloudflare 數據觀察

kiwi-walk 一個月被 AI 和搜尋爬蟲請求約 2.4 萬次,成功的不到一半。Meta 一家佔了成功請求的 44%,真正的文章只佔 2% 的請求;失敗的 4xx 有 94% 是 404,來源是主題設定檔沒換掉的範例文字、舊的 favicon 路徑,以及冒充 AI 助理來找 .env 的漏洞掃描。最後的決定是 AI 爬蟲全部放行,只用 WAF 擋掃描。

2026-10-12 · 7 分鐘
手機上行前指南的三種狀態:左邊頂部疊著三層固定列(外層分頁列、地區/行程推薦/備註、選擇日期);中間是往上滑一點時,只有日期列貼在最上面;右邊是往下滑時三層都收起,行程內容填滿整個畫面。行程文字已模糊處理

Day21 [travel-storage] 手機上內容與導覽搶畫面:固定列往下滑就收起;「吃」再分一層,資料由我丟給 AI 統整

手機看行前指南時,頂部疊了三層固定列、約 190px。記錄為什麼選「往下滑收起」而不是壓縮高度、往上滑時再分兩段(滑一點只露出日期列,滑多才全部回來),為此破例改了說好原樣保留的指南樣式,以及讓收起不惱人的幾條規則:靠近頂端一定顯示、小於 8px 不判斷、捲到底的回彈不算往上滑、看不見的列鍵盤也碰不到。另一條線是地點總表的「吃」加上子分類與篩選按鈕:選項太少時 AI 可以上網補,但來源不明是隱憂,所以我改成自己丟資料給 Claude、由它查證與統整。

2026-10-05 · 14 分鐘
東京旅行頁在手機上的每日實際行程:9/7 因大雨改走雨天線,頂端一條黃色提示寫著熱海取消;去了的景點是綠點,沒去的劃線並標「沒去」,看完展順道去的瞭望台標「計畫外」

Day19 [travel-storage] 一趟旅行只用一頁:出發前、旅途中、回來後都改同一份資料區

新專案 travel-storage:跟 Claude 一起排行程,每趟旅行做成一個自含式 HTML,放成一個私人網站。這篇記錄旅行頁怎麼設計成「一頁走完一趟旅行」:模板照行前指南還是回來後的全紀錄、行程項目用 done/plan/skip 等狀態從計畫走到實際、行前指南原樣內嵌而不是拆掉重寫、總覽頁對還沒結束的旅行只給出發日期(網址也不帶地名)、旅途中「先在對話回選項,挑了才寫進頁面」的更新流程,以及離線快取的代價。

2026-10-03 · 10 分鐘
遷移後的記錄列表,資料從 D1 讀出來

Day12 [coffee-review] 從 GitHub Pages + Supabase 搬到 Cloudflare:登入整個搬出 app 之外

Day5 到 Day7 的 coffee-review 跑在 GitHub Pages + Supabase 上,今天整套搬到 Cloudflare。改變最大的不是資料庫,是登入——原本 Google OAuth 是 app 的一部分,跑在瀏覽器裡、要處理 PKCE 與回跳;搬完之後 app.js 裡一行 OAuth 程式碼都沒有,登入被推到 Cloudflare Access,在請求碰到 Worker 之前就結束了。記錄兩個取捨、既有的 Google OAuth client 怎麼直接接上 Zero Trust、首次部署失敗與 AUD 只能靠一個 302 驗證的過程,以及 service worker 怎麼讓 Access 過期後回不去登入頁。

2026-09-26 · 11 分鐘