[{"data":1,"prerenderedAt":8052},["ShallowReactive",2],{"article-\u002Fzh\u002Fblog\u002Fsearch-good-website":3,"article-alt-\u002Fzh\u002Fblog\u002Fsearch-good-website":205,"article-related-\u002Fzh\u002Fblog\u002Fsearch-good-website":387},{"id":4,"title":5,"body":6,"date":187,"description":188,"draft":189,"extension":190,"meta":191,"navigation":192,"ogImage":193,"path":194,"seo":195,"stem":196,"tags":197,"translationKey":193,"updatedAt":203,"__hash__":204},"blog_zh\u002Fzh\u002Fblog\u002Fsearch-good-website.md","看不見的體驗差距：為什麼搜尋不到真正好用的網站？",{"type":7,"value":8,"toc":176},"minimark",[9,13,16,21,31,35,38,41,57,60,64,67,72,75,80,83,96,100,103,113,116,119,122,126,129,132,143,146,149,152,156,159,162,165,168],[10,11,12],"p",{},"2026\u002F06\u002F22 更新：目前已經移除 Google Lighthouse 分數顯示，改成各國無障礙標章、無障礙聲明以及 Accesserty ALLY 積極維護網站盟友標誌，以下為原文不修正。",[10,14,15],{},"--",[17,18,20],"h3",{"id":19},"一開場一個熟悉卻令人沮喪的場景","一、開場：一個熟悉卻令人沮喪的場景",[22,23,24],"blockquote",{},[10,25,26,27,30],{},"你打開 Google，輸入你要查的資料，結果跳出十個連結。你點了第一個、廣告一堆，關掉；點了第二個，圖片一大堆，但沒寫你要的內容；第三個，按了幾個 Tab 鍵，游標跑到不知道哪裡去⋯",[28,29],"br",{},"\n最後你開始懷疑，是不是自己太挑剔？",[17,32,34],{"id":33},"二問題不只是資訊太多而是我們看不到體驗品質","二、問題不只是資訊太多，而是我們「看不到」體驗品質",[10,36,37],{},"我們現在的搜尋引擎，大多數是以 SEO、網站速度、內容量這些技術指標為主來排序。",[10,39,40],{},"但真正讓一個網站「好用」的條件，卻是極其主觀而實際的：",[42,43,44,48,51,54],"ul",{},[45,46,47],"li",{},"能不能鍵盤操作？",[45,49,50],{},"標題有沒有意義？",[45,52,53],{},"廣告會不會遮住主要內容？",[45,55,56],{},"色彩、對比是否足夠讓你看清楚？",[10,58,59],{},"這些，都是使用者自己在點進去之後，用時間、情緒與忍耐換來的資訊。",[17,61,63],{"id":62},"三我想改變的是讓體驗被預先看見","三、我想改變的是：讓體驗被預先「看見」",[10,65,66],{},"在這個背景下，我開始思考：",[22,68,69],{},[10,70,71],{},"能不能在搜尋的那一刻，就知道某網站的無障礙狀況？",[10,73,74],{},"不是打分數、不是比賽排名、不是要把誰貼標籤，而是——",[22,76,77],{},[10,78,79],{},"「這個網站，有在努力讓人用得舒服嗎？」",[10,81,82],{},"我不是想創造一個新的搜尋引擎，我只是想讓「使用體驗」這件事變得可見。",[10,84,85,86,95],{},"這就是我設計出 ",[87,88,94],"a",{"href":89,"rel":90,"target":92,"title":93},"https:\u002F\u002Faccesserty.com\u002Fsignal\u002F",[91],"nofollow","_blank","另開新視窗","Accesserty Signal"," 的起點。",[17,97,99],{"id":98},"四signal-是什麼不是打分數是幫你選擇","四、Signal 是什麼？不是打分數，是「幫你選擇」",[10,101,102],{},"Accesserty Signal 是一個 Chrome Extension，它會在 Google 搜尋結果右側，顯示一個簡單的 badge：",[104,105,106],"figure",{},[10,107,108],{},[109,110],"img",{"alt":111,"src":112},"Google 搜尋列表下顯示 Lighthouse 分數","\u002Fimages\u002Fblog\u002F44.png",[10,114,115],{},"這個數字來自於 Lighthouse 無障礙檢測（可解釋、可比對、標準化）。",[10,117,118],{},"它不是打臉網站，也不是做名單化清單。",[10,120,121],{},"而是讓使用者在搜尋時，有一個簡單的線索去做選擇。",[17,123,125],{"id":124},"五我為什麼堅持不是用評分系統","五、我為什麼堅持不是用評分系統？",[10,127,128],{},"因為我不想讓這變成另一次「灌分遊戲」。",[10,130,131],{},"過去太多平台都把使用者體驗簡化成「評分」，但這往往只會變成：",[42,133,134,137,140],{},[45,135,136],{},"被操弄（行銷灌水）",[45,138,139],{},"被曲解（一星來自情緒，不是事實）",[45,141,142],{},"被用來威脅廠商（評不好就曝光）",[10,144,145],{},"我想避免這一切。",[10,147,148],{},"Accesserty Signal 的分數只是參考性的測量，不是評價。",[10,150,151],{},"真正的改善，還是得靠網站自己有意願去做。",[17,153,155],{"id":154},"六這只是開始但我希望打開那一點點透明感","六、這只是開始，但我希望打開那一點點「透明感」",[10,157,158],{},"我知道 Accesserty Signal 不會立刻改變世界，但它做的第一件事是：",[10,160,161],{},"讓體驗變得可見，不再只能靠使用者進網站後自己慢慢體會。",[10,163,164],{},"如果你也有過「不知道該點哪個網站」的焦慮，",[10,166,167],{},"或你曾經因為網頁看起來太煩而關掉它—— 那你其實已經體驗到「體驗的不可見性」了。",[10,169,170,175],{},[87,171,174],{"href":172,"rel":173,"target":92,"title":93},"https:\u002F\u002Faccesserty.com\u002F",[91],"Accesserty"," 是我嘗試在這之中，讓這個差距變得可見、可說明、可改善的一步。",{"title":177,"searchDepth":178,"depth":178,"links":179},"",2,[180,182,183,184,185,186],{"id":19,"depth":181,"text":20},3,{"id":33,"depth":181,"text":34},{"id":62,"depth":181,"text":63},{"id":98,"depth":181,"text":99},{"id":124,"depth":181,"text":125},{"id":154,"depth":181,"text":155},"2025-05-29","現在的搜尋引擎以 SEO、速度、內容量排序，卻排不出「真正好用」的網站。談這個看不見的體驗差距，以及我為什麼決定在搜尋結果中顯示無障礙指標。",false,"md",{},true,null,"\u002Fzh\u002Fblog\u002Fsearch-good-website",{"title":5,"description":188},"zh\u002Fblog\u002Fsearch-good-website",[198,199,200,201,202],"ChromeExtension","無障礙網頁設計","A11Y","無障礙","Accessibility","2026-06-22","ZNVUBqG74Qn72o4eU4NY3edw17rIXgAMZNEDYwiu-R0",{"id":206,"title":207,"body":208,"date":187,"description":379,"draft":189,"extension":190,"meta":380,"navigation":192,"ogImage":193,"path":381,"seo":382,"stem":383,"tags":384,"translationKey":193,"updatedAt":203,"__hash__":386},"blog_en\u002Fen\u002Fblog\u002Fsearch-good-website.md","The Invisible Experience Gap  —  Why It’s So Hard to Find Truly Usable Websites",{"type":7,"value":209,"toc":371},[210,213,215,219,239,243,246,260,263,267,270,275,278,283,286,294,298,301,304,311,314,317,321,324,327,338,341,344,348,351,356,359,362,365],[10,211,212],{},"2026\u002F06\u002F22 update：now remove Google Lighthouse.",[10,214,15],{},[17,216,218],{"id":217},"_1-a-familiar-frustrating-scene","1. A familiar, frustrating scene",[22,220,221],{},[10,222,223,224,226,227,229,230,232,233,235,236,238],{},"You open Google, type in your query, and ten blue links appear.",[28,225],{},"\nYou click the first one — it’s full of ads, so you close it.",[28,228],{},"\nThe second — tons of images, but no useful content.",[28,231],{},"\nThe third — you press the Tab key a few times, and the cursor disappears somewhere…",[28,234],{},"\nEventually, you wonder:",[28,237],{},"\nAm I just being too picky?",[17,240,242],{"id":241},"_2-the-problem-isnt-too-much-information-its-that-we-cant-see-usability","2. The problem isn’t “too much information” — it’s that we can’t see usability",[10,244,245],{},"Most modern search engines rank results based on SEO, page speed, and content density. But what actually makes a site usable is deeply practical — and often subjective:",[42,247,248,251,254,257],{},[45,249,250],{},"Can you navigate with just a keyboard?",[45,252,253],{},"Do the headings make sense?",[45,255,256],{},"Are ads covering the main content?",[45,258,259],{},"Is the color contrast strong enough to read comfortably?",[10,261,262],{},"These aren’t things we can evaluate from a link preview.\nWe only find out after clicking — by spending time, patience, and emotional energy.",[17,264,266],{"id":265},"_3-what-i-wanted-to-change-make-experience-visible-before-you-click","3. What I wanted to change: Make experience visible before you click",[10,268,269],{},"That’s when I started wondering:",[22,271,272],{},[10,273,274],{},"What if you could see a website’s accessibility state right at the moment of search?",[10,276,277],{},"Not to assign ratings.\nNot to label or shame anyone.\nBut to simply ask:",[22,279,280],{},[10,281,282],{},"“Has this website made an effort to be comfortable and usable?”",[10,284,285],{},"I’m not trying to build a new search engine.\nI just want to make user experience visible, at a glance.",[10,287,288,289,293],{},"That’s where the idea for ",[87,290,94],{"href":89,"rel":291,"target":92,"title":292},[91],"Open new window"," began.",[17,295,297],{"id":296},"what-is-signal","What is Signal?",[10,299,300],{},"It’s not a rating — it’s a helper for decision-making",[10,302,303],{},"Accesserty Signal is a lightweight Chrome extension that adds a simple badge to each Google search result:",[104,305,306],{},[10,307,308],{},[109,309],{"alt":310,"src":112},"Google search result list: Lighthouse Score",[10,312,313],{},"This number comes from Lighthouse, a widely used accessibility audit tool.\nIt’s explainable, standardized, and easy to compare.",[10,315,316],{},"It’s not a judgment.\nIt’s not a curated “good websites only” list.\nIt’s just a small clue to help users choose where to click.",[17,318,320],{"id":319},"why-i-refused-to-make-it-a-rating-system","Why I refused to make it a rating system",[10,322,323],{},"Because I didn’t want this to become another “score game.”",[10,325,326],{},"Too many platforms reduce experience to 1–5 stars, and it always ends up with:",[42,328,329,332,335],{},[45,330,331],{},"Manipulated ratings (via marketing bots)",[45,333,334],{},"Misleading reviews (1-star due to a bad mood, not the product)",[45,336,337],{},"Used to pressure creators (“fix this or we’ll expose you”)",[10,339,340],{},"I wanted to avoid all of that.",[10,342,343],{},"The accessibility score in Accesserty Signal is just a neutral indicator.\nReal improvement still depends on whether the website wants to improve.",[17,345,347],{"id":346},"its-just-the-beginning-but-it-adds-a-little-transparency","It’s just the beginning — but it adds a little transparency",[10,349,350],{},"I know Accesserty Signal won’t change the web overnight.\nBut it does one small thing:",[22,352,353],{},[10,354,355],{},"It makes experience visible — not something users have to discover the hard way.",[10,357,358],{},"If you’ve ever hesitated before clicking a link, unsure if the site would be a pain…",[10,360,361],{},"If you’ve ever closed a site because it felt too messy or hostile…",[10,363,364],{},"Then you’ve already felt the invisibility of user experience.",[10,366,367,370],{},[87,368,174],{"href":172,"rel":369,"target":92,"title":292},[91]," is my way of trying to make that gap more visible, understandable, and improvable — one badge at a time.",{"title":177,"searchDepth":178,"depth":178,"links":372},[373,374,375,376,377,378],{"id":217,"depth":181,"text":218},{"id":241,"depth":181,"text":242},{"id":265,"depth":181,"text":266},{"id":296,"depth":181,"text":297},{"id":319,"depth":181,"text":320},{"id":346,"depth":181,"text":347},"Why I decided to display accessibility signals in search results.",{},"\u002Fen\u002Fblog\u002Fsearch-good-website",{"title":207,"description":379},"en\u002Fblog\u002Fsearch-good-website",[198,200,202,385],"Usability","3RumyZrq5R0cNNOs7xcCuxYl_e_ZOcSTbzXgx8J_OuI",[388,1092,1212,1253,1411,1486,1531,2443,2644,2760,3036,3222,3412,3661,3757,4574,4873,5177,5376,5858,7863],{"id":389,"title":390,"body":391,"date":1079,"description":1080,"draft":189,"extension":190,"meta":1081,"navigation":192,"ogImage":193,"path":1082,"seo":1083,"stem":1084,"tags":1085,"translationKey":193,"updatedAt":193,"__hash__":1091},"blog_zh\u002Fzh\u002Fblog\u002Fa11y-world-rules.md","全球網頁無障礙制度設計：各國法規、公私部門執行工具與驅動力比較",{"type":7,"value":392,"toc":1072},[393,396,405,408,412,415,426,429,434,452,456,461,464,475,479,482,496,500,503,526,530,535,539,542,590,593,607,611,615,618,621,624,627,630,633,636,639,642,647,651,654,657,660,663,666,669,672,675,678,683,686,694,698,701,712,714,717,731,734,738,742,749,756,763,770,773,780,787,790,797,804,811,814,821,828,835,838,845,852,855,862,869,872,879,886,889,896,903,910,917,920,927,934,937,944,951,958,961,968,975,978,985,992,995,1002,1009,1016,1019,1026,1033,1036,1043,1050,1053,1060,1067,1069],[17,394,395],{"id":395},"前言",[10,397,398,399,404],{},"最近我正在幫我的 Accesserty Signal",[87,400,403],{"href":401,"rel":402,"target":92,"title":93},"https:\u002F\u002Faccesserty.com\u002Fsignal",[91],"連結"," 擴充標章功能。原本只是單純想收集各國的標章、法規與檢測項目，但收集到一半時發現——應該要先理解各國的「政策」才行，於是著手手動收集；然而要涵蓋的國家與細節實在太多，不得不借助 AI 協助整理與分析，也順便分享給大家閱讀。以下資料可能有誤，歡迎專家不吝指正。 預計下一篇將分析各國標章概況。",[10,406,407],{},"先把本文制度地基講清楚：\n盤點 臺灣、美國、英國、澳洲、韓國、日本、印度，以及歐盟框架下的德國、法國、西班牙、葡萄牙、奧地利、比利時、荷蘭與非歐盟的瑞士，共十六個法域的網頁無障礙制度設計。重點不在「技術標準是 WCAG 幾點幾」（這幾乎全球趨同於 WCAG 2.1／2.2 AA），而在一個更根本的問題——到底是用什麼力量，讓網站願意做到無障礙？ 是政府發一張證書、派人定期抽查、開一張罰單，還是等身心障礙者上法院告？各國的答案，差異遠比想像中大。",[17,409,411],{"id":410},"一分析框架先分公部門與民間再看用哪種工具","一、分析框架：先分公部門與民間，再看用哪種工具",[10,413,414],{},"比較各國制度時，最常見的錯誤是把一個國家當成「一格」。事實上幾乎每個法域，對公部門與對民間都是兩套不同的法、不同的執行者、不同的後果：",[42,416,417,420,423],{},[45,418,419],{},"歐盟用兩條不同指令——WAD（管公部門）與 EAA（管民間）；",[45,421,422],{},"德國公部門（BITV）無罰則、民間（BFSG）卻可罰 €10 萬；",[45,424,425],{},"臺灣對政府網站法律強制取得標章、對民間幾乎零要求。",[10,427,428],{},"所以本文採雙軸分析：先區分「公部門 \u002F 民間」，再用一套共通的「機制詞彙」標定每個法域落在哪裡。",[430,431,433],"h4",{"id":432},"六種制度工具機制詞彙","六種制度工具（機制詞彙）",[10,435,436,437,439,440,442,443,445,446,448,449,451],{},"① 強制認證制：事前、政府或指定機構檢測、發證，法律要求特定對象取得",[28,438],{},"\n② 自我聲明＋政府監測制：持續、受規範者自評並公布無障礙聲明，政府抽樣複查＋申訴",[28,441],{},"\n③ 採購／供應鏈槓桿制：進場、「政府只買無障礙的東西／不合規喪失標案資格」",[28,444],{},"\n④ 市場監督＋罰鍰制：事後、市場監督機關查核、命令改善、課罰鍰乃至下架",[28,447],{},"\n⑤ 反歧視訴訟驅動制：事後、無事前認證，靠個案申訴、民事訴訟、行政救濟",[28,450],{},"\n⑥ 軟法／努力義務制：--、無強制門檻與罰則，靠行政指導與聲譽壓力",[430,453,455],{"id":454},"二各法域制度檢視依主導模式分組","二、各法域制度檢視（依主導模式分組）",[457,458,460],"h5",{"id":459},"群組-a政府強制認證型東亞印度","群組 A：政府強制認證型（東亞＋印度）",[10,462,463],{},"這群共同點是——政府（或政府指定機構）扮演發證者，並把「取得認證」寫進法律或政策。",[42,465,466,469,472],{},[45,467,468],{},"臺灣：母法《身心障礙者權益保障法》第 52 條之 2 明文要求政府機關、學校網站「應通過第一優先等級以上無障礙檢測，並取得認證標章」。數位發展部建平台，含自我、機器、人工（含身障者）檢測。標準以 WCAG 2.1 AA 為底、預計 2026 年底升 2.2。公部門強制、民間無規範。",[45,470,471],{},"韓國：以《禁止歧視身心障礙者法》第 21 條為核心，科學技術資訊通信部（MSIT）指定三家認證機構核發官方品質標章，標準 KWCAG 2.2。罰則相對硬——惡意歧視最高 3 年徒刑或 3,000 萬韓元罰金，另有行政罰鍰、喪失標案資格。公部門認證、民間靠反歧視法強制（分階段）。",[45,473,474],{},"印度：以《身心障礙者權利法》（RPwD 2016）為母法，MeitY 旗下 STQC 官方機構檢測、核發 CQW 認證（把無障礙、資安、易用性綁在一起），標準 GIGW 3.0（WCAG 2.1 AA）。罰則初犯 ₹1 萬、累犯最高 ₹5 lakh。2025 年 SEBI 通函首次把無障礙強制擴及金融業——印度正從公部門向民間擴張。",[457,476,478],{"id":477},"群組-b反歧視訴訟驅動型普通法系日本","群組 B：反歧視訴訟驅動型（普通法系＋日本）",[10,480,481],{},"這群不設政府事前認證，把無障礙定位為「反歧視／平等權」，靠申訴與訴訟推動。",[42,483,484,487,490,493],{},[45,485,486],{},"美國：雙軌——ADA（反歧視，Title II 州\u002F地方政府、Title III 民間）＋ Section 508（聯邦採購）。標準須分層：ADA Title II 2024 新規採 WCAG 2.1 AA、Section 508 仍是 WCAG 2.0 AA、Title III 無法定標準靠判例。著名的「訴訟驅動」國家，每年數千件網站官司。",[45,488,489],{},"英國：公部門《2018 公部門無障礙規範》（PSBAR，轉化 WAD），GDS 監測、EHRC 執法；民間《2010 平等法》要求「合理調整」，身障者可向郡法院求償。標準綁「WCAG as amended」（現行 2.2 AA）。脫歐後未轉化 EAA，民間僅靠平等法。",[45,491,492],{},"澳洲：《1992 身心障礙歧視法》（DDA）涵蓋公私，但無法定技術標準、無行政罰鍰；AHRC 受理申訴→調解→聯邦法院判賠並命改善（指標案 Maguire v SOCOG 2000）。聯邦政府另透過 DTA《Digital Service Standard 2.0》要求採最新 WCAG（現 2.2 AA）。",[45,494,495],{},"日本：《障害者差別解消法》第 7 條（政府）、第 8 條（民間），標準 JIS X 8341-3:2016（對應 WCAG 2.0，實務向 2.1）。2024\u002F4\u002F1 起民間「合理調整」從努力義務升為法定義務，但網頁無障礙仍偏努力目標、幾乎無直接罰則（唯一罰鍰 ¥20 萬針對拒絕政府調查\u002F虛偽報告）。典型「軟法」。",[457,497,499],{"id":498},"群組-c歐盟雙指令型wad-公部門eaa-民間","群組 C：歐盟雙指令型（WAD 公部門＋EAA 民間）",[10,501,502],{},"這群結構高度一致：公部門源自 WAD（2016\u002F2102）、走自我聲明＋政府監測；民間源自 EAA（2019\u002F882，2025\u002F6\u002F28 適用）、走市場監督＋罰鍰。差異在「監測的牙齒」與「罰鍰金額」。標準一律 EN 301 549 → WCAG 2.1 AA。",[42,504,505,508,511,514,517,520,523],{},[45,506,507],{},"德國：三層——BGG（母法）＋BITV 2.0（公部門）＋BFSG（民間）。公部門無罰則，靠團體訴訟（Verbandsklage）；民間由各邦聯合市場監督機關（設於 Magdeburg）查處，最高罰 €10 萬。",[45,509,510],{},"法國：第 2005-102 號法第 47 條＋RGAA 4.1.2，DINUM 制定規範。特別之處：2023 年起 ARCOM 對公部門也有實質裁罰權——申報義務缺失 €25,000、無障礙不合規 €50,000，且持續未改正每年可重罰。民間（EAA）由 DGCCRF 統籌市場監督，罰金累計可達 €250,000。法國是少數讓公部門監測「長出牙齒」的歐盟國。",[45,512,513],{},"西班牙：公部門 RD 1112\u002F2018＋無障礙觀測站（Observatorio）監測；民間 RDL 11\u002F2023。罰鍰分體系——公部門監督約 €3,000–100,000，民間／EAA 級距最高可達 €100 萬（非常嚴重），是歐盟中上限最高者之一。無官方標章，AENOR、Ilunion 屬民間自願認證。",[45,515,516],{},"葡萄牙：公部門 DL 83\u002F2018，AMA 監測並營運官方但自願的「易用性與無障礙標章 Selo」（金\u002F銀\u002F銅）；民間 DL 82\u002F2022，由 ANACOM、ASAE 等多家部門別監理機關稽查，法人罰鍰最高約 €44,892。",[45,518,519],{},"奧地利：公部門 WZG，FFG（研究促進署）監測；民間 BaFG（2025），社會部服務處（Sozialministeriumservice）市場監督，最高罰 €8 萬。WACA 為民間自願標章。",[45,521,522],{},"比利時：聯邦制使法源分散——1 部聯邦法（2018\u002F7\u002F19）＋多個地區法令；BOSA 轄下的數位無障礙署監測協調。民間 EAA 由聯邦經濟部等執行。AnySurfer 為民間自願標章。",[45,524,525],{},"荷蘭：公部門《政府數位無障礙臨時法令》，採「遵循或解釋（comply-or-explain）」＋Logius 查核聲明＋公開 Dashboard，無罰鍰；民間《實施法》由消費者暨市場管理局（ACM）監督，最高罰 €9 萬並可禁止提供服務。Drempelvrij\u002FDigital Inclusive 為民間自願標章。",[457,527,529],{"id":528},"群組-d非歐盟自成一套","群組 D：非歐盟自成一套",[42,531,532],{},[45,533,534],{},"瑞士：《身心障礙者平等法》（BehiG，2004）＋eCH-0059 標準（WCAG 2.1 AA），目前僅及於聯邦行政機關、無罰鍰、靠當事人主張權利。非歐盟、不適用 EAA。修法中，預計最快 2027\u002F1\u002F1 才把義務擴及民間線上服務。",[430,536,538],{"id":537},"三公私-機制定位矩陣","三、公私 × 機制定位矩陣",[10,540,541],{},"把十六個法域同時放上「公部門」\u002F「民間」兩軸：",[10,543,544,545,547,548,550,551,553,554,556,557,559,560,562,563,565,566,568,569,571,572,574,575,577,578,580,581,583,584,586,587,589],{},"臺灣 ① 強制認證（母法要求取得標章） ／ ⑥ 無",[28,546],{},"\n韓國 ① 政府指定機構認證（官方標章） ／ ⑤ 反歧視法（分階段強制＋刑\u002F罰）",[28,549],{},"\n印度 ① STQC、CQW 強制認證 ／ ④⑤ RPwD＋SEBI(2025) 新興強制",[28,552],{},"\n美國 ③ Section 508 採購＋⑤ ADA Title II ／ ⑤ ADA Title III 訴訟",[28,555],{},"\n英國 ② PSBAR 自我聲明＋GDS 監測（EHRC 執法） ／ ⑤ 平等法訴訟",[28,558],{},"\n澳洲 ⑤\u002F⑥ DDA＋DSS（政府採 WCAG，靠申訴） ／ ⑤ DDA 訴訟",[28,561],{},"\n日本 ⑥ 努力義務＋軟性引導 ／ ⑥ 軟法（2024 合理調整法定義務、無罰則）",[28,564],{},"\n歐盟 ② WAD ／ ④ EAA",[28,567],{},"\n德國 ② BITV（無罰則／團體訴訟） ／ ④ BFSG（市場監督＋€10萬）",[28,570],{},"\n法國 ②＋④ RGAA＋ARCOM（可罰 €5萬） ／ ④ EAA（DGCCRF，累計 €25萬）",[28,573],{},"\n西班牙 ② RD 1112＋Observatorio 監測 ／ ④ RDL 11\u002F2023（最高 €100萬）",[28,576],{},"\n葡萄牙 ② DL 83\u002F2018＋AMA 監測（＋自願 Selo） ／ ④ DL 82\u002F2022（部門別監理）",[28,579],{},"\n奧地利 ② WZG＋FFG 監測 ／ ④ BaFG（€8萬）",[28,582],{},"\n比利時 ② 2018 法＋BOSA 監測 ／ ④ EAA（聯邦經濟部）",[28,585],{},"\n荷蘭 ② 臨時法＋Logius（comply-or-explain） ／ ④ EAA（ACM，€9萬）",[28,588],{},"\n瑞士 ②\u002F⑥ BehiG 聯邦自我落實 ／ 無（2027 才擴及民間）",[430,591,592],{"id":592},"從矩陣讀出的四個結構性事實",[42,594,595,598,601,604],{},[45,596,597],{},"公部門集中在「認證／監測」，民間則明顯分兩條路。 公部門欄不是①就是②；民間欄則裂成兩種法律傳統——普通法系（美、英、澳）＋東亞反歧視（日、韓）靠⑤訴訟，歐盟靠④市場監督＋罰鍰。",[45,599,600],{},"「民間」這一格長期最弱，2024–2025 才被補起來。 臺灣民間仍近乎空白、日本到 2024 才硬化、歐盟 EAA 與印度 SEBI 都在 2025 才上路、瑞士要等 2027。網頁無障礙的執法重心，正從公部門外溢到民間。",[45,602,603],{},"同一個②「監測」機制，但差很多。 多數歐盟國公部門無罰鍰（德、荷、比、奧、葡），靠透明與團體訴訟；法國比較不一樣，ARCOM 對公部門可罰 €5 萬並 name & shame；英國則無罰鍰但 EHRC 有調查與訴訟權。",[45,605,606],{},"罰鍰金額（民間\u002FEAA）落差極大。 葡萄牙約 €4.5 萬、奧地利 €8 萬、荷蘭 €9 萬、德國 €10 萬、法國累計 €25 萬，西班牙最高 €100 萬。同一條 EAA，各國「定價」天差地別。",[17,608,610],{"id":609},"四各機制優缺點分析分公部門民間兩組","四、各機制優缺點分析（分公部門、民間兩組）",[430,612,614],{"id":613},"甲公部門常見機制","甲、公部門常見機制",[10,616,617],{},"① 強制認證（臺、韓、印）",[10,619,620],{},"標準統一、通過與否明確、可公開查核；對政府網站效力最強；天然產生「官方標章」可供信任",[10,622,623],{},"行政成本高、易僵化於發證當下、難規模化；認證後品質可能回落（一次性過關）",[10,625,626],{},"② 自我聲明＋監測（歐盟公部門、英）",[10,628,629],{},"門檻低、可覆蓋海量網站；持續監測反映現況；不需龐大發證機器",[10,631,632],{},"自評可信度低、監測僅抽樣；罰則弱時流於形式（聲明漂亮、實際不無障礙）",[10,634,635],{},"③ 採購／供應鏈槓桿（美 Section 508）",[10,637,638],{},"不必另立罰則即驅動大量供應商；示範效果強、責任鏈清楚",[10,640,641],{},"只及於與政府交易者；易被「自我宣告（VPAT）」灌水",[22,643,644],{},[10,645,646],{},"公部門的共同弱點：力度雖強，邊界卻止於政府自己。臺、印的強制認證對民間無外溢力；歐盟監測制覆蓋廣卻深度不足，且多數國家對公部門根本沒有罰鍰（法國是少數例外）。",[430,648,650],{"id":649},"乙民間常見機制","乙、民間常見機制",[10,652,653],{},"④ 市場監督＋罰鍰（歐盟民間、印 SEBI）",[10,655,656],{},"經濟嚇阻力強、明確覆蓋民間、責任歸屬清楚；可下架\u002F禁營運",[10,658,659],{},"事後性（傷害已發生）、執法量能有限；中小企業負擔重、易靠豁免規避；金額各國落差大、2025 才上路成效待觀察",[10,661,662],{},"⑤ 反歧視訴訟驅動（美、英、澳、韓）",[10,664,665],{},"賦予當事人實權、判例能快速拉高標準、不需事前行政機器",[10,667,668],{},"高度不確定、標準由法院碎片化形成；訴訟成本轉嫁、易生「掠奪性訴訟」；弱勢者未必告得起",[10,670,671],{},"⑥ 軟法／努力義務（日、臺民間、瑞士民間至 2027）",[10,673,674],{},"推行阻力小、易作過渡；可先建共識再硬化",[10,676,677],{},"幾乎無強制力、淪為宣示；改善高度依賴企業善意與聲譽壓力",[22,679,680],{},[10,681,682],{},"民間的共同難題：要嘛事後（罰鍰、訴訟都在傷害發生後），要嘛無力（軟法）。沒有任何一國對民間採「事前強制認證」——這正說明為何官方標章幾乎只長在公部門。",[430,684,685],{"id":685},"跨組綜合觀察",[42,687,688,691],{},[45,689,690],{},"沒有單一最佳解，成熟法域都是「疊加」。 美國＝採購(③)＋訴訟(⑤)；歐盟各國＝監測(②)＋市場監督(④)，再加個人訴訟。強的制度是多工具互相補位，而非單押一種。",[45,692,693],{},"罰鍰的「有無」與「高低」並不等於成效。 荷蘭公部門無罰鍰卻靠 comply-or-explain＋公開 Dashboard 維持透明壓力；西班牙民間罰到 €100 萬，但實際執法量能仍是問號。制度的真正差別在執行密度，不只在條文上的數字。",[17,695,697],{"id":696},"五綜合觀察與趨勢","五、綜合觀察與趨勢",[10,699,700],{},"把十六個法域攤開，可以看到三個清楚的走向：",[42,702,703,706,709],{},[45,704,705],{},"技術標準全球趨同、制度工具高度分歧。 大家都收斂到 EN 301 549 \u002F WCAG 2.1（漸進 2.2）AA；真正的差異全在「誰來逼、怎麼逼」。",[45,707,708],{},"重心從「公部門軟法／事前認證」走向「民間市場監督＋基本權」。 2024–2025 是分水嶺：歐盟 EAA、日本合理調整義務化、印度最高法院 2025 判決與 SEBI 通函，都把無障礙從「努力目標」推向「可罰、可訴的權利」。瑞士 2027 將是下一棒。",[45,710,711],{},"「有沒有官方標章」≠「制度強不強」。 臺、韓、印有強制官方標章；但德、西、荷這些制度完整的國家刻意不設官方標章，改用自我聲明＋監測，把標章讓給民間自願市場；葡萄牙的 Selo 雖由政府營運，仍只是自願卓越獎而非合規門檻。",[10,713,15],{},[10,715,716],{},"下一篇預告：當「標章」遇上不同制度\n本文畫出了一張「公私 × 機制」的制度地圖。而在這張地圖上，「無障礙標章」其實落在很不一樣的位置：",[42,718,719,722,725,728],{},[45,720,721],{},"在臺灣，標章是法律強制的守門員——政府網站沒拿到就不合規；",[45,723,724],{},"在韓國、印度，標章是政府或指定機構核發的官方憑證；",[45,726,727],{},"在德國、西班牙、荷蘭、奧地利、比利時、瑞士，官方根本不發標章，市面上的 WACA、AnySurfer、AENOR、Ilunion、Access for all、Drempelvrij 全是民間自願的信任標記——它是加分項，不是門檻；",[45,729,730],{},"而葡萄牙的 Selo 則卡在中間：政府營運，卻是自願的卓越獎。",[10,732,733],{},"也就是說，同樣叫「無障礙標章」，有的是「過不了就違法」的關卡，有的只是「做到了給你拍拍手」的獎章。下一篇，我會把各國的標章逐一攤開——誰發的、怎麼分級、有沒有有效期限、查不查得到名單、設計長什麼樣——並對照本文這張制度地圖，看看每一枚標章，到底站在哪個位置。",[17,735,737],{"id":736},"reference-列表","Reference 列表",[430,739,741],{"id":740},"國際框架","國際／框架",[10,743,744],{},[87,745,748],{"href":746,"rel":747,"target":92,"title":93},"https:\u002F\u002Fwww.w3.org\u002FWAI\u002Fpolicies\u002F",[91],"W3C WAI, Web Accessibility Laws & Policies",[10,750,751],{},[87,752,755],{"href":753,"rel":754,"target":92,"title":93},"https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Fdir\u002F2016\u002F2102\u002Foj",[91],"EU Web Accessibility Directive 2016\u002F2102",[10,757,758],{},[87,759,762],{"href":760,"rel":761,"target":92,"title":93},"https:\u002F\u002Fcommission.europa.eu\u002Fstrategy-and-policy\u002Fpolicies\u002Fjustice-and-fundamental-rights\u002Fdisability\u002Feuropean-accessibility-act-eaa_en",[91],"European Accessibility Act, Directive 2019\u002F882",[10,764,765],{},[87,766,769],{"href":767,"rel":768,"target":92,"title":93},"https:\u002F\u002Faccessible-eu-centre.ec.europa.eu\u002F",[91],"EN 301 549（Accessible EU Centre）",[430,771,772],{"id":772},"臺灣",[10,774,775],{},[87,776,779],{"href":777,"rel":778,"target":92,"title":93},"https:\u002F\u002Flaw.moj.gov.tw\u002FLawClass\u002FLawSingle.aspx?Pcode=D0050046&FLNO=52-2",[91],"身心障礙者權益保障法第 52-2 條",[10,781,782],{},[87,783,786],{"href":784,"rel":785,"target":92,"title":93},"https:\u002F\u002Faccessibility.moda.gov.tw\u002F",[91],"數位發展部《網站無障礙規範》",[430,788,789],{"id":789},"美國",[10,791,792],{},[87,793,796],{"href":794,"rel":795,"target":92,"title":93},"https:\u002F\u002Fwww.ada.gov\u002Flaw-and-regs\u002Fada\u002F",[91],"ADA",[10,798,799],{},[87,800,803],{"href":801,"rel":802,"target":92,"title":93},"https:\u002F\u002Fwww.section508.gov\u002F",[91],"Section 508",[10,805,806],{},[87,807,810],{"href":808,"rel":809,"target":92,"title":93},"https:\u002F\u002Fwww.levelaccess.com\u002Fblog\u002Fada-vs-section-508-whats-the-difference\u002F",[91],"ADA Title II 2024 規則 vs Section 508（WCAG 2.1\u002F2.0 比較，Level Access）",[430,812,813],{"id":813},"英國",[10,815,816],{},[87,817,820],{"href":818,"rel":819,"target":92,"title":93},"https:\u002F\u002Fwww.legislation.gov.uk\u002Fuksi\u002F2018\u002F952\u002Fcontents",[91],"PSBAR 2018",[10,822,823],{},[87,824,827],{"href":825,"rel":826,"target":92,"title":93},"https:\u002F\u002Fwww.legislation.gov.uk\u002Fukpga\u002F2010\u002F15\u002Fcontents",[91],"Equality Act 2010",[10,829,830],{},[87,831,834],{"href":832,"rel":833,"target":92,"title":93},"https:\u002F\u002Fwww.gov.uk\u002Fguidance\u002Faccessibility-requirements-for-public-sector-websites-and-apps",[91],"公部門無障礙要求（GOV.UK）",[430,836,837],{"id":837},"澳洲",[10,839,840],{},[87,841,844],{"href":842,"rel":843,"target":92,"title":93},"https:\u002F\u002Fwww.legislation.gov.au\u002FC2004A04426\u002Flatest",[91],"Disability Discrimination Act 1992",[10,846,847],{},[87,848,851],{"href":849,"rel":850,"target":92,"title":93},"https:\u002F\u002Fhumanrights.gov.au\u002Four-work\u002Fdisability-rights\u002Fworld-wide-web-access-disability-discrimination-act-advisory-notes-ver",[91],"AHRC, World Wide Web Access: DDA Advisory Notes",[430,853,854],{"id":854},"韓國",[10,856,857],{},[87,858,861],{"href":859,"rel":860,"target":92,"title":93},"https:\u002F\u002Felaw.klri.re.kr\u002Feng_mobile\u002Fviewer.do?hseq=55535&type=part&key=38",[91],"Act on Prohibition of Discrimination against Persons with Disabilities（KLRI 英譯）",[10,863,864],{},[87,865,868],{"href":866,"rel":867,"target":92,"title":93},"https:\u002F\u002Fenglish.seoul.go.kr\u002Fweb-accessibility-quality-mark\u002F",[91],"Seoul, Web Accessibility Quality Mark",[430,870,871],{"id":871},"日本",[10,873,874],{},[87,875,878],{"href":876,"rel":877,"target":92,"title":93},"https:\u002F\u002Fwww8.cao.go.jp\u002Fshougai\u002Fsuishin\u002Flaw_h25-65.html",[91],"障害者差別解消法（內閣府）",[10,880,881],{},[87,882,885],{"href":883,"rel":884,"target":92,"title":93},"https:\u002F\u002Fwww.amt-law.com\u002Fasset\u002Fpdf\u002Fbulletins9_pdf\u002FLELB63.pdf",[91],"2024\u002F4\u002F1 合理調整義務化（Anderson Mōri & Tomotsune）",[430,887,888],{"id":888},"印度",[10,890,891],{},[87,892,895],{"href":893,"rel":894,"target":92,"title":93},"https:\u002F\u002Fniepvd.nic.in\u002Fthe-rights-of-persons-with-disabilities-rpwd-act-2016\u002F",[91],"RPwD Act 2016",[10,897,898],{},[87,899,902],{"href":900,"rel":901,"target":92,"title":93},"https:\u002F\u002Fguidelines.india.gov.in\u002F",[91],"GIGW 3.0",[10,904,905],{},[87,906,909],{"href":907,"rel":908,"target":92,"title":93},"https:\u002F\u002Fwww.stqc.gov.in\u002Fwebsite-quality-certification-0",[91],"STQC CQW",[10,911,912],{},[87,913,916],{"href":914,"rel":915,"target":92,"title":93},"https:\u002F\u002Fwww.deque.com\u002Fblog\u002Fsebi-sets-a-new-standard-for-digital-accessibility-in-finance-in-india\u002F",[91],"SEBI 2025 數位無障礙（Deque）",[430,918,919],{"id":919},"德國",[10,921,922],{},[87,923,926],{"href":924,"rel":925,"target":92,"title":93},"https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F",[91],"BGG \u002F BITV 2.0 \u002F BFSG",[10,928,929],{},[87,930,933],{"href":931,"rel":932,"target":92,"title":93},"https:\u002F\u002Fms.sachsen-anhalt.de\u002Fthemen\u002Fmenschen-mit-behinderungen\u002Faktuelles\u002Fmarktueberwachungsstelle-der-laender-fuer-die-barrierefreiheit-von-produkten-und-dienstleistungen",[91],"各邦市場監督機關（Magdeburg）",[430,935,936],{"id":936},"法國",[10,938,939],{},[87,940,943],{"href":941,"rel":942,"target":92,"title":93},"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Floda\u002Farticle_lc\u002FLEGIARTI000037388867\u002F",[91],"Loi 2005-102, art. 47",[10,945,946],{},[87,947,950],{"href":948,"rel":949,"target":92,"title":93},"https:\u002F\u002Faccessibilite.numerique.gouv.fr\u002F",[91],"RGAA 4.1",[10,952,953],{},[87,954,957],{"href":955,"rel":956,"target":92,"title":93},"https:\u002F\u002Fwww.arcom.fr\u002Fnous-connaitre\u002Fnos-missions\u002Fgarantir-le-pluralisme-et-la-cohesion-sociale\u002Fles-droits-des-personnes-handicapees\u002Faccessibilite-des-sites-et-des-services-numeriques",[91],"ARCOM 無障礙監管",[430,959,960],{"id":960},"西班牙",[10,962,963],{},[87,964,967],{"href":965,"rel":966,"target":92,"title":93},"https:\u002F\u002Fwww.boe.es\u002Fbuscar\u002Fact.php?id=BOE-A-2018-12699",[91],"RD 1112\u002F2018",[10,969,970],{},[87,971,974],{"href":972,"rel":973,"target":92,"title":93},"https:\u002F\u002Fwww.boe.es\u002Fbuscar\u002Fact.php?id=BOE-A-2023-11022",[91],"RDL 11\u002F2023",[430,976,977],{"id":977},"葡萄牙",[10,979,980],{},[87,981,984],{"href":982,"rel":983,"target":92,"title":93},"https:\u002F\u002Fwww.acessibilidade.gov.pt\u002Fmudanca\u002Fdl-n-o-83-2018\u002F",[91],"DL 83\u002F2018",[10,986,987],{},[87,988,991],{"href":989,"rel":990,"target":92,"title":93},"https:\u002F\u002Fwww.acessibilidade.gov.pt\u002F",[91],"DL 82\u002F2022（EAA 轉化）AMA \u002F acessibilidade.gov.pt",[430,993,994],{"id":994},"奧地利",[10,996,997],{},[87,998,1001],{"href":999,"rel":1000,"target":92,"title":93},"https:\u002F\u002Fwww.ris.bka.gv.at\u002FGeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=20010727",[91],"WZG（RIS）",[10,1003,1004],{},[87,1005,1008],{"href":1006,"rel":1007,"target":92,"title":93},"https:\u002F\u002Fffg.at\u002Fbarrierefreiheit\u002FWZG-Anwendbarkeit",[91],"FFG 監測暨申訴處",[10,1010,1011],{},[87,1012,1015],{"href":1013,"rel":1014,"target":92,"title":93},"https:\u002F\u002Fwww.digitalbarrierefrei.at\u002Fen\u002F",[91],"Digital Barrierefrei",[430,1017,1018],{"id":1018},"比利時",[10,1020,1021],{},[87,1022,1025],{"href":1023,"rel":1024,"target":92,"title":93},"https:\u002F\u002Fbosa.belgium.be\u002Ffr\u002Fregulations\u002Floi-du-19-juillet-2018-accessibilite",[91],"Loi du 19 juillet 2018（BOSA）",[10,1027,1028],{},[87,1029,1032],{"href":1030,"rel":1031,"target":92,"title":93},"https:\u002F\u002Faccessibility.belgium.be\u002Ffr\u002Fmissions-et-plaintes",[91],"Belgian Web Accessibility（監測與申訴）",[430,1034,1035],{"id":1035},"荷蘭",[10,1037,1038],{},[87,1039,1042],{"href":1040,"rel":1041,"target":92,"title":93},"https:\u002F\u002Fwww.digitoegankelijk.nl\u002Fwetgeving\u002Fbeleid-nederland-en-europa",[91],"DigiToegankelijk（政策）",[10,1044,1045],{},[87,1046,1049],{"href":1047,"rel":1048,"target":92,"title":93},"https:\u002F\u002Fwww.levelaccess.com\u002Fwp-content\u002Fuploads\u002F2025\u002F06\u002FNetherlands-Digital-Accessibility-Laws.pdf",[91],"Netherlands Digital Accessibility Laws（Level Access）",[430,1051,1052],{"id":1052},"瑞士",[10,1054,1055],{},[87,1056,1059],{"href":1057,"rel":1058,"target":92,"title":93},"https:\u002F\u002Fwww.bit.admin.ch\u002Fen\u002Faccessibility-in-the-federal-administration",[91],"BehiG \u002F 聯邦行政無障礙（bit.admin.ch）",[10,1061,1062],{},[87,1063,1066],{"href":1064,"rel":1065,"target":92,"title":93},"https:\u002F\u002Fhaerting.ch\u002Fen\u002Finsights\u002Faccessible-websites-and-apps-new-obligations-under-the-draft-of-the-new-swiss-disability-discrimination-act-behig\u002F",[91],"BehiG 修法草案（2027，Härting）",[10,1068,15],{},[10,1070,1071],{},"本文資料整理截至 2026 年 6 月，可能有誤，歡迎指正。下一篇將分析各國標章概況。",{"title":177,"searchDepth":178,"depth":178,"links":1073},[1074,1075,1076,1077,1078],{"id":395,"depth":181,"text":395},{"id":410,"depth":181,"text":411},{"id":609,"depth":181,"text":610},{"id":696,"depth":181,"text":697},{"id":736,"depth":181,"text":737},"2026-06-09","最近我正在幫我的 Accesserty Signal 擴充標章功能。原本只是單純想收集各國的標章、法規與檢測項目，但收集到一半時發現——應該要先理解各國的「政策」才行",{},"\u002Fzh\u002Fblog\u002Fa11y-world-rules",{"title":390,"description":1080},"zh\u002Fblog\u002Fa11y-world-rules",[202,200,199,1086,1087,1088,1089,1090],"數位無障礙","數位平權","包容性設計","無障礙網頁","無障礙標章","LPSgY3yMi9vFk3XDwpdv33haPud_JkVVmM2Z2_Vxf1Y",{"id":1093,"title":1094,"body":1095,"date":1202,"description":1203,"draft":189,"extension":190,"meta":1204,"navigation":192,"ogImage":193,"path":1205,"seo":1206,"stem":1207,"tags":1208,"translationKey":193,"updatedAt":193,"__hash__":1211},"blog_zh\u002Fzh\u002Fblog\u002Faccessibility-testing.md","無障礙測試不該被職業分工綁住",{"type":7,"value":1096,"toc":1200},[1097,1100,1114,1117,1120,1131,1134,1137,1140,1143,1146,1160,1163,1166,1169,1177,1194,1197],[10,1098,1099],{},"這幾年，無障礙不再是少數專家的話題，以前談到網站無障礙，是法規、稽核、檢測報告，或是某個專案最後才會被打開的 checklist，但現在不一樣了：",[42,1101,1102,1105,1108,1111],{},[45,1103,1104],{},"設計師開始在 Figma 裡檢查文字和背景的對比",[45,1106,1107],{},"前端工程師開始知道要跑 Lighthouse、axe、看 DevTools 裡的 Accessibility panel",[45,1109,1110],{},"QA 開始在測試案例裡加入鍵盤操作",[45,1112,1113],{},"產品經理也開始意識到，操作困難不只是「體驗不好」，也代表一群使用者被排除在外。",[10,1115,1116],{},"這些都是很重要的進步，大家也開始重視無障礙，所以我認為是時候要從「推廣無障礙」，變成「無障礙能隨時、隨地、容易的檢測」。",[10,1118,1119],{},"現在的工具和流程，仍然很容易讓無障礙被切成不同職能的責任，例如：",[42,1121,1122,1125,1128],{},[45,1123,1124],{},"設計師使用 Figma 負責看對比",[45,1126,1127],{},"工程師使用 Devtool 負責看程式碼",[45,1129,1130],{},"QA 負責走測試鍵盤操作",[10,1132,1133],{},"這樣的分工看似合理，但可能會造成每個職能只注重自己的範圍，將某些測試只交給該職業測試，我認為現況是不理想的，無障礙測試應該是團隊成員可以隨時、隨地、容易且跨職能地檢查，無障礙測試不應該被工具與職業綁住。",[10,1135,1136],{},"舉個小例子，PM 如果要檢查顏色對比，要不就是學會 Figma，要不就是學會 Devtool，如果遇到沒辦法測試對比的情況，還要另外自己使用線上工具輸入色碼對比前後色，要檢查的門檻還是太高。",[10,1138,1139],{},"不同職能也應該要了解其他職能測試的項目，因為最基本的工夫就是大家都要擁有「無障礙意識」，在任何階段都要遵循此原則。",[10,1141,1142],{},"但我不是要模糊專業，也不是要每個人都取代專家，完整的無障礙稽核仍然需要專業，輔助科技測試、人工判斷、規範理解、複雜互動模式，這些都不是一鍵工具可以完全處理的，但初步檢查不應該困難到只有少數人能開始。",[10,1144,1145],{},"很多問題其實不用等到正式稽核才看得見，有些問題，只要有人願意多按一下，就能提早發現：",[42,1147,1148,1151,1154,1157],{},[45,1149,1150],{},"按一下，跑一次掃描",[45,1152,1153],{},"按一下，切換一種視覺情境",[45,1155,1156],{},"按一下，看看 PDF 有沒有基本結構訊號",[45,1158,1159],{},"按一下，確認目前頁面是不是有明顯的無障礙風險。",[10,1161,1162],{},"這些動作看起來很小，但能提早發現問題的時間點。",[10,1164,1165],{},"不需要每個人都背熟 WCAG，也不需要每個人都變成無障礙顧問，而是當有人覺得「這裡可能有問題」的時候，不會因為自己不是那個職業而停下來。",[10,1167,1168],{},"他可以先看一下、測一下、確認一下，把問題變得具體，這樣就夠重要了！",[10,1170,1171,1172,1176],{},"這也是我看待 Accesserty DevCheck",[87,1173,403],{"href":1174,"rel":1175,"target":92,"title":93},"https:\u002F\u002Faccesserty.com\u002Fdevcheck\u002F",[91]," 的方式，雖然目前可以檢查的東西還很粗淺，但所有職能都可以使用 Chrome 擴充程式檢查跨職能的測試，例如：",[42,1178,1179,1182,1185,1188,1191],{},[45,1180,1181],{},"你可以做設計師要做的色盲測試",[45,1183,1184],{},"你可以做 UX 設計師要做的易用性與情境觀察",[45,1186,1187],{},"你可以做工程師會做的頁面結構與無障礙規則掃描",[45,1189,1190],{},"你可以檢查 PDF 結構",[45,1192,1193],{},"我希望未來的無障礙工具，能讓更多人跨過專業界線，不是把責任丟給所有人，而是讓所有人都有能力，在自己發現問題的那一刻，動手確認。",[10,1195,1196],{},"無障礙測試如果只能被少數人執行，它就很容易積累壓力，最後就會慢慢被消磨殆盡，但如果可以在日常中啟動，它就有機會成為一種文化，不等到使用者受阻，才開始在意的文化，這通常也代表使用者已經在某個流程裡受挫、放棄，或被排除在外。",[10,1198,1199],{},"無障礙意識正在擴散，接下來，我們需要讓檢查能力也一起擴散，而且應該足夠簡單，簡單到任何人，在任何時間點，只要動動手指，就能測試。",{"title":177,"searchDepth":178,"depth":178,"links":1201},[],"2026-05-30","這幾年，無障礙不再是少數專家的話題，以前談到網站無障礙，是法規、稽核、檢測報告，或是某個專案最後才會被打開的 checklist，但現在不一樣了",{},"\u002Fzh\u002Fblog\u002Faccessibility-testing",{"title":1094,"description":1203},"zh\u002Fblog\u002Faccessibility-testing",[200,199,202,1086,1087,1088,1209,1210],"測試","檢測","mkEBNLoxlEY_zJhji5DxSwPdgipUimu8V7s9VR9TYDk",{"id":1213,"title":1214,"body":1215,"date":1245,"description":1219,"draft":189,"extension":190,"meta":1246,"navigation":192,"ogImage":193,"path":1247,"seo":1248,"stem":1249,"tags":1250,"translationKey":193,"updatedAt":193,"__hash__":1252},"blog_zh\u002Fzh\u002Fblog\u002F2026-forbes-accessibility.md","Forbes Accessibility 200",{"type":7,"value":1216,"toc":1243},[1217,1220,1223,1226,1229,1236],[10,1218,1219],{},"前幾天才知道 Forbes Accessibility 200 這個名單。",[10,1221,1222],{},"因為有點好奇，就往下多查了一些資料，順手做了一個擴充版，加上一些比較方便瀏覽和查找的資訊。",[10,1224,1225],{},"這不是官方資料集，也不是 Forbes 授權或背書的內容。只是我自己基於研究和參考目的整理的版本，主要是想讓這份名單更容易瀏覽、檢查和學習。",[10,1227,1228],{},"整理的過程中覺得很有趣的一點是：accessibility 其實出現在非常多不同領域。軟體、教育、交通\u002F移動、娛樂、金融、運動、政策、倡議、輔助科技，還有很多我以前沒有聽過的組織。",[10,1230,1231,1232],{},"放在這裡，給同樣好奇的人參考：",[87,1233,403],{"href":1234,"rel":1235,"target":92,"title":93},"https:\u002F\u002Fneil-lin.github.io\u002F2026-forbes-accessibility-200-list\u002F",[91],[10,1237,1238,1239],{},"Markdown 版本：",[87,1240,403],{"href":1241,"rel":1242,"target":92,"title":93},"https:\u002F\u002Fgithub.com\u002FNeil-Lin\u002F2026-forbes-accessibility-200-list\u002Fblob\u002Fmain\u002Foutput\u002Fforbes_accessibility_200.md",[91],{"title":177,"searchDepth":178,"depth":178,"links":1244},[],"2026-05-28",{},"\u002Fzh\u002Fblog\u002F2026-forbes-accessibility",{"title":1214,"description":1219},"zh\u002Fblog\u002F2026-forbes-accessibility",[202,200,1088,1251,1086,199],"ForbesAccessibility","3RtMk-D7-LHaqm7C_NExBcuxjweKzqnlLCHdM3SB39M",{"id":1254,"title":1255,"body":1256,"date":1399,"description":1400,"draft":189,"extension":190,"meta":1401,"navigation":192,"ogImage":193,"path":1402,"seo":1403,"stem":1404,"tags":1405,"translationKey":193,"updatedAt":193,"__hash__":1410},"blog_zh\u002Fzh\u002Fblog\u002Fa11y-tree-for-who.md","無障礙網頁的服務對象在改變了嗎？",{"type":7,"value":1257,"toc":1393},[1258,1271,1274,1278,1285,1293,1313,1316,1320,1323,1326,1329,1337,1340,1344,1353,1356,1359,1362,1365,1368,1371,1374,1377,1380,1384,1387,1390],[10,1259,1260,1261,1265,1266,1270],{},"前不久，Anthropic 工程師 Thariq",[87,1262,403],{"href":1263,"rel":1264,"target":92,"title":93},"https:\u002F\u002Fx.com\u002Ftrq212\u002Fstatus\u002F2052809885763747935",[91]," 在「人類已不再手改程式」的前提下，提到 HTML 比 Markdown 更適合跟 AI ",[87,1267,403],{"href":1268,"rel":1269,"target":92,"title":93},"https:\u002F\u002Fwww.bnext.com.tw\u002Farticle\u002F90893\u002Fwhen-humans-stop-editing-ai-outputs-why-anthropic-engineers-are-switching-from-markdown-to-html",[91]," 互動這件事。",[10,1272,1273],{},"我就在想：如果 AI 讀取的是優質的無障礙網頁，它是不是會更容易「理解」這個網站，進而和人類互動，產出更好的結果？",[17,1275,1277],{"id":1276},"先簡單看一下無障礙網頁做得好有什麼優點","先簡單看一下，無障礙網頁做得好有什麼優點？",[10,1279,1280,1281,1284],{},"這裡先引用臺灣「無障礙網路空間服務網」",[87,1282,403],{"href":784,"rel":1283,"target":92,"title":93},[91]," 整理的幾個重點：",[104,1286,1287],{},[10,1288,1289],{},[109,1290],{"alt":1291,"src":1292},"網站導入無障礙設計 5 大好處","\u002Fimages\u002Fblog\u002F48.webp",[22,1294,1295],{},[10,1296,1297,1298,1300,1301,1303,1304,1306,1307,1309,1310,1312],{},"導入無障礙的五大好處",[28,1299],{},"\n法規遵循：符合國內法規要求，保障身心障礙者權益，是我們的責任與義務。",[28,1302],{},"\n擴大服務對象：觸及約 120 萬身心障礙者及高齡族群，提升服務涵蓋率。",[28,1305],{},"\n組織社會責任(CSR)：展現對社會共融的承諾，提升組織形象與公眾信任。",[28,1308],{},"\n提升使用者體驗：良好的無障礙設計能讓網站更易用，提升所有使用者的滿意度。",[28,1311],{},"\nSEO 優化：結構清晰的無障礙網站對搜尋引擎更友善，有助於提升排名。",[10,1314,1315],{},"第 1 點是基本保障，第 2、3、4 點主要都是在談「對人的服務」。但第 5 點，現在應該要變成「AXO優化」。",[17,1317,1319],{"id":1318},"無障礙網頁如何讓-ai-更好跟網站互動","無障礙網頁如何讓 AI 更好跟網站互動？",[10,1321,1322],{},"AI Agent 操作網站時，最怕的其實不是畫面醜，而是它不知道：「這是什麼？」「這能不能點？」「點了之後會發生什麼事？」",[10,1324,1325],{},"以前我們幫一個 input 加上正確的 label，是為了讓螢幕閱讀器知道這個欄位是什麼。但現在，AI Agent 也可能靠這個 label 判斷：「這是不是搜尋欄？」「這個欄位要填姓名、Email，還是地址？」",[10,1327,1328],{},"很多東西，人類看一眼就知道是什麼，但 AI 不一定知道。",[10,1330,1331,1332,1336],{},"如果無障礙做得好，AI Agent 就能透過 Accessibility Tree 拿到更乾淨、更精簡，也更接近實際操作需求的資訊。LogRocket Blog",[87,1333,403],{"href":1334,"rel":1335,"target":92,"title":93},"https:\u002F\u002Fblog.logrocket.com\u002Fexploring-agent-browser-ai-agents-web\u002F",[91]," 也提到，這會讓 AI Agent 不必在一大堆 DOM 雜訊裡面硬猜。",[10,1338,1339],{},"以訂票為例，網站 A 還在讓 AI 解析一堆不清楚的元素時，網站 B 可能已經讓 AI 順利完成訂票了。對使用者來說，B 比較快；對 AI 服務商來說，B 也比較省資源。",[17,1341,1343],{"id":1342},"這會帶來什麼改變","這會帶來什麼改變？",[10,1345,1346,1347,1352],{},"No Hacks 在「",[87,1348,1351],{"href":1349,"rel":1350,"target":92,"title":93},"https:\u002F\u002Fnohacks.co\u002Fblog\u002Fhow-ai-agents-see-your-website",[91],"HOW AI AGENTS SEE YOUR WEBSITE (AND HOW TO BUILD FOR THEM)」",":一文中提到：",[10,1354,1355],{},"Last year, before the European Accessibility Act took effect, I half-joked that it would be ironic if the thing that finally got people to care about accessibility was AI agents, not the people accessibility was designed for. That's no longer a joke.",[10,1357,1358],{},"這句話其實很有意思，因為它點出了一個現象：無障礙技術已經不只是服務人類，也開始幫助所有「非視覺型使用者」理解網站。",[10,1360,1361],{},"也因為如此，最大的改變，應該是會有更多企業開始重視無障礙。",[10,1363,1364],{},"只是誘因可能會從「符合法規」變成「商業利益」。",[10,1366,1367],{},"你沒做，可能就接不到那些透過 AI Agent 來完成任務的使用者，也就少了一些原本可能成交的機會。因為比起 SEO，AI Agent 更有機會直接帶來收益。",[10,1369,1370],{},"SEO 比較像是把人帶到目的地，接下來還要靠網站內容、流程和說服力慢慢轉換，但 AI Agent 可能直接幫使用者把事情做完。",[10,1372,1373],{},"這也會帶出第二個影響：網站分析可能會產生巨大改變，當 AI Agent 的使用比例越來越高，以前我們熟悉的「點擊率」、「停留時間」、「轉換率」，可能都需要重新定義。",[10,1375,1376],{},"這種誘因的改變，理論上會形成一種良性競爭，也可能讓整體無障礙網頁環境變好。",[10,1378,1379],{},"畢竟第一步，還是要先把符合無障礙規範的網站數量拉起來。",[17,1381,1383],{"id":1382},"無障礙網頁的服務對象真的改變了嗎","無障礙網頁的服務對象真的改變了嗎？",[10,1385,1386],{},"我認為沒有改變，而是擴大範圍，就像當年 SEO 那樣。",[10,1388,1389],{},"雖然現在無障礙的討論開始被 AI 帶起一波新的聲量，但最後還是會回到人類身上，因為一個網站不只是程式碼，也不只是 accessibility tree，它還包含流程安排、內容理解、情緒感受、信任建立，以及使用者在每一步操作中的真實體驗。",[10,1391,1392],{},"所以 AI 雖然會讓更多人重新重視無障礙，但無障礙真正的核心，還是在於讓人可以更順利、更容易地使用網站。",{"title":177,"searchDepth":178,"depth":178,"links":1394},[1395,1396,1397,1398],{"id":1276,"depth":181,"text":1277},{"id":1318,"depth":181,"text":1319},{"id":1342,"depth":181,"text":1343},{"id":1382,"depth":181,"text":1383},"2026-05-13","前不久，Anthropic 工程師 Thariq 在「人類已不再手改程式」的前提下，提到 HTML 比 Markdown 更適合跟 AI 互動這件事。",{},"\u002Fzh\u002Fblog\u002Fa11y-tree-for-who",{"title":1255,"description":1400},"zh\u002Fblog\u002Fa11y-tree-for-who",[1406,1407,1089,202,200,1408,1409,1086,199,1087],"Anthropic","社會責任","AIAgent","LLM","LczuDA3MtfGVaaYPESpSEx89KJEYwK1_PC97gJorU_Y",{"id":1412,"title":1413,"body":1414,"date":1477,"description":1426,"draft":189,"extension":190,"meta":1478,"navigation":192,"ogImage":193,"path":1479,"seo":1480,"stem":1481,"tags":1482,"translationKey":193,"updatedAt":193,"__hash__":1485},"blog_zh\u002Fzh\u002Fblog\u002Fai-sugar.md","裹著 AI 糖衣的無障礙網頁服務 ?",{"type":7,"value":1415,"toc":1472},[1416,1424,1427,1431,1434,1437,1440,1448,1451,1454,1457,1460,1463,1466,1469],[104,1417,1418],{},[10,1419,1420],{},[109,1421],{"alt":1422,"src":1423},"AI 無障礙不是萬靈丹","\u002Fimages\u002Fblog\u002F47.png",[10,1425,1426],{},"就在幾天前，我使用的 Gemini 自動排程幫我抓的每日無障礙消息推送一則文章給我，該則文章裡說明他們的核心技術透過 AI 可以在網頁前端渲染時加上無障礙網頁技術以及提供個人化調整網頁的快捷設定。",[17,1428,1430],{"id":1429},"由興奮急轉直下成極度失望甚至憤怒","由興奮急轉直下成極度失望，甚至憤怒",[10,1432,1433],{},"起先，我看到「透過 AI 可以在網頁渲染時加上無障礙網頁技術」我非常興奮，是不是有什麼新的技術被發明應用在實務上，但仔細了解後我徹底失望了，原來 Gemini 收集的那邊文章實際上是一篇「業配廣告」。",[10,1435,1436],{},"事情是這樣的，該則文章提到已經被證實無法在無障礙網頁領域能幫上多少忙的 Widget，接著述說他們的技術比 Widget 形式的好在哪裡，但事實是，他們只是比那些 Widget 多做了在網頁渲染時加上無障礙網頁的無障礙 DOM 補充，因為他們的「提供個人化調整網頁的快捷設定」這部分基本就是跟其他服務沒兩樣的 Widget（也許提供的工具不同，但本質一樣）。",[10,1438,1439],{},"為什麼我會知道，因為我實際去該技術的官方網站平台以及他們合作的電商，我直接打開我所有機器檢測工具實際測試一遍，最後再根據我自行人工檢核，發現如下問題：",[10,1441,1442,1443,1447],{},"宣稱 AI 會根據圖片進行 image  alt 描述，但實際上只是一個簡單的場景敘述，程度大概是「一個女生穿著一件洋裝」，這其實並沒有太多幫助\n「No ARIA is better than Bad ARIA」，這個技術幾乎把能加的aria都加上去，完全不顧",[1444,1445,1446],"code",{},"\u003Cbutton>","早就有包含文字描述了\nHeadings 完全沒有照順序使用\n顏色對比度仍舊沒有達到 WCAG 2.2 AA等級(更不用說之後的 WCAG 3.0 版本的色彩標準)\nWidget 跟其他相關的產品原則上也是一樣的道理，就不多說了。\n也就是說，光是最常在網路上被看見的「常見無障礙網頁問題」都沒有修復好，最低標準的 Lighthouse 和 axe-core 也都沒通過，也不用討論到人工檢核階段。",[10,1449,1450],{},"官網的問題還好，轉去他們聲稱有專門訓練過的領域看看他們真實用戶網站的表現，結果更吐血，有時候連基本的鍵盤聚焦也完全沒有出現，在這個時刻我完全感到被詐騙，我是真正的生氣了。",[17,1452,1453],{"id":1453},"從憤怒轉向感激",[10,1455,1456],{},"至少那家廠商嘗試了新的做法，自古以來，沒有失敗哪來的後人成功。",[10,1458,1459],{},"抱持著這樣的心情，我感謝他們以具體行動落實了他們的想法，而且推出真實產品用在真實客戶上，雖然有某種程度上的效果但也隨之帶來更多問題，不過至少他們跨出新的一步，也許將來會越來越好。",[10,1461,1462],{},"畢竟，人類是很想偷懶而且要做到產出更多，所以創造了各種偉大發明。",[17,1464,1465],{"id":1465},"總結",[10,1467,1468],{},"AI 不是萬能，沒有訓練好的 AI 更是萬萬不能，在這個糖衣一下，我仍然建議先做過完整測試在推出產品，或還是使用在開發程式的部分，也就是一切網頁的源頭，甚至最好是在設計階段就已經規劃好大致上的規範。",[10,1470,1471],{},"我曾經實驗過在網站上一樣掛個 Widget 但是內容不是一堆設定按鈕，而是一個 AI 對話視窗 ，透過對話就可以改變網頁的各種呈現，這個實驗也成功過，但終歸耗費成本還是巨大，而且使用者變成會聚焦在對話視窗上，延伸出更多問題。",{"title":177,"searchDepth":178,"depth":178,"links":1473},[1474,1475,1476],{"id":1429,"depth":181,"text":1430},{"id":1453,"depth":181,"text":1453},{"id":1465,"depth":181,"text":1465},"2026-05-08",{},"\u002Fzh\u002Fblog\u002Fai-sugar",{"title":1413,"description":1426},"zh\u002Fblog\u002Fai-sugar",[199,1483,1086,1087,200,202,1484],"AI 工具","Widget","-KWdzrXS_HV6zh0ObN_ifufpx_FWF_j-HAw3qYtmdi8",{"id":1487,"title":1488,"body":1489,"date":1523,"description":1524,"draft":189,"extension":190,"meta":1525,"navigation":192,"ogImage":193,"path":1526,"seo":1527,"stem":1528,"tags":1529,"translationKey":193,"updatedAt":193,"__hash__":1530},"blog_zh\u002Fzh\u002Fblog\u002F2026-04-a11y-opinion.md","2026 年 4 月 關於無障礙網頁發展的心得",{"type":7,"value":1490,"toc":1521},[1491,1494,1502,1505,1513,1518],[10,1492,1493],{},"看著目前程式工具在 AI 方面的發展、數位無障礙的各種方向、各種職缺也有所增長、各種無障礙網頁規範 Agent Skills 和 AI 檢測也開始蓬勃發展，我雖然有從中受益，但我感受到更大的迷惘：AI 要到什麼程度才能有巨大的能力幫助數位無障礙的普遍落實，或者應該問：我要怎麼讓 AI 能做到這件事。",[10,1495,1496,1497,1501],{},"我曾經打造的： ",[87,1498,174],{"href":1499,"rel":1500,"target":92,"title":93},"https:\u002F\u002Faccesserty.com",[91],"，這是一個 side project ，生態系構想是企圖從使用者接觸網頁開始直達企業製作、檢查、統計端，中間各種過程都能讓企業從中獲利，進而讓他們能全面擁抱無障礙。不過中間的各種流程目前還是要耗費較多成本，持續性維護更是一種挑戰， AI 目前仍尚未能容易的解決這所有的過程，尤其是在人工檢測的部分幫助更是有限，我感到有一點沮喪，可能我的構想流程是基於現在普遍開發流程上思考的解法，屬於「降成本」的思考方式，可能要來想個破壞式創新方法才能解開「AI很好，但幫助有限」的困局。",[10,1503,1504],{},"另外還有一個現象，我所在的環境近年雖然設計師和社群網紅開始有意識到數位無障礙並且有在推廣，但普遍還停留在解決常見問題，對於整體無障礙知識認識還不夠深，所以大環境還是在「能用工具通過規範就好」階段，並沒有任何巨大變化。這意味著企業還是在「得過且過」的階段，因為還沒辦法在落實無障礙的過程中帶來明顯利益，現在較多都是「被罰錢的恐懼」或是為了 ESG 驅動去做。",[10,1506,1507,1512],{},[87,1508,1511],{"href":1509,"rel":1510,"target":92,"title":93},"https:\u002F\u002Fwww.a11yjobs.com\u002F",[91],"a11yjobs"," 這篇文章 中有一段話能跟我的想法不謀而合：",[22,1514,1515],{},[10,1516,1517],{},"\"Much of the hiring activity is concentrated in a narrow band of roles, driven by compliance pressures rather than genuine organizational buy-in. Companies are hiring because they have to — not always because they want to build lasting accessibility practices.\"",[10,1519,1520],{},"一樣都是做無障礙，但出發點不同會有什麼樣不同的結果，這將會成為我下一個階段研究的方向。",{"title":177,"searchDepth":178,"depth":178,"links":1522},[],"2026-04-30","看著目前程式工具在 AI 方面的發展、數位無障礙的各種方向、各種職缺也有所增長、各種無障礙網頁規範 Agent Skills 和 AI 檢測也開始蓬勃發展，我雖然有從中受益，但我感受到更大的迷惘",{},"\u002Fzh\u002Fblog\u002F2026-04-a11y-opinion",{"title":1488,"description":1524},"zh\u002Fblog\u002F2026-04-a11y-opinion",[1089,1086,199,1087,200,202,1511],"TCqrlHRF40nKugrMK44HCU77uz5pcGf0gcancIzS-18",{"id":1532,"title":1533,"body":1534,"date":2418,"description":2419,"draft":189,"extension":190,"meta":2420,"navigation":192,"ogImage":193,"path":2421,"seo":2422,"stem":2423,"tags":2424,"translationKey":193,"updatedAt":193,"__hash__":2442},"blog_zh\u002Fzh\u002Fblog\u002Fvibe-coding-product.md","用普通 Prompt 來 Vibe 一個解決自己工作痛點的產品",{"type":7,"value":1535,"toc":2412},[1536,1541,1544,1547,1558,1561,1593,1596,1622,1625,1628,1631,1634,1637,1660,1663,1667,1670,1673,1676,1679,1682,1685,1699,1702,1705,1708,1711,1714,1718,1726,1729,1732,1743,1746,1749,1753,1756,1759,1762,1765,1768,1771,1774,1777,1780,1783,1786,1789,1792,1826,1829,1832,1836,1839,1842,1845,1848,1859,1862,1870,1878,1881,1884,1887,1890,1894,1925,1928,1932,1935,1938,1942,1945,1986,1989,1993,1996,1999,2003,2020,2023,2026,2029,2046,2049,2052,2056,2059,2062,2076,2080,2083,2086,2089,2131,2134,2137,2140,2143,2146,2150,2153,2156,2182,2185,2205,2208,2211,2214,2217,2220,2223,2228,2231,2242,2245,2259,2262,2273,2276,2279,2282,2285,2289,2292,2294,2298,2301,2304,2308,2311,2314,2317,2321,2324,2327,2330,2333,2336,2350,2353,2356,2359,2362,2365,2368,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2396,2399,2402,2405],[22,1537,1538],{},[10,1539,1540],{},"話說在前頭，在撰寫文章時，我已經 Vibe 產品到一個進度了，所以遇到的問題和順序有些已經遺忘，只能盡量回憶。",[17,1542,1543],{"id":1543},"起源",[10,1545,1546],{},"今年我為團隊的某位成員定下了一個目標，主要是解決目前公司遇到的規格書協作問題，大致情境如下：",[42,1548,1549,1552,1555],{},[45,1550,1551],{},"公司主要業務是接政府專案，一開始沒有 SA，都是 PM 自己寫規格",[45,1553,1554],{},"後經招募 SA 後，但因為沒有招募很多人，所以變成較爲重要或需要特別深入學習領域知識的專案才會請 SA 撰寫 Spec",[45,1556,1557],{},"所以 PM 跟 SA 都必須寫 Spec",[10,1559,1560],{},"結果導致以下問題：",[42,1562,1563,1566,1569,1572,1575,1578,1581,1584,1587,1590],{},[45,1564,1565],{},"專案 PM 和 SA 都要寫 Spec，使用的工具、寫法都不一樣。",[45,1567,1568],{},"政府專案因為最後會需要繳交系統規格書，會需要輸出 Word 檔，所以如果不是直接使用 Word 編輯，最後整合時還需要複製貼上到 Word。",[45,1570,1571],{},"執行團隊會有很多文件需要一起看，例如政府的初始需求規格書、公司服務建議書、評選簡報、會議記錄、API文件、UI 設計稿、公司工程師的技術文件...等，",[45,1573,1574],{},"導致觀看文件時會需要在不同瀏覽器頁籤或是軟體之間一直切換。",[45,1576,1577],{},"因為文件很多，存放的地方可能也不一樣，例如有些存 Nas、有些存雲端服務。",[45,1579,1580],{},"SA 之間遇到較大型專案會分工，所以有多人協作需求，如果是用Word 那就會需要在意版控問題",[45,1582,1583],{},"當 Spec 異動時，PM 或 SA 為了工程師不要遺漏最新更新，使用的工具可能還需要特別標明修改時間以及保留修改前的描述，造成版面極度混亂。",[45,1585,1586],{},"文件之間有關聯的地方，使用的工具無法很好的建立雙邊的關聯，即使建立了，如果文件內容異動，也可能消失或是忘了去維護，造成文件在後續擴展的開發案時無法高效利用已存在的 Spec。",[45,1588,1589],{},"另外有時候還需要給外部人士觀看，如果是檔案，還要很小心的給對方正確的版本。",[45,1591,1592],{},"有時候網路環境問題，就沒辦法工作了",[10,1594,1595],{},"濃縮一下真正需求：",[42,1597,1598,1601,1604,1607,1610,1613,1616,1619],{},[45,1599,1600],{},"文件希望像 Notion 那種編輯器",[45,1602,1603],{},"工具與寫法統一",[45,1605,1606],{},"文件存放位置統一",[45,1608,1609],{},"觀看文件時可同時看到其他關聯的文件或檔案",[45,1611,1612],{},"可多人協作、可看到對方在編輯什麼",[45,1614,1615],{},"歷史異動",[45,1617,1618],{},"可分享給外部的人看文件",[45,1620,1621],{},"離線也要可以編輯",[10,1623,1624],{},"在我期待著成員會如何解決這個問題的同時，一直有一個點子縈繞在我心頭：",[10,1626,1627],{},"今年 LLM 比 2025 的可靠許多，如果「一個只懂 Html\u002FCSS人」建立了這樣的產品，需要 Vibe 多久？ Vibe時會遇到什麼問題？ Vibe時會需要懂什麼知識？",[10,1629,1630],{},"我一向是有想法就開始規劃與實作了（雖然到最後都是自 High 居多的產品），但我很享受這個過程，可以獲得很多知識與成就感。",[10,1632,1633],{},"我非常想知道在我不碰程式的情況下，我能為這個產品做的極限在哪裡。",[10,1635,1636],{},"除了上述需求外，我也很想要一些自己的需求、新功能和順手實驗：",[42,1638,1639,1642,1645,1648,1651,1654,1657],{},[45,1640,1641],{},"SA 初始範本建立",[45,1643,1644],{},"多國語言",[45,1646,1647],{},"SEO",[45,1649,1650],{},"WCAG 2.2 AA級",[45,1652,1653],{},"Word、PDF、Markdown 以及 Office 系列匯出",[45,1655,1656],{},"嘗試內建 AI 助手，讓有 API Key 的人可以使用",[45,1658,1659],{},"Spec 完成後，可以順便產出 QA 測試案例",[10,1661,1662],{},"還沒開始我就已經非常期待這個產品完成的那天！",[17,1664,1666],{"id":1665},"定位llm使用方式規則與產品定位","定位、LLM使用方式規則與產品定位",[430,1668,1669],{"id":1669},"關於我",[10,1671,1672],{},"我是一個舊時代的「前端設計師」，我入行網頁設計領域是 2013，大概是 iPhone5 發布的時候，那時有個很熱門的討論，就是「設計師應不應該學寫程式」。",[10,1674,1675],{},"我當初的立場是需要學，因為不僅能了解程式真正運作的過程，還能跟工程師溝通無礙、自行掌握 UI，甚至未來還有轉職前端工程師的選項，所以我專精於 CSS，然後 javascript 的部分只學到會使用前端框架切版、版控 flow 概念、會安裝第三方套件、弄個假資料就差不多了。",[10,1677,1678],{},"但在這次的 side project，我給自己的背景與規則是：「有基本網頁知識背景，不要介入程式碼的撰寫」，能動的只有兩個：文案和 User Prompt，也就是不用 Skills、MCP之類的設定，嘗試看看單純這樣能做到什麼程度。",[10,1680,1681],{},"會有這個定位是因為，以前我很想做的一些事情，要完成都需要麻煩到前端工程師和後端工程師，所以很多 side project 都只有做到切版程度就沒再繼續下去，覺得很可惜，或是應該說，覺得無能為力、失落。",[10,1683,1684],{},"再來講講工具，因為我也很好奇 LLM 實際上寫的程式碼會是怎麼樣子，以及他的運作過程，所以：",[42,1686,1687,1690,1693,1696],{},[45,1688,1689],{},"Nuxt 當作前端框架，看看 LLM 在不指定細節下，會怎麼配置。",[45,1691,1692],{},"使用 Antigravity ，來下需求相關的 User Prompt ，觀察思考過程。",[45,1694,1695],{},"跟程式碼和產品無關的提問，我會回歸到網頁版的 LLM 詢問，例如什麼是 supabase 這種問題。",[45,1697,1698],{},"購買 Google AI Pro ，網頁版 Gemini 跟 Antigravity 都可以使用這樣比較方便\n（但因為4月實作時遭遇了Gemini連線問題讓我非常不爽，後期改用 Claude 使用）",[430,1700,1701],{"id":1701},"產品定位",[10,1703,1704],{},"在「起源」篇章，我的需求都集中在撰寫規格書這件事，但其實可以再更廣大的延伸成文件類都可以。因為開發時，要撰寫的文件也是很多：測試計劃、測試案例、規格、API、會議記錄...等。",[10,1706,1707],{},"就從「文件」本身出發，探討「寫文件」、「看文件」和「管理文件」時都會發生什麼活動，最後目的是讓文件是一種「活著」的狀態，而不是專案結束就被遺棄、過往的規格書被雪藏，其中管理文件就只是有做出分類就好，不把重心放在這，而是著重在「寫」和「看」的場景，也可以說是為了「小型軟體開發團隊」做的產品，這樣就有很清晰的使用者受眾。",[10,1709,1710],{},"(不求能真的做出有小型軟體開發團隊願意付錢解決問題的產品，但至少能解決我自己遇到的問題。)",[17,1712,1713],{"id":1713},"實作開始",[430,1715,1717],{"id":1716},"最小需求編輯文件","最小需求：編輯文件",[10,1719,1720,1721,1725],{},"既然是看\u002F寫文件，編輯器就是最重要的，一開始就是先讓 LLM 決定要用什麼編輯器，當時 LLM 直接建議我使用 Tiptap",[87,1722,403],{"href":1723,"rel":1724,"target":92,"title":93},"https:\u002F\u002Ftiptap.dev\u002F",[91],"，因為我之前也有關注過 Tiptap，所以馬上就決定了，",[10,1727,1728],{},"於是我就讓 LLM 幫我建立一個文件編輯器，此時 LLM 建議我，需要有一個文件列表做為文件管理，當然是秒答應，因為我心思都放在文件編輯，完全忘了需要有文件列表，就放手讓 LLM 依照他的建議做，我心想反正就是個列表，我之後再回來改也無傷大雅。",[10,1730,1731],{},"最後這階段產出了：",[42,1733,1734,1737,1740],{},[45,1735,1736],{},"後台排版外觀與主選單",[45,1738,1739],{},"文件管理列表CRUD與儀表板統計頁面",[45,1741,1742],{},"文件標題、編輯區域、大綱區域、工具列區域出現",[10,1744,1745],{},"在這個最小需求的時候，我發現了使用 Antigravity 的非基本的 Model，token 都一下子就到達極限了，然後切回額度最多的 flash ，又跟之前的聊天記錄連接不到，所以我從這個最小需求之後，都只有使用gemini flash，因為其他 model 都一下子就結束了，這會導致程式寫到一半死掉，還要用 flash 接回來非常麻煩。",[10,1747,1748],{},"但這也導致我的程式碼，我一直覺得不滿意，就感覺充其量是拼拼湊湊那種感覺，\n但既然我選擇不干預程式碼只使用一般 PM 會使用 LLM 的模式，那就眼不見為淨了，幸好這個階段大部分是在規劃 UI，功能面就很單純套個 Tiptap 進去而已。",[430,1750,1752],{"id":1751},"第二需求分割視窗與雙向連結","第二需求：分割視窗與雙向連結",[10,1754,1755],{},"分割視窗算是我的需求中最重要的，因為包含了兩個核心功能：預覽外部文件以及預覽雙向錨點連結。",[10,1757,1758],{},"這兩個重點著重在解決以前「spec 在 google doc、API 文件在 google sheet、spec 提到的某個功能不知道在 API 文件的哪裡，還要開 word 檔看外部的需求規格書，還要去 Figma 看設計稿，還要開簡報看評選簡報」的情境",[10,1760,1761],{},"外部文件需要支援無限制的新增，其中新增的項目又分：\n上傳檔案和外部連結，常用檔案格式為 .doc、.md、.pdf、.pptx..等。",[10,1763,1764],{},"外部連結就又分為雲端分享的連結以及相關網站（相關網站只能另開視窗，因為 iframe 因為安全性基本不能跨網域）",[10,1766,1767],{},"雙向錨點連結的使用情境，是編寫 A 文件時，想要把某一個段落或甚至一句話，跟有關的 B, C 文件內的某個段落做相互跳轉的錨點，只要雙向有一方刪除錨點或是異動，這個錨點就會被刪除或是自動移動，以往在 google sheet 要做這件事只能認儲存格的id或是用外掛，而且格子內容異動後，還不能自動更新。",[10,1769,1770],{},"所以就形成了：左邊編輯器為主體，右邊各種外部資源或內部互連的列表，雖然也是像瀏覽器頁籤一樣，但在觀看文件時變成一種沒有中斷的感覺，撰寫文件者也可以隨時觀看資源，相當的方便",[10,1772,1773],{},"在執行這兩個核心功能時，不能一股腦把我所有想像的東西直接塞給 LLM，我的執行方式是先把分割視窗的按鈕和 UI 刻出來，先確定 UI 的大框架，再來就是先做雙向錨點連結，叫 LLM 在工具列中新增一個按鈕，點擊後開啟 Dialog ，可以選擇其他文件，選擇後再選擇文件的哪一行，最後在這兩個文件選擇的那一行最後加上一個標籤，標籤的名字是該行的簡短內容，並且用顏色區分哪個文件主動連結、哪個是被動連結的，這樣在分割視窗預覽時，我就可以顯示列表，以及被連結方的那一行實際內容的預覽，且之後可以擴充成視覺化，勾勒出文件之間的關係。",[10,1775,1776],{},"接著就是做外部連結，這裡很單純 CRUD 連結或檔案而已，但因為考量到之後可能會做單檔的分享開關，就也順便把 UI 給保留位置。",[10,1778,1779],{},"以上這些我當時是列點出來一步一步慢慢說給 LLM 聽，這邊很順利的沒有調整什麼就完全實現了。",[10,1781,1782],{},"順利上傳了，那就是要預覽，外部連結基本都是 iframe，內部連結要呈現當然也沒問題，有問題的是上傳檔案，因為要額外處理，pdf 還好沒遇到太多阻礙，.md 要加個原文和渲染後的樣子，但 office 系列 就難處理要用套件或是 LLM自己寫，跟 LLM 來回了好多次，然後因為還要處理另開視窗放大全螢幕預覽，所以還要多做單獨預覽的一個頁面，供之後類似的情境發生可以使用。",[10,1784,1785],{},"不過有一件事值得一題，我在這裡碰到了奇怪的問題，",[10,1787,1788],{},"就是當我要另開視窗看檔案時，我有用個預覽的模式，結果有一次改完發現檔案都不會正常顯示內容了，內容都變成回首頁，",[10,1790,1791],{},"最後 LLM 修正原因記錄如下：",[42,1793,1794,1800,1811,1814,1817,1820,1823],{},[45,1795,1796,1797,1799],{},"為什麼網址會被「魔改成」首頁？",[28,1798],{},"\n首先，聽到「分割視窗正常顯示了」，這代表我們剛剛修復的 API 和權限機制完全成功了，Cloudflare Functions 也有順利執行！",[45,1801,1802,1803,1806,1807,1810],{},"那為什麼唯獨打開 preview 頁面時，明明輸入的是 ",[1444,1804,1805],{},"https:\u002F\u002Fdahtahdoc.com\u002Fpreview?url=...","，網址列卻會被「拔掉 preview」，物理上強制替換成了 ",[1444,1808,1809],{},"https:\u002F\u002Fdahtahdoc.com\u002F?url=..."," 呢？ 這是因為發生了以下連鎖反應：",[45,1812,1813],{},"伺服器當機 (SSR Crash)：我們剛剛在 preview.vue 裡面使用了 import VueOfficePptx from '@vue-office\u002Fpptx'。這套件天生是設計給瀏覽器用的（裡面用到了 window 物件）。當 Cloudflare 的伺服器嘗試渲染 (SSR) \u002Fpreview 這個頁面時，因為伺服器沒有 window，直接引發了 Fatal Error (伺服器當機)。",[45,1815,1816],{},"Cloudflare 救援機制：Cloudflare 伺服器發現 \u002Fpreview 當機了，於是它啟動了 SPA 網站的標準救援機制——直接回傳網站的 index.html (首頁) 給您。",[45,1818,1819],{},"Nuxt 幫倒忙的強制矯正：當您的瀏覽器拿到首頁的程式碼並準備啟動 Vue 時。Vue Router 說：「咦？伺服器吐給我的畫面明明是首頁，但是你現在瀏覽器上方的網址怎麼寫著 \u002Fpreview？這肯定不對！讓我幫你『修正』網址列！」",[45,1821,1822],{},"於是，Vue Router 就雞婆地把您瀏覽器上的 \u002Fpreview 砍掉，變回了 \u002F (首頁)，但完整保留了後面的問號參數 (?url=...)。",[45,1824,1825],{},"這就是為什麼路徑會完美地「被引導回去首頁，但參數全都在」的詭異真相！",[10,1827,1828],{},"另一個話題，有上傳下載，當然也要有匯出目前編輯區的文件了，所以想到就開始實作，同樣也是先選擇 .pdf, .doc 和 .md，.doc 最麻煩，因為格式和樣式會跑掉，又跟 LLM 來回了好多次，這樣子主體編輯區大概就完成了，不算困難，但也不算輕鬆，如果在都有額度可用的情況下，也是一兩天的事，不禁感嘆出張嘴請 LLM 寫 Code 真是太快了。",[10,1830,1831],{},"總之呢，我就是能列點就列點，出現畫面錯誤就截圖或複製給 LLM 解，每次一點點工作才不會修的難過。",[430,1833,1835],{"id":1834},"第三需求登入與分享","第三需求：登入與分享",[10,1837,1838],{},"接下來就是完全用 google 學 google，因為要做分享，就要做權限，做權限就要有登入，有登入就必須要有登入頁。",[10,1840,1841],{},"然後就發現忘記做真正的資料庫了，也是請 LLM 幫我搜尋免費可用的且有幫忙做 Google 登入的，LLM 幫我找到了 supabase，照著指示一步一步做，不一樣的地方就截圖問，然後回到 Antigravity 說説要做上面那些事資料庫要用supabase ，分享的內容基本就學 google 文件系列，就不多提。",[10,1843,1844],{},"到這邊開始， LLM 基本就會忘東西了，所以我需要不斷幫 LLM 的知識做溫習，這算是第一個崩潰的點，很難受。",[10,1846,1847],{},"我要跟 LLM 解釋權限與文件檔案是否開啟，還要手動測試各種情況的權限以下情況：",[42,1849,1850,1853,1856],{},[45,1851,1852],{},"邀請 email ，然後區分可檢視還是可以編輯，以及公開連結可預覽",[45,1854,1855],{},"外部資源的各個檔案分享 switch 開關，",[45,1857,1858],{},"另開視窗單獨 preview 的頁面",[10,1860,1861],{},"截取LLM的最後整理結果：",[104,1863,1864],{},[10,1865,1866],{},[109,1867],{"alt":1868,"src":1869},"權限與身份排列組合","\u002Fimages\u002Fblog\u002F45.png",[104,1871,1872],{},[10,1873,1874],{},[109,1875],{"alt":1876,"src":1877},"權限與身份排列組合：未受邀請的同事","\u002Fimages\u002Fblog\u002F46.png",[10,1879,1880],{},"過程中還碰到了 Cache 問題，總之這裡真的花了超級多 token 和時間，有時候崩潰後檔案太亂了只好又重頭來。所以使用 LLM 一定要特別特別注意版控。",[10,1882,1883],{},"提到版控，說真的，我還真不知道如果不知道怎麼用 git 的話，要怎麼版控會比較好。每次修正前自己手動備份一整包檔案嗎？這樣上下文又會斷掉。然後如果不會 npm 的話又要浪費很多時間詢問跟怎麼做，聽起來就好累。",[10,1885,1886],{},"到這邊我大概可以斷定「只改文案和下 Prompt」這種開發方式真的只適合懂寫程式的人使用，因為很容易忽略版控、固定 LLM 前置知識、開發環境等因素，而且下的 Prompt 會很不精準且有時候根本不知道怎麼提問覺得 LLM 一直在鬼打牆。也就是說，2026上半年還不是人人都可以容易的做出一個商用等級的產品，小打小鬧的方便工具倒是可以。",[10,1888,1889],{},"但是我還是想堅持這樣的方式繼續，除非遇到無法逾越的問題再介入。",[430,1891,1893],{"id":1892},"take-a-break稍微整理一下到目前-vibe-開發體驗心得","Take a Break：稍微整理一下到目前 Vibe 開發體驗心得",[42,1895,1896,1899,1902,1913,1916,1919,1922],{},[45,1897,1898],{},"能列點就列點，一個一個小步驟慢慢列，最好有相關性的列在一起",[45,1900,1901],{},"重要的事情必須要強調出來，例如：不要ＸＸＸ",[45,1903,1904,1905],{},"請 LLM 先規劃不要實作\n",[42,1906,1907,1910],{},[45,1908,1909],{},"先規劃 UI 位置、風格",[45,1911,1912],{},"再次確認需求規劃有沒有遺漏或沒思考到的事",[45,1914,1915],{},"進行實作前先備份或做版控",[45,1917,1918],{},"實作後要修改的地方務必非常明確，例如主選單內，Group選單的文字標題，顏色改成ＸＸＸ，並且附上錯誤資訊或截圖",[45,1920,1921],{},"實作後要自己要當 QA",[45,1923,1924],{},"上線到正式環境後再玩一次",[10,1926,1927],{},"對了，講那麼多好像沒講到上線的事，我是用 Gitlab + Cloudflare，只要透過 LLM 教學基本上都可以架起來，所以就不多著墨這邊的事。",[430,1929,1931],{"id":1930},"第四需求簡易文件管理與垃圾桶機制","第四需求：簡易文件管理與垃圾桶機制",[10,1933,1934],{},"有了登入頁→執行登入→進到文件列表頁",[10,1936,1937],{},"Hmm…總覺得有點怪怪的，才發現我忘了做資料夾分類和垃圾桶，這邊 LLM 異常的順利，可能是太常見的任務，迅速就將我的需求和我沒想到的需求都一併做好，例如垃圾桶留 30 天刪除、還原、垃圾桶文件數量...諸如此類。反正這邊我也沒有想要做太複雜，跟市面上一樣就好，垃圾桶嘛...還能做什麼？",[430,1939,1941],{"id":1940},"第五需求臨時天外飛來一筆試試看的功能","第五需求：臨時天外飛來一筆試試看的功能",[10,1943,1944],{},"既然都已經用 LLM 開發，那就來設計一下文件內的 LLM 輔助功能吧，規劃如下：",[42,1946,1947,1950,1953,1956,1959,1962,1965,1968,1971,1974,1977,1980,1983],{},[45,1948,1949],{},"在文件編輯器區塊中央下方，浮動一個區塊，裡面是輸入框和按鈕",[45,1951,1952],{},"功能是要做一個文件編輯 AI 助手，僅可以輸入文字",[45,1954,1955],{},"需要顯示目前使用的是什麼模型",[45,1957,1958],{},"建立一個設定頁面，在頁面中有 LLM 不同廠商，使用頁籤方式分隔，並且在頁籤中標示「使用中」跟「未設定」",[45,1960,1961],{},"有一個可以讓使用者輸入 LLM API 的輸入框，使用密碼輸入模式，避免有外洩風險",[45,1963,1964],{},"每個廠商都要有三個模型和一個自定義模型名稱的下拉式選單，選擇自定義模型後出現另一個輸入框，可以自行輸入模型文字",[45,1966,1967],{},"附上取得廠商 API 的教學",[45,1969,1970],{},"提供 system prompt 輸入框，並且要有預設的 system prompt 內容，預設內容角色為系統分析師，可以根據使用者 prompt，產出結構嚴謹、技術精確的規格內容",[45,1972,1973],{},"ai 助手需要讀取當下文件的內容、使用者 prompt 以及 system propmt，並且在原本滑鼠焦點地方，加上 LLM 產出後的結果",[45,1975,1976],{},"如果沒有填 API ，ai小助手要有警告，並且是不能用的狀態",[45,1978,1979],{},"小助手要可以收合\u002F展開",[45,1981,1982],{},"請幫小助手產生使用 LLM 的警語",[45,1984,1985],{},"...",[10,1987,1988],{},"大概類似這樣吧，總之其實做一個小小功能，prompt 就要下超級多，這些只是需求而已，還沒有加上其他注意事項（例如順便建立的系統設定頁面），其實說實在也是蠻累的。",[430,1990,1992],{"id":1991},"第六需求加入規格書範本","第六需求：加入規格書範本",[10,1994,1995],{},"這裡主要是增加一些不同類型的範本，但因為網路上已經很多，所以我先加一點基本的，至少方便什麼都不知道的人能開始，之後我再想想範本還可以做些什麼，",[10,1997,1998],{},"畢竟在這個 LLM 的時代，範本什麼的都只是變成給 LLM 的「規範」遵守，而不是真的拿來用的了。",[430,2000,2002],{"id":2001},"第七需求歷史異動與發佈版本","第七需求：歷史異動與發佈版本",[42,2004,2005,2008,2011,2014,2017],{},[45,2006,2007],{},"在大綱的下方分割出一個「歷史異動」區塊，內容為發佈版本的歷史紀錄，有標題和描述",[45,2009,2010],{},"歷史異動項目在新建文件時，自動初始化第一個版本",[45,2012,2013],{},"在文件編輯器工具列新增一個「發佈版本」按鈕",[45,2015,2016],{},"點擊後開啟對話視窗，可填寫標題和描述，點擊確定關閉對話視窗，新增一筆歷史異動，點擊取消關閉對話視窗不動作",[45,2018,2019],{},"點擊歷史異動任一項目，自動與點擊版本的前一版做差異對比，新異動的內容加入背景 highlight，舊內容則透明化",[10,2021,2022],{},"目前都是使用免費的東東，至少可以讓觀看文件者知道兩個版本修改了哪裡，之後真的需要的話，再製作回復到特定版本內容",[10,2024,2025],{},"覺得應該要先解個 Bug 、擴充編輯器功能、重構了\n經過以上需求，程式已經變得蠻龐大的了，就需要先解一些 bug、擴充小功能和重構，不然之後的大範圍改動，可能會造成災難。",[10,2027,2028],{},"一開始建立 Tiptap 編輯器時，因為我忘了指定要什麼工具，以下是我的 prompt：",[42,2030,2031,2034,2037,2040,2043],{},[45,2032,2033],{},"我發現tiptap文件編輯器的工具列沒有連結、文字大小、文字顏色、文字背景以及文字字型。",[45,2035,2036],{},"文件現在內文加上連結時，沒有連結顏色和底線，在螢幕上難以察覺，但是匯出時，不要有連結顏色，但是底線保留",[45,2038,2039],{},"文字字型需要先在此專案加入字型檔嗎？伺服器會不會負擔太重？",[45,2041,2042],{},"圖片上傳後，我需要有地方輸入圖片描述和長描述figcaption，目前是開啟系統資料夾就上傳了，請幫我想個方式輸入這兩個資訊",[45,2044,2045],{},"我還有遺漏什麼常用的工具嗎？",[10,2047,2048],{},"請先幫我思考以上列點，並且做加入這些新功能的規劃\n所以 LLM 偷懶只給我幾個常用工具，所以這次把常用但沒加到的都補上，也因為這樣，所以匯出的功能都要重新檢查，然後也發現 LLM 偷懶的很嚴重的一些地方，例如 Dialog 每次都是寫新的，而不是建立一個共用元件來用。",[10,2050,2051],{},"這些就是肉眼可見的不一樣，不需要看程式碼就能明顯察覺，所以又花了一些時間做了這些東西，讓網站的整體一致認性更好，順便多一些小功能：刪除 account、協作時要看到在同一份文件的人、他們的權限以及他們正在哪一行編輯。",[430,2053,2055],{"id":2054},"第九需求登入前的介紹產品頁面","第九需求：登入前的介紹產品頁面",[10,2057,2058],{},"剛剛都是 LLM 在偷懶，這是換我偷懶了，登入前的頁面基本都是請 LLM 先理解我的專案，然後我給出我想要的插畫、網站風格以及各區塊要介紹什麼，先做出首頁。",[10,2060,2061],{},"接著補上各種雜項：",[42,2063,2064,2067,2070,2073],{},[45,2065,2066],{},"補上各種分析的工具：GA、GSC、GTM、Microsoft Clarity、Bing Webmaster Tool。",[45,2068,2069],{},"補上分析工具用到的 \u002Fprivacy、\u002Fterms 注意事項",[45,2071,2072],{},"補上各種 SEO 相關東西：Schema.org、Social Share、Sitemap.xml、Og Image Dynamic、\u002Ffaq 常見問答",[45,2074,2075],{},"最後當然不能忘記無障礙：\u002Fsitemap、定位點、Skip to Content、顏色對比、Landmark、Image ALT、HTML Structure...等",[430,2077,2079],{"id":2078},"第十需求多國語系","第十需求：多國語系",[10,2081,2082],{},"大崩潰！這邊應該卡了 3 天 0 進展，並且耗費完 Google AI Pro 的 Antigravity 額度和 Claude Code 額度，",[10,2084,2085],{},"以下是我最後一次從零進行的 Prompt：",[10,2087,2088],{},"我需要建立多國語言環境，很複雜，請仔細分析以下需求並先做出規劃：",[2090,2091,2092,2095,2098,2101,2104,2107,2110,2113,2116,2119,2122,2125,2128],"ol",{},[45,2093,2094],{},"此專案有分為登入前和登入後",[45,2096,2097],{},"請使用 @nuxtjs\u002Fi18n",[45,2099,2100],{},"使用者第一次到達網站時，使用使用者瀏覽器的語言呈現",[45,2102,2103],{},"使用者切換語言時，登入前和登入後都一起切換",[45,2105,2106],{},"使用者切換語言後，離開網站再回到網站，語言要保持上次離開的語言",[45,2108,2109],{},"登入前的切換放在header，登入後的切換放在系統設定頁面裡",[45,2111,2112],{},"登入前和登入後的切換器，都是使用 dropdown形式",[45,2114,2115],{},"請依照現在的繁體中文，翻譯成英文，並製作兩者的語言檔案，登入前和登入後的要分開儲存，以便維護",[45,2117,2118],{},"文字過多的靜態頁面，使用新的.vue檔案進行多國語系，不要放在語言檔案裡，以便維護",[45,2120,2121],{},"請將網站內部連結，換成@nuxtjs\u002Fi18n 的 localePath() 方式",[45,2123,2124],{},"未來可能有更多語言，請保持擴充彈性，以便維護",[45,2126,2127],{},"路由策略 預設繁體中文不帶前綴 (如 \u002Flogin)，英文則帶前綴 (如 \u002Fen\u002Flogin)",[45,2129,2130],{},"靜態頁面 (.vue 檔案) 的實作方式採用方案A組件替換",[10,2132,2133],{},"另外請特別注意，我的檔案內已經有做 seo 相關以及 schema.org，在執行多國語言時，請一起納入考量如何修正目前的檔案。\n不要隨便刪除我已經做好的功能，除非有特別的情況再跟我討論後再決定執行方式。",[10,2135,2136],{},"以上如果有沒有說清楚或有疑問的地方，請先詢問我，等我說「開始執行」才開始。",[10,2138,2139],{},"即便是寫這麼清楚了，還是會有漏改的問題，不過都已經是老生常談的問題了，例如 token用完了換模型接續不上去...等。",[10,2141,2142],{},"這個功能災難般完成後，又遇到 Gemini 全球大當機，我從此轉向 Claude Code，有一種人生真好的感覺，所以之後的內容都比較有我的 Prompt 和 LLM 反問我什麼。",[10,2144,2145],{},"（結果寫文章的當下，有新聞指出全球有 2%的人 Pricing 頁面有看到 Pro 方案不能用 Claude Code 了，心情莫名的悲哀）",[430,2147,2149],{"id":2148},"第十一需求留言功能","第十一需求：留言功能",[10,2151,2152],{},"留言功能，大概 30 分鐘，Claude Code 每一階段的額度用了 88%，驚險完成",[10,2154,2155],{},"我的 prompt 是：我想要做段落層級意見，需求如下：",[42,2157,2158,2161,2164,2167,2170,2173,2176,2179],{},[45,2159,2160],{},"權限唯有登入且可檢視該文件，才可以留言",[45,2162,2163],{},"當我將鼠標焦點在該行時，該行最左側有一個評論的icon按鈕，點擊後出現popover可以輸入留言與取消和確定兩個按鈕",[45,2165,2166],{},"留言完成後，在分割視窗新增位置在第一個頁籤，這個頁籤顯示留言列表",[45,2168,2169],{},"留言列表以卡片呈現",[45,2171,2172],{},"留言項目顯示誰留言、留言內容、「執行完成」的按鈕、「不執行」按鈕，點擊按鈕後顯示狀態在卡片內容裡，如果在點擊另一個按鈕，狀態可以更改",[45,2174,2175],{},"目前不要支援可以回覆留言",[45,2177,2178],{},"當卡片內容還沒更新執行狀態時，文件該行最左方的icon顯示藍色，如果有任何執行動作，則將icon變成灰色。",[45,2180,2181],{},"請根據以上需求，規劃可行性程式做法，並且幫我思考有什麼我遺漏的功能，列出來給我決定。",[10,2183,2184],{},"Claude Code 詢問我",[42,2186,2187,2190,2193,2196,2199,2202],{},[45,2188,2189],{},"權限唯有登入且可檢視該文件，建議有編輯權限的人也可以使用留言。 好的",[45,2191,2192],{},"手機無 hover，留言 icon 無法觸發，要如何處理？  長按段落觸發",[45,2194,2195],{},"點卡片捲動到對應段落？是",[45,2197,2198],{},"孤兒留言提示？是（就是如果留言的地方被刪掉了）",[45,2200,2201],{},"Tab 未解決數量 badge？是（就是有多少未解決的留言）",[45,2203,2204],{},"即時同步？是",[10,2206,2207],{},"大概修了三次小 bug，都是從文件移動到按鈕 icon 時，icon會突然消失點擊不到。",[10,2209,2210],{},"然後因為做了 RWD，所以現在測試都是花兩倍時間以上在測試，因為有些問題只會在手機上發生，例如長按段落觸發這事，在手機上就會跟原生的「選取」相關的工作列互相衝突。",[10,2212,2213],{},"不過這個複雜的行為瞬間完成，這寫 bug 都不算什麼。",[10,2215,2216],{},"第十一需求：安全性問題\n做到這邊其實也差不多要收尾了，所以我就請 Claude Code 幫我抓一下之前 Gemini 寫的程式有什麼安全性問題：",[10,2218,2219],{},"安全性審查報告",[10,2221,2222],{},"P0 — CRITICAL（立即處理）",[42,2224,2225],{},[45,2226,2227],{},".env 中的 Service Key 是否有進入 Git 歷史？",[10,2229,2230],{},"P1 — HIGH",[42,2232,2233,2236,2239],{},[45,2234,2235],{},"Image Proxy SSRF",[45,2237,2238],{},"帳號刪除 API",[45,2240,2241],{},"WebSocket token 驗證邏輯",[10,2243,2244],{},"P2 — MEDIUM",[42,2246,2247,2250,2253,2256],{},[45,2248,2249],{},"AI API 沒有 Rate Limiting",[45,2251,2252],{},"Collab Server 沒有連線\u002F訊息大小限制",[45,2254,2255],{},"Storage API 路徑驗證",[45,2257,2258],{},"console.log 在生產環境洩漏資訊",[10,2260,2261],{},"P3 — LOW",[42,2263,2264,2267,2270],{},[45,2265,2266],{},"v-html 使用",[45,2268,2269],{},"Auth Middleware 只在 client-side 執行",[45,2271,2272],{},"Hocuspocus CORS 未設定 ",[10,2274,2275],{},"不看不知道，一看嚇一跳，還是蠻多要改的，所以 LLM 開發的東西真的是...不知道該怎麼說...因為我也不懂安全性",[10,2277,2278],{},"第十二需求：類似 Notion slash 功能\n話說我原本以為 Gemini 已經有做這種功能了，可能在某一次崩潰後沒有重做到，所以又用 Claude Code 重做一次，使用 Claude Code 之後真的很少在修改。",[10,2280,2281],{},"原先我以為像這個功能，我記得 Tiptap 是要付費，後來才發現是用官方做好的才要付費，自己刻不用，",[10,2283,2284],{},"所以就直接請 Claude Code 挑選適合在文件行內使用的工具列，直接幫我做這功能，過程也不重要了，反正是一次到位。",[430,2286,2288],{"id":2287},"第十三需求加個-pwa","第十三需求：加個 PWA",[10,2290,2291],{},"雖然現在沒什麼人在提這個詞了，但我就是想做，不為什麼，單純就是想要讓「加入主畫面」這件事以及 SEO，但這裡不知道為什麼 Gemini 和 Claude Code 都修到崩潰過，可能是我同時在修 RWD 版面問題，這裡我原本以為很簡單所以就順便版面。",[17,2293,1465],{"id":1465},[430,2295,2297],{"id":2296},"llm表現","LLM表現",[10,2299,2300],{},"從多國語言開始， Gemini 就已經明顯招架不住了，有很多次甚至卡住老半天，很明顯就是當機了。Claude Code 就是真的穩如老狗，雖然也有崩潰、撞牆幾次，但整體使用上產出的品質與量，都是最棒的！Codex 我倒是還沒試過，現在不想訂閱太多了，之前為了跟上最新的 Modal 到處訂閱，很傷荷包。",[10,2302,2303],{},"如果有機會，我會再想試試看從 Claude Design 到 Claude Code 的流程，因為我有一次工作上懶得畫兩版本 UI，直接把我做好的第一版 UI 丟到 Claude Design，請他幫我換風格跟排版，完美達成，還幫我腦補了一些東西(有好有壞)，但是這種爽感真的幫助我很多(有些業主就是要多種版讓他看)",[430,2305,2307],{"id":2306},"如果重來一次","如果重來一次？",[10,2309,2310],{},"後續跟 LLM 回顧時，LLM 問我：重做一次的話，會選擇「自己做 80%＋ AI 20%」還是又會選擇「完全不碰程式」？",[10,2312,2313],{},"如果是這種小型又複雜的事情，我的結論還是「完全不碰程式」",[10,2315,2316],{},"這次我選擇只碰觸「修改文案」和「prompt」，等於是把所有東西都交給 LLM 自己決定，如果之後的產品(應該說現在就有只是我不想搞到那麼複雜)讓我更能掌握細節控制，例如版片要怎麼排，那我的結論會更堅定站在「完全不碰程式」，因為時間真的是節省太多了，大概我切版的時間＝LLM 完成了這樣一個產品的時間，簡單說這次等於用「精準控制權」換取了「開發生命週期」的大幅縮短。",[430,2318,2320],{"id":2319},"這樣的產出是不是只能用在-prototype-不能真正上戰場","這樣的產出是不是只能用在 Prototype， 不能真正上戰場？",[10,2322,2323],{},"我個人認為，只要是對現在想改善的東西有幫助，不管醜或美，都能上戰場。",[10,2325,2326],{},"只用來做 Prototype 或 Demo 實在太可惜，這種做出來是真正可以發到市場直接驗證想法，然後快速更改成使用者真正想要的東西，等規模要擴大或是變現流程很穩定，再考慮重新做一個也不遲。",[430,2328,2329],{"id":2329},"職涯問題",[10,2331,2332],{},"我認為在面對職涯問題時，應該要先問現在的公司有沒有勇氣轉變，才需要談職涯問題。",[10,2334,2335],{},"如果公司有勇氣開始轉變，那麼員工的能力需求就會開始改變：",[42,2337,2338,2341,2344,2347],{},[45,2339,2340],{},"一人開發的小工具：\n基本UX 能力，能用白話文清楚表達給 LLM 知道要做什麼。",[45,2342,2343],{},"一人開發的小型服務：\n懂專案\u002F產品管理＋領域知識＋UX中等能力，能用專業知識、業界術語、經驗表達給 LLM 知道要做什麼，並且能做基本的管理。",[45,2345,2346],{},"一人開發的小型複雜服務：\n懂專案\u002F產品管理＋領域知識＋UX中等能力+程式\u002F版控基本能力，能用專業知識、業界術語、經驗、程式邏輯請 LLM 思考並知道要做什麼，做不好知道怎麼重做。",[45,2348,2349],{},"多人開發的中型服務以上：\n抱歉我真的不知道，這方面應該會涉及協作，目前的 LLM 協作工具我沒用過，但我想像可能會是有一個架構師寫完大準則，發下去給中間的架構師討論中小型準則，然後有人輔助檢驗，有點像 Large Scale Scrum (LeSS) 那種感覺，但是人數會少很多，因為一個人能扛的產能多太多了，不過前提是每個人在開發新功能時都有遵循準則。",[10,2351,2352],{},"簡單說，如果是在這種公司裡面，「廣度」類型的人會比較多、「深度」類型的人會比較少(也不用多)，學習程式邏輯不是為了親手打字，而是為了獲得與強大 AI 溝通的權杖。",[10,2354,2355],{},"不過終歸是要回到「公司」個案探討，畢竟行業不同、角色不同、業務方向不同，但如果是新創團隊，我還蠻建議使用新流程、新方法，開創出顛覆現有流程的「破壞式創新」！",[10,2357,2358],{},"牽扯到金流串接與帳務邏輯呢？我敢用這種方式開發嗎？\n我很膽小，現階段的我不太敢，但如果有一個懂的人跟我合作，我就敢！",[10,2360,2361],{},"這也就是我上面提到的「多人開發的中型服務以上」這件事，是不是也有人負責檢驗安全和輔助的職位呢？",[10,2363,2364],{},"最後的小知識\n你能猜到為什麼這個產品的名稱叫「dahtahdoc」嗎？",[10,2366,2367],{},"因為",[10,2369,2370],{},".",[10,2372,2370],{},[10,2374,2370],{},[10,2376,2370],{},[10,2378,2370],{},[10,2380,2370],{},[10,2382,2370],{},[10,2384,2370],{},[10,2386,2370],{},[10,2388,2370],{},[10,2390,2370],{},[10,2392,2370],{},[10,2394,2395],{},"在寫「文件」時，鍵盤的敲擊聲「噠踏噠」，",[10,2397,2398],{},"所以網站 dahtahdoc.com 也叫「噠踏噠答Come!」，",[10,2400,2401],{},"「打一打字就文件就完成！」的感覺",[10,2403,2404],{},"都讀到這邊了，別害羞了，免費來試試看嘛！",[10,2406,2407],{},[87,2408,2411],{"href":2409,"rel":2410,"target":92,"title":93},"https:\u002F\u002Fdahtahdoc.com",[91],"DahTahDoc",{"title":177,"searchDepth":178,"depth":178,"links":2413},[2414,2415,2416,2417],{"id":1543,"depth":181,"text":1543},{"id":1665,"depth":181,"text":1666},{"id":1713,"depth":181,"text":1713},{"id":1465,"depth":181,"text":1465},"2026-04-23","用最普通的 Prompt「Vibe coding」做出一個解決團隊規格書協作痛點的小產品，記錄從釐清真正需求到實際做出來的過程。",{},"\u002Fzh\u002Fblog\u002Fvibe-coding-product",{"title":1533,"description":2419},"zh\u002Fblog\u002Fvibe-coding-product",[2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441],"文件","VibeCoding","文件管理","文件協作","ClaudeCode","Tiptap","Notion","規格書","需求","Spec","SA","系統分析師","產品經理","專案管理","AI工具","Antigravity","Gemini","xAn-UWGcXp0Iy2CAIp4ZH2hlOeZUVbAISoOKZdjfYYc",{"id":2444,"title":2445,"body":2446,"date":2636,"description":2637,"draft":189,"extension":190,"meta":2638,"navigation":192,"ogImage":193,"path":2639,"seo":2640,"stem":2641,"tags":2642,"translationKey":193,"updatedAt":203,"__hash__":2643},"blog_zh\u002Fzh\u002Fblog\u002Fa11y-dev-tool.md","Accesserty DevCheck — 在開發階段模擬與偵測無障礙問題",{"type":7,"value":2447,"toc":2628},[2448,2451,2453,2456,2459,2462,2465,2469,2472,2486,2489,2503,2506,2510,2514,2517,2548,2552,2560,2563,2566,2569,2572,2575,2589,2593,2596,2599,2602,2606,2622,2625],[10,2449,2450],{},"2026\u002F06\u002F22 更新：已新增 AI 圖片 alt 語意輔助辨識與建議，以下為原文不修正。",[10,2452,15],{},[10,2454,2455],{},"在開發網站時，我們總習慣寫完程式碼後再補測試，再補無障礙，再補設計稿上的細節。",[10,2457,2458],{},"但「無障礙設計」這件事，其實不只是檢查通過，而是讓人真的可以用得順、看得懂、操作得了。",[10,2460,2461],{},"這就是我設計 Accesserty DevCheck 的初衷：",[10,2463,2464],{},"讓開發者在開發階段，就能模擬真實世界中遇到的可及性挑戰，並結合機器工具進行基本檢測。",[17,2466,2468],{"id":2467},"為什麼需要模擬","為什麼需要模擬？",[10,2470,2471],{},"無障礙問題，有些可以用程式碼掃出來，例如：",[42,2473,2474,2477,2480,2483],{},[45,2475,2476],{},"圖片缺少 alt",[45,2478,2479],{},"標題結構錯誤",[45,2481,2482],{},"Landmark 缺少 main\u002Fnav\u002Ffooter",[45,2484,2485],{},"沒有設定 aria 屬性或設錯",[10,2487,2488],{},"但更多的問題，其實是無法自動抓出來的：",[42,2490,2491,2494,2497,2500],{},[45,2492,2493],{},"你怎麼知道配色對色盲者來說是不是一樣？",[45,2495,2496],{},"你怎麼知道頁面文字模糊時還能不能閱讀？",[45,2498,2499],{},"你怎麼知道某個區塊如果看不見，會影響理解整體內容？",[45,2501,2502],{},"這些情境都無法靠 Lighthouse、axe-core 完全處理。",[10,2504,2505],{},"所以我們需要的是：模擬情境 + 偵測工具。",[17,2507,2509],{"id":2508},"accesserty-devcheck-提供了什麼功能","Accesserty DevCheck 提供了什麼功能？",[430,2511,2513],{"id":2512},"模擬情境simulation-modes","模擬情境（Simulation Modes）",[10,2515,2516],{},"這些功能可以讓你在任何網站中，快速切換視覺環境來體驗他人可能遇到的困難：",[42,2518,2519,2522],{},[45,2520,2521],{},"色盲模擬：支援多種色盲類型（紅綠色盲、藍黃色盲、全色盲等）",[45,2523,2524,2525],{},"視覺模糊模擬：\n",[42,2526,2527,2530,2533,2536,2539,2542,2545],{},[45,2528,2529],{},"近視（整體模糊）",[45,2531,2532],{},"老花／遠視（只有中央清晰）",[45,2534,2535],{},"白內障（亮光擴散模糊）",[45,2537,2538],{},"視覺遮蔽模擬：模擬眼前有一塊區域是看不到的情況（常見於眼疾或視野限制者）",[45,2540,2541],{},"大文字／間距模擬：模擬放大字體時排版是否崩壞",[45,2543,2544],{},"顏色反轉模式：模擬強制暗色模式對 UI 的影響",[45,2546,2547],{},"單指點擊區模擬：讓你了解手指點擊範圍過小是否會導致誤觸（特別適合行動裝置開發者）",[430,2549,2551],{"id":2550},"偵測功能debug-tools","偵測功能（Debug Tools）",[42,2553,2554,2557],{},[45,2555,2556],{},"axe-core 自動偵測",[45,2558,2559],{},"PDF 結構偵測",[17,2561,2562],{"id":2562},"使用方式簡單直覺",[10,2564,2565],{},"DevCheck 是一個 Chrome Extension，只要安裝後點擊圖示，就能開啟模擬選單。",[10,2567,2568],{},"你可以即時切換不同情境、看到畫面變化，並點擊一鍵啟動偵測。",[10,2570,2571],{},"不用換頁、不用複製網址，不論是開發者測試 staging 站、還是設計師審查 prototype，都能即時驗證。",[17,2573,2574],{"id":2574},"它不只是給工程師的工具",[42,2576,2577,2580,2583,2586],{},[45,2578,2579],{},"設計師可以用來檢查配色與字級",[45,2581,2582],{},"專案經理可以在 Demo 前模擬各種情境",[45,2584,2585],{},"測試人員可以用來快速重現視覺問題",[45,2587,2588],{},"客服也能在用戶報案後馬上模擬狀況",[17,2590,2592],{"id":2591},"為什麼這很重要","為什麼這很重要？",[10,2594,2595],{},"因為「有問題」不代表「會回報」，也不代表「知道怎麼回報」。",[10,2597,2598],{},"你可以等到用戶投訴，再來修修補補，或是在開發階段就先體驗一次他們的痛苦。",[10,2600,2601],{},"如果體驗一次你就覺得難用，那真正需要這個功能的人，可能早就放棄這個網站了。",[17,2603,2605],{"id":2604},"試試看-accesserty-devcheck","試試看 Accesserty DevCheck",[42,2607,2608,2615],{},[45,2609,2610],{},[87,2611,2614],{"href":2612,"rel":2613,"target":92,"title":93},"https:\u002F\u002Faccesserty.com\u002Fdevcheck",[91],"介紹",[45,2616,2617],{},[87,2618,2621],{"href":2619,"rel":2620,"target":92,"title":93},"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Faccesserty-devcheck\u002Fompbhahmipenipgiiiehbkiibkonoeec",[91],"擴充程式",[10,2623,2624],{},"你不需要學會所有 WCAG 條文，也不需要改變整個流程，",[10,2626,2627],{},"只要在開發中，點一下模擬，就能早一步降低後期修正的成本。",{"title":177,"searchDepth":178,"depth":178,"links":2629},[2630,2631,2632,2633,2634,2635],{"id":2467,"depth":181,"text":2468},{"id":2508,"depth":181,"text":2509},{"id":2562,"depth":181,"text":2562},{"id":2574,"depth":181,"text":2574},{"id":2591,"depth":181,"text":2592},{"id":2604,"depth":181,"text":2605},"2025-05-31","不是等到出問題才補救，而是提早在開發階段「感受」與「理解」可能的障礙",{},"\u002Fzh\u002Fblog\u002Fa11y-dev-tool",{"title":2445,"description":2637},"zh\u002Fblog\u002Fa11y-dev-tool",[198,199,200,201,202],"M40eGuKDkLUUm3UE5O9lKKbApbnmec-ds0zzD4shv00",{"id":4,"title":5,"body":2645,"date":187,"description":188,"draft":189,"extension":190,"meta":2757,"navigation":192,"ogImage":193,"path":194,"seo":2758,"stem":196,"tags":2759,"translationKey":193,"updatedAt":203,"__hash__":204},{"type":7,"value":2646,"toc":2749},[2647,2649,2651,2653,2659,2661,2663,2665,2675,2677,2679,2681,2685,2687,2691,2693,2698,2700,2702,2708,2710,2712,2714,2716,2718,2720,2728,2730,2732,2734,2736,2738,2740,2742,2744],[10,2648,12],{},[10,2650,15],{},[17,2652,20],{"id":19},[22,2654,2655],{},[10,2656,26,2657,30],{},[28,2658],{},[17,2660,34],{"id":33},[10,2662,37],{},[10,2664,40],{},[42,2666,2667,2669,2671,2673],{},[45,2668,47],{},[45,2670,50],{},[45,2672,53],{},[45,2674,56],{},[10,2676,59],{},[17,2678,63],{"id":62},[10,2680,66],{},[22,2682,2683],{},[10,2684,71],{},[10,2686,74],{},[22,2688,2689],{},[10,2690,79],{},[10,2692,82],{},[10,2694,85,2695,95],{},[87,2696,94],{"href":89,"rel":2697,"target":92,"title":93},[91],[17,2699,99],{"id":98},[10,2701,102],{},[104,2703,2704],{},[10,2705,2706],{},[109,2707],{"alt":111,"src":112},[10,2709,115],{},[10,2711,118],{},[10,2713,121],{},[17,2715,125],{"id":124},[10,2717,128],{},[10,2719,131],{},[42,2721,2722,2724,2726],{},[45,2723,136],{},[45,2725,139],{},[45,2727,142],{},[10,2729,145],{},[10,2731,148],{},[10,2733,151],{},[17,2735,155],{"id":154},[10,2737,158],{},[10,2739,161],{},[10,2741,164],{},[10,2743,167],{},[10,2745,2746,175],{},[87,2747,174],{"href":172,"rel":2748,"target":92,"title":93},[91],{"title":177,"searchDepth":178,"depth":178,"links":2750},[2751,2752,2753,2754,2755,2756],{"id":19,"depth":181,"text":20},{"id":33,"depth":181,"text":34},{"id":62,"depth":181,"text":63},{"id":98,"depth":181,"text":99},{"id":124,"depth":181,"text":125},{"id":154,"depth":181,"text":155},{},{"title":5,"description":188},[198,199,200,201,202],{"id":2761,"title":2762,"body":2763,"date":3027,"description":3028,"draft":189,"extension":190,"meta":3029,"navigation":192,"ogImage":193,"path":3030,"seo":3031,"stem":3032,"tags":3033,"translationKey":193,"updatedAt":3034,"__hash__":3035},"blog_zh\u002Fzh\u002Fblog\u002Faccesserty-eco.md","打造 Accesserty — 從搜尋到開發的無障礙網頁之體驗",{"type":7,"value":2764,"toc":3019},[2765,2768,2771,2775,2783,2786,2789,2793,2796,2799,2803,2806,2809,2812,2815,2818,2822,2825,2828,2831,2834,2837,2845,2863,2867,2870,2877,2880,2883,2887,2890,2903,2916,2919,2982,2985,2988,2991,2998,3004,3007,3010],[10,2766,2767],{},"今天想分享我花了一個月左右打造的新品牌：Accesserty",[10,2769,2770],{},"這是一個專注於提升無障礙網頁體驗的小型工具生態，從搜尋體驗到開發測試，試圖用一套溫和、理性的方式，讓這件事被看見、被理解、被改善。",[17,2772,2774],{"id":2773},"起點對於-chrome-extension-的好奇","起點：對於 Chrome Extension 的好奇",[10,2776,2777,2778,2782],{},"在 2023 年時，我出於對 Chrome Extension 的好奇，製作了名為 Report Website Issues 的擴充程式，並分享",[87,2779,2781],{"href":2780},"\u002Fblog\u002Freport-website-issue","開發過程","。",[10,2784,2785],{},"到了 2025 年，隨著大型語言模型（LLM）的普及，我開始思考能否用它來輔助開發更多可實際解決問題的工具，並設法用 LLM 拆分出角色，幫助我在短時間內建構出一個有邏輯又能運作的產品系統。",[17,2787,2788],{"id":2788},"發現問題與痛點",[430,2790,2792],{"id":2791},"_1-搜尋後使用者其實不知道該點哪個連結","1. 搜尋後，使用者其實不知道該點哪個連結",[10,2794,2795],{},"搜尋引擎雖然會綜合 SEO、速度、內容等因素排序網頁，但這些排序結果並不代表網站「好用」或「易於瀏覽」。\n許多網站看似在技術層面表現良好，實際上卻充斥著鍵盤操作困難、結構不明、廣告覆蓋等問題，特別是對使用輔助科技的使用者而言。",[10,2797,2798],{},"我開始思考：能不能在搜尋時就直接看到這個網站的可及性狀況？避免來回點選、浪費時間與耐心，讓瀏覽過程更順暢。",[430,2800,2802],{"id":2801},"_2-使用者想回報問題卻無門可報","2. 使用者想回報問題，卻「無門可報」",[10,2804,2805],{},"即使使用者發現網站有困難，也常因為找不到聯絡方式、或無法準確描述問題而選擇放棄。",[10,2807,2808],{},"更常見的是客服和使用者之間「認知不同」，像是這個我在之前文章中提到的例子：",[10,2810,2811],{},"例如使用者說「我的鍵盤沒辦法瀏覽你們的網頁」，但客服卻說「我的可以喔，麻煩您再試試」，然後差不多就鬼打牆，兩邊都覺得對方很爛，因為前者是談鍵盤焦點，後者可能只是按向下鍵捲動畫面。",[10,2813,2814],{},"因此我認為需要有一個「中介層」：讓使用者能輕鬆描述問題，讓開發者收到後是可解讀、可處理的資訊。",[10,2816,2817],{},"目前 LLM 雖然可以協助，但仍難以精確理解這類回報或是成本太高。",[430,2819,2821],{"id":2820},"_3-對開發者而言無障礙是高成本嗎","3. 對開發者而言，無障礙是高成本嗎？",[10,2823,2824],{},"近年因應歐盟無障礙相關法規，各大 UI 框架陸續強化了可及性元件，的確減少了開發成本。\n但僅靠機器掃描是否合規遠遠不夠 — — 因為「合規」≠「可用」。",[10,2826,2827],{},"舉例來說：一張圖片是否有 alt 屬性，機器可以檢查；但這個 alt 的內容是否正確傳達圖片意義？還是只有寫「圖片1」？這仍需要人來判斷。",[10,2829,2830],{},"目前即使 LLM 可以做初步描述，也需要 API 費用與極高 prompt 精度，而且幻覺仍是風險。",[10,2832,2833],{},"所以更務實的方式是 — — 在開發過程就提供人工判斷的機會與工具。",[10,2835,2836],{},"這就延伸出一個核心概念：",[22,2838,2839],{},[10,2840,2841,2842,2844],{},"越早期處理可及性問題，成本越低。",[28,2843],{},"\n從規劃階段讓分析師、設計師、工程師一起考慮無障礙，而不是事後補強。",[104,2846,2847,2853],{},[10,2848,2849],{},[109,2850],{"alt":2851,"src":2852},"67％的無障礙問題來自於設計階段","\u002Fimages\u002Fblog\u002F41.webp",[2854,2855,2856],"figcaption",{},[10,2857,2858],{},[87,2859,2862],{"href":2860,"rel":2861,"target":92,"title":93},"https:\u002F\u002Fwww.deque.com\u002Fblog\u002Fis-closing-the-web-accessibility-design-development-gap-a-bridge-too-far\u002F",[91],"參考來源：Is Closing the Web Accessibility Design\u002FDevelopment Gap a Bridge Too Far?",[17,2864,2866],{"id":2865},"解法開始成形模擬檢查回報","解法開始成形：模擬、檢查、回報",[10,2868,2869],{},"基於上述問題，我開始構思一個流程圖，來整理使用者、開發者、合作方之間的互動關係：",[2871,2872],"embed",{"height":2873,"src":2874,"type":2875,"width":2876},"480px","https:\u002F\u002Fwhimsical.com\u002Fembed\u002FNDhUK17ebjwRtaH4kLoMU4","application\u002Fpdf","100%",[10,2878,2879],{},"從網頁瀏覽者至網頁開發者流程與 Accesserty 產品關係。",[10,2881,2882],{},"我將整體劃分為「預防」與「治療」兩大塊，並嘗試建立一套工具組合，來落實這個想法，完成良好的循環過程達成 Win-Win 的結果。",[17,2884,2886],{"id":2885},"建立-accesserty-品牌與產品結構","建立 Accesserty 品牌與產品結構",[10,2888,2889],{},"很多 a11y 工具會在電子報宣傳「某公司被罰了多少錢」，我覺得那會讓開發者只想「應付一下」，而不是真的想理解與改善。\n所以我與「我的產品經理」（ChatGPT 😎）對話後，確立了品牌核心：",[104,2891,2892,2898],{},[10,2893,2894],{},[109,2895],{"alt":2896,"src":2897},"品牌語氣表","\u002Fimages\u002Fblog\u002F42.png",[2854,2899,2900],{},[10,2901,2902],{},"品牌語氣：冷靜、理性、透明、參與感強；不做的事：不標籤化、不威脅、不灌分、不做障礙者專屬版本；做的事：對齊通用設計、鼓勵主動改善、打造正向反饋機制",[104,2904,2905,2911],{},[10,2906,2907],{},[109,2908],{"alt":2909,"src":2910},"ChatGPT 專案","\u002Fimages\u002Fblog\u002F43.webp",[2854,2912,2913],{},[10,2914,2915],{},"我發現 ChatGPT 現在可以幫我建立「專案資料夾」的模式。  我可以先給它一份專案的背景說明，然後針對不同專業角色，分別開啟對話，例如設計師、工程師、開發者。  像我就會把流程圖截圖放進專案中，再從這個共同檔案延伸出多個角色視角。",[10,2917,2918],{},"等到跟「產品經理」確定各種細節之後，便開啟其他三個專家：AppSheet、Chrome Extension、Web Component，利用 Vibe Coding 的方式，將產品產生出來。架構如下：",[42,2920,2921,2937,2950,2973],{},[45,2922,2923,2924,2926,2930,2932],{},"Accesserty Signal — 讓 Google 搜尋結果顯示網頁可及性狀態",[28,2925],{},[87,2927,2929],{"href":89,"rel":2928,"target":92,"title":93},[91],"簡介",[28,2931],{},[87,2933,2936],{"href":2934,"rel":2935,"target":92,"title":93},"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Faccesserty-signal\u002Fjabgpbgdmhdmibhogmcjfinnkcngcelc",[91],"下載 Chrome 擴充程式",[45,2938,2939,2940,2942,2945,2947],{},"Accesserty DevCheck — 模擬無障礙情境與自動檢查問題（如色盲模擬、Axe-core devtool 等）",[28,2941],{},[87,2943,2929],{"href":1174,"rel":2944,"target":92,"title":93},[91],[28,2946],{},[87,2948,2936],{"href":2619,"rel":2949,"target":92,"title":93},[91],[45,2951,2952,2953,2955,2959,2961,2966,2968],{},"Accesserty UI Kit — 提供通過可及性設計的 Web Component 元件",[28,2954],{},[87,2956,2929],{"href":2957,"rel":2958,"target":92,"title":93},"https:\u002F\u002Faccesserty.com\u002Fuikit",[91],[28,2960],{},[87,2962,2965],{"href":2963,"rel":2964,"target":92,"title":93},"https:\u002F\u002Fgithub.com\u002FAccesserty\u002FUI-Kit",[91],"Github",[28,2967],{},[87,2969,2972],{"href":2970,"rel":2971,"target":92,"title":93},"https:\u002F\u002Faccesserty.com\u002Fuikit\u002Fplayground",[91],"CSS 模擬器",[45,2974,2975,2976,2978],{},"Accesserty Pulse — 專注於捕捉使用者『操作挫折』的服務。",[28,2977],{},[87,2979,2929],{"href":2980,"rel":2981,"target":92,"title":93},"https:\u002F\u002Faccesserty.com\u002Fpulse",[91],[10,2983,2984],{},"整體系統皆由我一人開發，搭配 ChatGPT 輔助，以最低維運成本打造。",[17,2986,2987],{"id":2987},"發佈與展望",[10,2989,2990],{},"今年的 GAAD（Global Accessibility Awareness Day）這天(每年五月的第三個星期四)，在 Product Hunt 上發佈了：",[10,2992,2993],{},[87,2994,2997],{"href":2995,"rel":2996,"target":92,"title":93},"https:\u002F\u002Fwww.producthunt.com\u002Fposts\u002Faccesserty",[91],"Accesserty on Product Hunt",[10,2999,3000,3001,2782],{},"希望讓更多人知道，改善無障礙，不一定需要複雜的團隊與大量預算。\n只要設計得當、工具使用得當，從搜尋、開發到回報，其實都可以是透明且正向的。\n如果你也是在意這個議題，或者你在瀏覽網站時也曾有過「不知道要點哪個」的猶豫，歡迎看看 Accesserty ",[87,3002,403],{"href":1499,"rel":3003,"target":92,"title":93},[91],[10,3005,3006],{},"如果你也曾在使用網站時感到困擾，希望這套產品能帶來一些幫助。歡迎在 Accesserty 留言告訴我你的想法，也很期待未來合作或改進的可能！",[17,3008,3009],{"id":3009},"參考",[42,3011,3012],{},[45,3013,3014],{},[87,3015,3018],{"href":3016,"rel":3017,"target":92,"title":93},"https:\u002F\u002Faccessibility.day\u002F",[91],"GAAD",{"title":177,"searchDepth":178,"depth":178,"links":3020},[3021,3022,3023,3024,3025,3026],{"id":2773,"depth":181,"text":2774},{"id":2788,"depth":181,"text":2788},{"id":2865,"depth":181,"text":2866},{"id":2885,"depth":181,"text":2886},{"id":2987,"depth":181,"text":2987},{"id":3009,"depth":181,"text":3009},"2025-05-23","分享我花約一個月打造的品牌 Accesserty：一套從搜尋體驗到開發測試的無障礙工具生態，用溫和而理性的方式，讓無障礙網頁被看見、被理解、被改善。",{},"\u002Fzh\u002Fblog\u002Faccesserty-eco",{"title":2762,"description":3028},"zh\u002Fblog\u002Faccesserty-eco",[199,201,200,202,198],"2026-01-13","nvQILcgG8wNwJ32NLAssgqVZxirtPnashWx7NFYpKMM",{"id":3037,"title":3038,"body":3039,"date":3214,"description":3043,"draft":189,"extension":190,"meta":3215,"navigation":192,"ogImage":193,"path":3216,"seo":3217,"stem":3218,"tags":3219,"translationKey":193,"updatedAt":3220,"__hash__":3221},"blog_zh\u002Fzh\u002Fblog\u002Fllm-chat-a11y.md","LLM Chat Accessibility",{"type":7,"value":3040,"toc":3208},[3041,3044,3047,3050,3054,3063,3071,3075,3078,3086,3094,3101,3104,3108,3111,3122,3130,3137,3140,3143,3146,3149,3152,3183,3190,3193,3196,3199,3202,3205],[10,3042,3043],{},"因為很好奇，所以想檢測一下主流 LLM Chat 工具在無障礙上的支援程度",[10,3045,3046],{},"隨著歐盟的無障礙法規到來，我實在是很好奇最近幾年新出現的 LLM Chatbot 是否能通過無障礙，於是就隨意挑選三個 LLM 記錄一下 2025 目前的狀況。（如果過不了還能在歐盟的國家使用嗎？真是疑惑。）",[17,3048,3049],{"id":3049},"機器掃描",[430,3051,3053],{"id":3052},"_1-選擇當作基準的測試工具","1. 選擇當作基準的測試工具",[10,3055,3056,3057,3062],{},"本來是想簡單一點用 Chrome Devtool 的 Lighthouse ，但會被 Grok 一直擋在機器人檢測的頁面，所以本次選擇 ",[87,3058,3061],{"href":3059,"rel":3060,"target":92,"title":93},"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fibm-equal-access-accessib\u002Flkcagbfjnkomcinoddgooolagloogehp",[91],"IBM Equal Access Accessibility Checker"," 的 Chrome Extension 來測試，會選擇的原因是此款擴充程式一來持續在更新，再者可以根據需求選擇檢測規則。",[104,3064,3065],{},[10,3066,3067],{},[109,3068],{"alt":3069,"src":3070},"共有五種選擇，其中三種為 WCAG 2.0, 2.1, 2.2 的 A 與 AA 級，其他兩種為 2.1 和 2.2 各自加上IBM 的額外補充。","\u002Fimages\u002Fblog\u002F35.webp",[430,3072,3074],{"id":3073},"_2-在未登入的情況下進行測試","2. 在未登入的情況下進行測試",[10,3076,3077],{},"因為登入之後可能會因為資料的不同造成差異，所以要以未登入的狀態開始。",[104,3079,3080],{},[10,3081,3082],{},[109,3083],{"alt":3084,"src":3085},"Gork","\u002Fimages\u002Fblog\u002F36.png",[104,3087,3088],{},[10,3089,3090],{},[109,3091],{"alt":3092,"src":3093},"ChatGPT","\u002Fimages\u002Fblog\u002F37.png",[104,3095,3096],{},[10,3097,3098],{},[109,3099],{"alt":2441,"src":3100},"\u002Fimages\u002Fblog\u002F38.png",[10,3102,3103],{},"雖然三者首頁有不盡相同，但在聊天的主要視窗大致上是一樣的",[17,3105,3107],{"id":3106},"_3-機器檢測簡易結果","3. 機器檢測簡易結果",[10,3109,3110],{},"報告明細會區分三種等級，而每個等級又分成：",[42,3112,3113,3116,3119],{},[45,3114,3115],{},"Violation：明確的違規",[45,3117,3118],{},"Needs review：需要人工近一步檢視",[45,3120,3121],{},"Recommendation：工具建議的做法",[104,3123,3124],{},[10,3125,3126],{},[109,3127],{"alt":3128,"src":3129},"左起 ChatGPT、Gemini、Grok，以簡單的數字來看，Gemini 表現相較優異。","\u002Fimages\u002Fblog\u002F39.png",[10,3131,3132,3133,3136],{},"可以看到在總數上三者並無太大差別，但是在 Violation 方面，Gemini 就相較優異，至少有明顯在程式上處理無障礙，其中 Violation 的部分看起來都是 ",[1444,3134,3135],{},"\u003Csvg>"," 沒有標記描述之類的。",[10,3138,3139],{},"當然，這樣的機器檢測並不能代表什麼，因為在有些情況下，原本可以使用機器掃描辨別的，可能會因為使用的技術太新或其他原因，導致無法辨別。(例如背景與前景顏色的對比)",[10,3141,3142],{},"所以應該說，連這個都不能通過的話，那就也不需要進一步人工檢測了。",[10,3144,3145],{},"此階段個人認為 Gemini > ChatGPT = Grok",[17,3147,3148],{"id":3148},"人工檢測",[10,3150,3151],{},"開啟作業系統報讀軟體做看看人工檢測以下任務：",[42,3153,3154,3157,3160,3163,3166,3169,3172,3175,3180],{},[45,3155,3156],{},"在首頁輸入問題至聽到回覆結果，並觀察網頁回饋的行為",[45,3158,3159],{},"鍵盤遊走",[45,3161,3162],{},"accesskey",[45,3164,3165],{},"標題規則檢測",[45,3167,3168],{},"人工顏色檢測",[45,3170,3171],{},"Landmark",[45,3173,3174],{},"跳至主要內容按鈕",[45,3176,3177],{},[1444,3178,3179],{},"\u003Cnoscript>",[45,3181,3182],{},"其他問題",[104,3184,3185],{},[10,3186,3187],{},[109,3188],{"alt":3189,"src":3129},"三者人工檢測檢核表",[10,3191,3192],{},"在人工檢測的部分，三者在顏色方面都差不多，保持著簡單的黑色簡單的介面，可惜的是都沒有設定 accesskey，不確定是不需要還是沒有設定。Landmark 也因為是簡單的介面，所以基本都只有 main 而已，感覺應該可以再拆分得更細緻一點。",[10,3194,3195],{},"禁用 js 的情況下，只有 ChatGPT 有顯示畫面，其他兩者都是空白，但即便是有顯示畫面，但是沒有提示使用者可能無法操作，可能會造成更多困擾。",[10,3197,3198],{},"在實際操作 AI 對話的方面，我個人更喜歡 ChatGPT，雖然在鍵盤遊走的部分會有順序不一致的問題，但因為很多動作做完都是回去 Focus 在輸入框，所以倒還好。另外我覺得 Gemini 優於 Grok，因為畢竟是 chatbot ，個人覺得「回覆的狀態」還是最重要的，即便是沒有直接報讀回覆的內容。",[17,3200,3201],{"id":3201},"結論",[10,3203,3204],{},"三者在機器掃描的結果上，Gemini 勝出，但在人工檢測上， ChatGPT 勝出。如果硬要分勝負，我個人覺得 ChatGPT 整體是比較好的，畢竟在主要功能的操作上是非常順暢的，這才是最重要的。",[10,3206,3207],{},"但三者應該都達不到歐盟的標準，所以我很期待之後會有什麼樣的發展。",{"title":177,"searchDepth":178,"depth":178,"links":3209},[3210,3211,3212,3213],{"id":3049,"depth":181,"text":3049},{"id":3106,"depth":181,"text":3107},{"id":3148,"depth":181,"text":3148},{"id":3201,"depth":181,"text":3201},"2025-04-16",{},"\u002Fzh\u002Fblog\u002Fllm-chat-a11y",{"title":3038,"description":3043},"zh\u002Fblog\u002Fllm-chat-a11y",[199,201,200,202,1409],"2025-05-26","WihV-b_pSflOoUdosu9d1zufYrPa7YMub4Q2lo-Fdec",{"id":3223,"title":3224,"body":3225,"date":3403,"description":3404,"draft":189,"extension":190,"meta":3405,"navigation":192,"ogImage":193,"path":3406,"seo":3407,"stem":3408,"tags":3409,"translationKey":193,"updatedAt":3220,"__hash__":3411},"blog_zh\u002Fzh\u002Fblog\u002Ftinymce-custom-a11y-tool.md","建立所見即所得編輯器的無障礙檢測工具，以 TinyMCE 為例",{"type":7,"value":3226,"toc":3394},[3227,3230,3238,3241,3244,3247,3250,3253,3268,3271,3282,3285,3288,3308,3312],[10,3228,3229],{},"一個小程式，幫助撰文者製作符合無障礙網頁規範的文章",[104,3231,3232],{},[10,3233,3234],{},[109,3235],{"alt":3236,"src":3237},"彈出視窗內有一張圖片與無障礙檢測內容","\u002Fimages\u002Fblog\u002F34.webp",[17,3239,3240],{"id":3240},"情境",[10,3242,3243],{},"一間企業幫助政府單位架設內容管理系統網站，文章編輯需要使用所見即所得編輯器的高度自由，又要全網站符合無障礙網頁規範。",[17,3245,3246],{"id":3246},"痛點",[10,3248,3249],{},"即使有無障礙網頁知識，但只要碰到所見即所得(WYSIWYG)編輯器，網站建立後的文章內容便不再受控。",[430,3251,3252],{"id":3252},"企業",[42,3254,3255,3258,3265],{},[45,3256,3257],{},"每當網站被抽測時，就需要花費大量時間幫助業主修復。",[45,3259,3260,3261,3264],{},"程式需要特別限制必填欄位，但是有點填鴨式，例如 ",[1444,3262,3263],{},"\u003Ca>"," 在某些情況下，不需要有 title 屬性。",[45,3266,3267],{},"額外提供寫作的教育訓練。",[430,3269,3270],{"id":3270},"撰文者",[42,3272,3273,3276,3279],{},[45,3274,3275],{},"如果企業的編輯器有特別限制必填，則一定要填寫欄位，否則無法儲存。",[45,3277,3278],{},"不暸解該欄位意義，於是可能流於表象的填寫，對無障礙網頁沒有真正意義上的幫助，例如圖片 alt 的描述可能會比較模糊。",[45,3280,3281],{},"被抽測時，文章沒通過無障礙的機率非常高，就只能等待企業修復。",[17,3283,3284],{"id":3284},"解決方案",[10,3286,3287],{},"打造一個編輯器內工具",[42,3289,3290,3293,3296,3299,3302,3305],{},[45,3291,3292],{},"撰寫文章時可以即時檢測無障礙網頁規則。",[45,3294,3295],{},"提供該無障礙網頁錯誤的撰寫提示，每次錯誤時，撰文者可以學習一些無障礙網頁規範。",[45,3297,3298],{},"錯誤提示提供視覺化顯示，例如圖片錯誤的話，應顯示該圖片，並且點擊後可以將滑鼠鼠標移動到錯誤的位置。",[45,3300,3301],{},"使用者點擊檢測按鈕時觸發，或是自動即時檢測，但是不能直接跳出錯誤一直干擾撰文者編寫流程，只需要在按鈕文字後加上錯誤數量和改變顏色。例如，當錯誤在 5 個以下，按鈕文字顯示黃色，10 個以上就變成紅色，以提醒撰文者不要累積太多錯誤再更改，但也不打擾寫作。",[45,3303,3304],{},"建立指標，例如通過是 100 分，沒通過就按比例顯示分數。可利用遊戲化方式，鼓勵撰文者學習。",[45,3306,3307],{},"即使有錯誤，但仍然讓使用者可以儲存，儲存後在列表和檢測按鈕裡，有警告 icon 提示該文章尚未完成無障礙檢測。",[17,3309,3311],{"id":3310},"實作以-tinymce為例","實作：以 TinyMCE 為例",[3313,3314,3318,3321,3324,3338,3341,3344,3347,3351,3354,3357,3360,3364,3367,3370,3373,3376,3386,3389,3391],"code-pen-embed",{"default-tab":3315,"height":3316,"slug":3317},"result",600,"dPbVmPV",[2871,3319],{"height":2873,"src":3320,"type":2875,"width":2876},"https:\u002F\u002Fcodepen.io\u002Fneillin1023\u002Ffull\u002FdPbVmPV",[430,3322,3323],{"id":3323},"思路",[42,3325,3326,3329,3332,3335],{},[45,3327,3328],{},"制定格式、寫一次規則後，此格式的程式碼，可以輕易的在不同所見即所得編輯器中製作成外掛，才會更能推廣。",[45,3330,3331],{},"無障礙網頁規則通常只會新增的比較多，修正比較少，所以當規則第一次寫好後，維護不至於太困難，所以開發者負擔應該不會太多。",[45,3333,3334],{},"先以常見錯誤開發，先解決常見問題，再制定更細部規則。",[45,3336,3337],{},"要注意編輯器先天限制，假設編輯器本身圖片沒有給 alt 欄位，這時候即便您有檢查到沒寫 alt，也無濟於事。",[17,3339,3340],{"id":3340},"近期未來發展",[430,3342,3343],{"id":3343},"進階檢查",[10,3345,3346],{},"編輯器先天不足與客製化工具的搭配，成為獨家功能，進而開啟獲利模式。",[430,3348,3350],{"id":3349},"llm-自動修復","LLM 自動修復",[10,3352,3353],{},"若成本足夠低了，而且 AI 也能根據上下文給予圖片有意義的 alt 屬性或其他遵循規則，正確率也很高，就可加入自動修復。",[10,3355,3356],{},"在檢測分數後，有一顆按鈕點擊後，串 LLM 自動修復該欄位，並且給予適當的值。例如圖片的 alt，LLM OCR 後，自動判斷怎樣的描述會比較好。",[10,3358,3359],{},"但不要直接對內文馬上改，而是先提供預覽或是更動的地方，待點擊「同意變更」之類的按鈕後，再異動內文。",[430,3361,3363],{"id":3362},"llm-自動檢測","LLM 自動檢測",[10,3365,3366],{},"或者，乾脆也不用自己寫規則了。",[10,3368,3369],{},"如果未來 AI 夠強，只要編輯器工具列放一顆「一鍵自動檢測修復無障礙」就搞定了。",[17,3371,3372],{"id":3372},"額外要注意的地方",[10,3374,3375],{},"通常，網頁頁面的標題和副標題，不會在所見即所得的編輯器裡，這很大一部分是因為網頁排版問題。",[10,3377,3378,3379,3382,3383,3385],{},"所以，工程師最好在所見即所得的外層，包一層 ",[1444,3380,3381],{},"\u003Carticle>","，重置標籤 h 系列的順序(",[1444,3384,3381],{},"表示此內容足夠當作獨立一個頁面的內容)。這樣就不需要特別動到編輯器工具，否則，可能要根據網頁的排版，限制編輯器內建的標題從哪個開始。",[10,3387,3388],{},"另外，如果編輯器背景是透明，編輯器內的無障礙網頁檢查，可能沒辦法檢測到編輯器內外的問題。例如，編輯器內文字是白色，但編輯器外的背景也是白色，此狀況下，編輯器內的檢測工具，就沒辦法檢測顏色對比。",[17,3390,3201],{"id":3201},[10,3392,3393],{},"這樣的工具最主要是降低有關於達成無障礙網頁的成本，對開發商、撰文者、最終讀者都有利，並且技術難度不高，剩下的就是體驗問題和自動化成本問題。",{"title":177,"searchDepth":178,"depth":178,"links":3395},[3396,3397,3398,3399,3400,3401,3402],{"id":3240,"depth":181,"text":3240},{"id":3246,"depth":181,"text":3246},{"id":3284,"depth":181,"text":3284},{"id":3310,"depth":181,"text":3311},{"id":3340,"depth":181,"text":3340},{"id":3372,"depth":181,"text":3372},{"id":3201,"depth":181,"text":3201},"2025-01-01","以 TinyMCE 為例，為所見即所得（WYSIWYG）編輯器打造無障礙檢測工具，幫助撰稿者在自由編輯的同時，讓文章內容也符合無障礙網頁規範。",{},"\u002Fzh\u002Fblog\u002Ftinymce-custom-a11y-tool",{"title":3224,"description":3404},"zh\u002Fblog\u002Ftinymce-custom-a11y-tool",[199,201,200,202,3410],"TinyMCE","Pzf5MBBUcWQJT53-ZD8IVzyAFZ9dk-IelFCBSrUdu1A",{"id":3413,"title":3414,"body":3415,"date":3653,"description":3421,"draft":189,"extension":190,"meta":3654,"navigation":192,"ogImage":193,"path":3655,"seo":3656,"stem":3657,"tags":3658,"translationKey":193,"updatedAt":3220,"__hash__":3660},"blog_zh\u002Fzh\u002Fblog\u002Fcui-change-style.md","讓使用者透過 CUI 客製化網站風格",{"type":7,"value":3416,"toc":3642},[3417,3419,3422,3426,3429,3432,3440,3444,3447,3450,3453,3456,3459,3473,3481,3489,3497,3501,3510,3521,3525,3528,3531,3534,3537,3540,3543,3546,3550,3553,3556,3570,3573,3581,3584,3592,3595,3600,3604,3607,3615,3617,3620,3623,3626],[17,3418,395],{"id":395},[10,3420,3421],{},"本篇簡單探討如果使用者可以透過 CUI 改變網站排版與風格，進而打破目前由開發者規劃好的體驗，將有什麼好處和壞處",[17,3423,3425],{"id":3424},"什麼是-cui","什麼是 CUI",[10,3427,3428],{},"這裡指的 CUI，全名為 Conversational User Interface，中文並無統一的稱呼，通常以「對話式介面」、「交談式介面」常見之，也就是常常看到的「聊天機器人」、「Siri」的介面。",[10,3430,3431],{},"使用者可以透過這個介面，使用「自然語言」與「系統互動」達成目的。我沒有找到哪一個組織明定 CUI 這個詞到底定義是不是這樣，但應該是隨著技術發展而逐漸形成的概念。",[10,3433,3434,3435,3439],{},"例如，我曾經發想過的一篇文章「如果使用即時通訊 UI 來設計購物車結帳流程，會是什麼樣的感覺？」(",[87,3436,3438],{"href":3437},"\u002Fblog\u002Fshopping-in-chat-ui","文章連結",")，整個畫面雖然是「對話」，但其實並不屬於 CUI 的範疇裡，因為不符合「自然語言」這項條件。",[17,3441,3443],{"id":3442},"cui-起源","CUI 起源",[10,3445,3446],{},"即時通訊開始興起時，可以視為 CUI 的前身，其人與人「對話」的方式，為現今 CUI 的高接受度提供了使用前置習慣與經驗。",[10,3448,3449],{},"當自然語言處理(Natural Language Processing, NLP)技術的開始進步，結合對話的方式，造就各大社群、即時通訊軟體以及網站紛紛開始建立各式各樣的聊天機器人，人與系統間的互動達成資訊自動化處理、減少人工成本。",[10,3451,3452],{},"緊接著 Siri 的出現，開始提供文字以外的自然語言與系統互動，人們開始意識到自然語言交流的潛力，也就開始出現各式各樣的家庭控制中心、物聯網生態，例如 Google Nest，但大概也就僅止於此，普遍大家都還是會覺得「很笨」，或是局限在語言支援度不同。",[10,3454,3455],{},"如今，LLM 的爆炸性發展，讓人們對未來 AI 紀元的來臨，不再只是存在於小說裡的幻想，而是實質感受到「可能真的會實現」。",[10,3457,3458],{},"CUI 出現方式\n目前我們可以看到 CUI 有好幾種出現的方式：",[42,3460,3461,3464,3467,3470],{},[45,3462,3463],{},"獨立專屬的頁面：ChatGPT、Gemini、Perplexity、NotebookLM",[45,3465,3466],{},"依附在瀏覽器裡的功能：Edge Copilot、Monica Chrome Extension",[45,3468,3469],{},"出現在網站或 APP 隨時可展開式的：政府資料開放平臺的小幫手",[45,3471,3472],{},"依附在應用程式裡：Microsoft 365 Copilot",[104,3474,3475],{},[10,3476,3477],{},[109,3478],{"alt":3479,"src":3480},"Edge Copilot 的問答展示","\u002Fimages\u002Fblog\u002F30.png",[104,3482,3483],{},[10,3484,3485],{},[109,3486],{"alt":3487,"src":3488},"政府資料開放平臺的小幫手 TAIDE 的回答情形","\u002Fimages\u002Fblog\u002F31.webp",[104,3490,3491],{},[10,3492,3493],{},[109,3494],{"alt":3495,"src":3496},"Microsoft Office Excel 的 Copilot 使用情境","\u002Fimages\u002Fblog\u002F32.webp",[17,3498,3500],{"id":3499},"cui-分類","CUI 分類",[10,3502,3503,3504,3509],{},"根據「",[87,3505,3508],{"href":3506,"rel":3507,"target":92,"title":93},"https:\u002F\u002F53ai.com\u002Fnews\u002Fzhinengkefu\u002F2024063018930.html",[91],"談任務型智能客服","」此篇文章，CUI 可以以下三種分類",[42,3511,3512,3515,3518],{},[45,3513,3514],{},"依場景分類",[45,3516,3517],{},"依技術分類",[45,3519,3520],{},"依範圍分類",[17,3522,3524],{"id":3523},"我認為-cui的下一步","我認為 CUI 的下一步",[10,3526,3527],{},"我認為，CUI 要走的下一步，會是類似 Microsoft 365 Copilot 這種模式，但不僅是在辦公軟體提升生產力，而是一般網站也可以使用。",[10,3529,3530],{},"例如，現在我們可以利用 Edge Copilot 查詢目前頁面並問問題，但是問完問題後，答案或結論都是在對話內容裡面，還需要使用者自行點擊對話內容的連結，觸發事件或前往網頁，這裡就形成一個使用體驗的斷點，有一種把Copilot 和網頁切開成不同世界的感覺。",[10,3532,3533],{},"如果我能在網站的 CUI 可以問問題之外還能跟網頁互動，那將會再更提高體驗。例如，我在銀行網頁的 CUI，直接輸入，幫我找某張信用卡資訊，那麼網頁就會自動跳到該張信用卡介紹頁，對話內容可能就會是：已經幫您導至XX 信用卡頁面，這張主要是 blah blah blah…。如此，對話跟頁面就會對得起來，也不用一直懷疑對話內容是不是正確的，然後還要去查詢。因為網頁是不是正確的，一看就知道。",[10,3535,3536],{},"基於此原理，那麼要實現「透過 CUI 客製化網站風格」的話，首先就會排除瀏覽器擴充程式的方式建立，因為會有安全性問題，瀏覽器擴充程式要跟網頁進行深度的互動一定會遇到很多限制。",[10,3538,3539],{},"再來，因為是一般網站，所以排除放在專屬應用程式裡的方式，雖然某種程度很相像，但專屬應用和一般網站仍舊有所差異，因為一般網站改變排版和風格比較容易，您可以想想如果您改變了 Excel 的排版和風格。",[10,3541,3542],{},"第三，依定也是排除專屬網頁的形式，因為整個介面都是對話，結果也在對話裡，沒辦法跟網站互動。",[10,3544,3545],{},"也就是說，要完成「透過 CUI 客製化網站風格」這件事，使用常見的「點擊按鈕展開視窗」這種會比較適合，因為是網站開發者自行建立，應該可以針對 LLM 的回應，執行下一步的互動，並且要可以儲存狀態。",[17,3547,3549],{"id":3548},"透過-cui-客製化網站風格有什麼好處和壞處","透過 CUI 客製化網站風格有什麼好處和壞處",[10,3551,3552],{},"以下只是我大概腦海一閃的想法，應該會有很大的思考不周，就當作是發想筆記也好，會陸續補充。",[10,3554,3555],{},"對開發者可能的好處：",[42,3557,3558,3567],{},[45,3559,3560,3561,3566],{},"不再需要維護多種版面，什麼 dark mode、multi style mode、圖片模式、圖文模式等，都給使用者決定就好。也就是NN Group 在「",[87,3562,3565],{"href":3563,"rel":3564,"target":92,"title":93},"https:\u002F\u002Fwww.nngroup.com\u002Farticles\u002Fgenerative-ui\u002F",[91],"Generative UI and Outcome-Oriented Design","」提到的 Generative UI (GenUI) 概念",[45,3568,3569],{},"因為只做一種版面與風格，可以將重點放在資訊的傳遞、效能以及優化 CUI 有關於業務的對話邏輯和操作上。",[10,3571,3572],{},"對開發者可能的壞處：",[42,3574,3575,3578],{},[45,3576,3577],{},"品牌識別可能要想別的方法塑造，因為網站的排版、風格甚至網站體驗都交由使用者決定了。",[45,3579,3580],{},"安全性問題：也許有可能使用者透過漏洞，對網站造成了某種影響。",[10,3582,3583],{},"對使用者可能的好處：",[42,3585,3586,3589],{},[45,3587,3588],{},"依據自身狀況，調整喜歡的顏色、排版瀏覽網頁",[45,3590,3591],{},"補強無障礙網頁技術設定不足之處，例如：透過 LLM 的程式碼功能，將原本只通過 AA 等級的，改成可以通過 AAA 等級的。",[10,3593,3594],{},"對使用者可能的壞處：",[42,3596,3597],{},[45,3598,3599],{},"開發者可能會開始偷懶，變成什麼東西都要使用者自行設定，排版變得比現在的 LandingPage 更制式化",[17,3601,3603],{"id":3602},"demo","DEMO",[10,3605,3606],{},"這是一個很笨的程式也是本篇文章發想起源，我的目的是希望當網頁不符合無障礙 AA 時，使用者可以透過 CUI 補救網頁。但這個很笨的程式只能回答出 CSS ，並且被我特意放置在最後一個引入，才能覆蓋之前的 CSS。希望透過這樣一個小 Demo，能激發出大家的靈感。",[104,3608,3609],{},[10,3610,3611],{},[109,3612],{"alt":3613,"src":3614},"利用生程式 AI 對話直接改變網站風格","\u002Fimages\u002Fblog\u002F33.gif",[17,3616,3201],{"id":3201},[10,3618,3619],{},"我的理想上網站會有一個客服小幫手，這個小幫手除了可以諮詢網站內容，也會自動引導，也可以改變網站外觀，甚至是要填寫內容時，就直接生成在網頁裡而不是生成在對話視窗裡等等的「下一步」動作，對話視窗內只要留下「復原」或是其他動作快捷按鈕等附加功能。因為這個「下一步」，所以開發者勢必要把精力放在 CUI 的業務對話邏輯和操作上，更近一步把斷點消除，當然，這個「下一步」在什麼時間點要吐出什麼專業的內容跟網頁互動，應該又是另一個訓練的過程，這我就不清楚了。",[10,3621,3622],{},"總之一句話，CUI 會變成網站的「控制中心」。",[17,3624,3625],{"id":3625},"參考來源",[42,3627,3628,3635],{},[45,3629,3630],{},[87,3631,3634],{"href":3632,"rel":3633,"target":92,"title":93},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FConversational_user_interface",[91],"Conversational user interface",[45,3636,3637],{},[87,3638,3641],{"href":3639,"rel":3640,"target":92,"title":93},"https:\u002F\u002Fmedium.com\u002Fuxeastmeetswest\u002F59aa90c4322c",[91],"新趨勢！對話式設計的八種原則！",{"title":177,"searchDepth":178,"depth":178,"links":3643},[3644,3645,3646,3647,3648,3649,3650,3651,3652],{"id":395,"depth":181,"text":395},{"id":3424,"depth":181,"text":3425},{"id":3442,"depth":181,"text":3443},{"id":3499,"depth":181,"text":3500},{"id":3523,"depth":181,"text":3524},{"id":3548,"depth":181,"text":3549},{"id":3602,"depth":181,"text":3603},{"id":3201,"depth":181,"text":3201},{"id":3625,"depth":181,"text":3625},"2024-12-23",{},"\u002Fzh\u002Fblog\u002Fcui-change-style",{"title":3414,"description":3421},"zh\u002Fblog\u002Fcui-change-style",[199,201,200,202,3659],"CUI","gjBvdV1WY1mRMI2s3767zOCUzk0zA6lwWtXvc3y1JsE",{"id":3662,"title":3663,"body":3664,"date":3746,"description":3747,"draft":189,"extension":190,"meta":3748,"navigation":192,"ogImage":193,"path":3749,"seo":3750,"stem":3751,"tags":3752,"translationKey":193,"updatedAt":193,"__hash__":3756},"blog_zh\u002Fzh\u002Fblog\u002Fdo-i-really-need-a-generative-ai-tool-to-generate-a-full-web-design-layout.md","我真的需要一個生成式 AI 工具來產生整份網頁設計稿嗎？",{"type":7,"value":3665,"toc":3743},[3666,3674,3681,3684,3687,3690,3693,3707,3711,3714,3717,3720,3723,3726,3729,3732,3735,3738,3740],[104,3667,3668],{},[10,3669,3670],{},[109,3671],{"alt":3672,"src":3673},"Framer AI Landing Page","\u002Fimages\u002Fblog\u002F25.webp",[10,3675,3676],{},[87,3677,3680],{"href":3678,"rel":3679,"target":92,"title":93},"https:\u002F\u002Fwww.framer.com\u002Fai",[91],"Framer AI 介紹頁",[10,3682,3683],{},"ChatGPT 問世後，AI 各領域引起了關注，在靈感、知識、素材方面我也都有使用，非常方便。",[10,3685,3686],{},"但如今我試用了 Framer AI 之後，我的心裡有這種念頭出現：",[10,3688,3689],{},"「我真的需要一個生成式 AI 工具來產生整份網頁設計稿嗎？」",[10,3691,3692],{},"這個議題很廣，而且目前各廠商都只是在試驗各種可能，但我用完之後是非常明確產生了這個疑惑。考量到的點有：",[42,3694,3695,3698,3701,3704],{},[45,3696,3697],{},"如何維護？\n先假設 AI 產出了一個符合我心中 100% 的 UI ，這種情況下如果我只是要修改某個頁面內容，但又不想要破壞整體性，該如何下 prompt？變成我的心思都在想怎麼 prompt，不是專注在設計修正。",[45,3699,3700],{},"複雜頁面給的 prompt 會不會太複雜？\n比方說我給了以下一段文字：\n「請使用極簡風格、溫暖色調製作網頁，網頁內容必須有頁首、主要內容、頁尾區塊，頁首要有 logo 、選單，選單內的選項要有網站導覽、常見問答、登入，頁尾要深色背景、有logo、隱私權政策連結、copyright 資訊。主要內容分為…」\n我打到這裡手就痠了，要產出一個我真正想要的內容，必須很深入的描述整個頁面結構，可能要寫出一篇作文了。這跟用 AI 生成照片的過程，CP 值差太多了，然後部分頁面是我要的、部分頁面不是，又回到如何維護問題。",[45,3702,3703],{},"電腦效能，設計資源落差將擴大！\n跑繪圖電腦本身就要有一點等級，再加上 AI ，效能當然要夠強，才能節省時間，然後每次提到這個我們都會想到「啊～以後的電腦運算能力會多強多強…以後就很快很輕鬆」，包含我自己也會這樣，但我們也常忽略軟體面也會更新，所以根本沒有所謂的「很快很輕鬆」這回事。\n另外，我們也常忽略的通用設計議題，當一個地區或某些人用的設備可能稍微老舊，就可能沒辦法用到新的技術，資源取用就產生落差。",[45,3705,3706],{},"生成出來的包含 RWD ，有必要一開始就生成這些？\n內容都還沒確定下來就在想 RWD 真的是太早了。",[17,3708,3710],{"id":3709},"快速心得是這樣子所以來下個結論","快速心得是這樣子，所以來下個結論",[10,3712,3713],{},"局部特殊鑽研的 AI 功能對於網頁設計來說可能才是好事，較具有靈活性，負擔也比較不會那麼重。",[10,3715,3716],{},"例如，我先使用專門研究設計系統的 AI ，產出一份我要的設計系統，包含規範、文件和元件庫，然後請 AI 記住以後都要遵循這個最高原則實行。",[10,3718,3719],{},"當我設計 Hero 區塊時，生成 Hero 區塊的幾個排版讓我選擇，其中細項修正例如照片去除物體、影片加聲音、插圖換姿勢、目標物視角修正等還可以用 AI 調整。",[10,3721,3722],{},"使用目前已經很流行的 ChatGPT，幫忙文案 SEO 最佳化。",[10,3724,3725],{},"將某個區域選取，請 AI 幫我根據設計系統重新修正，包含排版、文案、按鈕位置等。",[10,3727,3728],{},"這些都確定後，再用專門產出 RWD 的 AI，選擇參照哪個設計系統，幫我產出網頁 RWD 用、原生行動裝置使用的各項尺寸 UI 稿、原生行動裝置需要用的圖檔等。所以我只需要維護內容最主要、最多的畫面就好，其他用生成的。",[10,3730,3731],{},"而以上的這些功能，以 Figma 來說，都只是 plugin 而已，無用無損失，局部 AI 也降低電腦使用的負擔，也激發很多人開發更好用的 Plugin，即便之後 Plugin 沒有維護了，也很容易取得新的替代品，就算沒有替代品，也就是回歸到原本的狀態而已。而又因為我們使用了 AI 產出設計系統，除非 Figma 重大更新，例如命名規則功能產生變化，不然外掛不能用都是小事罷了。",[10,3733,3734],{},"也就是說，對於我而言，工具的靈活性才會是重點，因為設計師的腦不斷的在發想，隨時就需要快速修正與驗證。當然 Framer 也可能只是先推出這個 MVP ，再進行後續優化，到時當然樂見其成。",[10,3736,3737],{},"現在來正式回答一下問題：",[10,3739,3689],{},[10,3741,3742],{},"「我不需要，請讓我專注在需要解決的問題，而不是寫 prompt 作文。」",{"title":177,"searchDepth":178,"depth":178,"links":3744},[3745],{"id":3709,"depth":181,"text":3710},"2023-06-16","試用 Framer AI 產生整份網頁設計稿後的心得：生成式 AI 在靈感、知識與素材上很方便，但要它直接產出一整份設計稿，真的是我需要的嗎？",{},"\u002Fzh\u002Fblog\u002Fdo-i-really-need-a-generative-ai-tool-to-generate-a-full-web-design-layout",{"title":3663,"description":3747},"zh\u002Fblog\u002Fdo-i-really-need-a-generative-ai-tool-to-generate-a-full-web-design-layout",[3753,1409,3754,3755],"網頁設計","Generative AI","Framer","-nMRUNe5A6mDeaD93ypy-X586O64ZHS4hox9y84M1Jg",{"id":3758,"title":3759,"body":3760,"date":4563,"description":4564,"draft":189,"extension":190,"meta":4565,"navigation":192,"ogImage":193,"path":4566,"seo":4567,"stem":4568,"tags":4569,"translationKey":193,"updatedAt":193,"__hash__":4573},"blog_zh\u002Fzh\u002Fblog\u002Fwhy-i-love-emoji.md","為什麼我愛上了在設計與切版時使用 Emoji",{"type":7,"value":3761,"toc":4556},[3762,3765,3768,3772,3781,3795,3798,3802,3805,3808,3816,3824,3837,3840,3843,3846,3850,3853,4010,4013,4079,4085,4167,4170,4251,4254,4326,4329,4400,4408,4412,4420,4423,4427,4430,4438,4441,4448,4451,4454,4457,4460,4463,4466,4474,4517,4520,4546,4549,4552],[10,3763,3764],{},"越少依賴，就越不會出問題，且越貼心。",[10,3766,3767],{},"自從專注在無障礙網頁設計之後，始終有一個問題一直盤旋在我的腦海裡，那就是「要如何使用 icon 才能達成好的無障礙設計體驗？」，而在回答這個問題之前，則是要先理解什麼是 icon 以及 icon 會如何影響整個網站視覺。",[17,3769,3771],{"id":3770},"什麼是-icon","什麼是 icon ?",[10,3773,3774,3775,3780],{},"根據",[87,3776,3779],{"href":3777,"rel":3778,"target":92,"title":93},"https:\u002F\u002Fzh.wikipedia.org\u002Fzh-tw\u002F%E5%9C%96%E7%A4%BA",[91],"維基百科","定義：",[22,3782,3783],{},[10,3784,3785,3786,3788,3789,3791,3792,3794],{},"圖示（icon，中國大陸、香港作圖標）：",[28,3787],{},"\n廣義上指所有「有指示作用」的標誌，",[28,3790],{},"\n在中文中，一般指電腦螢幕的桌面上，",[28,3793],{},"\n用來「指示」使用者執行各種操作的圖像，作為字元顯示的「重要輔助」。",[10,3796,3797],{},"應該蠻好理解的，也就是「有指示、輔助作用的標誌」。但同時也點出了第一個問題：icon 很常被拿來純裝飾用，或單獨使用。",[17,3799,3801],{"id":3800},"icon-會如何影響整個網站視覺","icon 會如何影響整個網站視覺？",[10,3803,3804],{},"既然是輔助性質，那當然就是 icon 要去搭配主要視覺。",[10,3806,3807],{},"例如主視覺是可愛、活潑，通常都會搭配圓角、線條相較粗的 icon，如果主視覺偏向精明幹練、專業的話，通常會搭配直角、線條較細的 icon，來保持整個網站風格的一致性。",[104,3809,3810],{},[10,3811,3812],{},[109,3813],{"alt":3814,"src":3815},"icon 風格範例，線條外框類型，可愛圓潤","\u002Fimages\u002Fblog\u002F22.webp",[104,3817,3818],{},[10,3819,3820],{},[109,3821],{"alt":3822,"src":3823},"icon 風格範例，線條外框類型，銳利幹練","\u002Fimages\u002Fblog\u002F23.webp",[10,3825,3826,3827,3831,3832,3836],{},"一樣都是線條類型的icon，第一張圖呈現風格較為可愛圓潤(\n",[87,3828,403],{"href":3829,"rel":3830,"target":92,"title":93},"https:\u002F\u002Fdesignmodo.com\u002Flinecons-free\u002F",[91]," )、第二張圖則銳利幹練(\n",[87,3833,403],{"href":3834,"rel":3835,"target":92,"title":93},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fwindows\u002Fapps\u002Fdesign\u002Fstyle\u002Ficons",[91],"\n)",[10,3838,3839],{},"所以通常不建議使用兩種以上的 icon 系統，因爲會讓視覺上有怪異的地方，即使是相同系列的 icon，只要粗細不同，體驗就會差異相當大。這裡引出了第二個問題點：切版維護時 icon 不夠用，就會自建或拿別套 icon 來使用。",[10,3841,3842],{},"理解了前兩個問題後，回到了我們的核心問題，因為設計跟切版都會影響到，考量切版層面會碰到比較多問題，所以先從切版的角度切入，最後回頭影響設計實務上會比較合理一點。",[10,3844,3845],{},"先整理一下剛剛碰到的問題：",[17,3847,3849],{"id":3848},"_1-icon-很常被拿來純裝飾用或單獨使用","1. icon 很常被拿來純裝飾用，或單獨使用：",[10,3851,3852],{},"如果只是被拿來用成背景裝飾，那不太會有問題，因為就只是個裝飾，不需要去解釋，有問題的會是在單獨使用，在做無障礙網頁設計時，一般建議 icon 與文字一起使用，或是文字在畫面上隱藏，但在報讀軟體中會讀出來。",[3854,3855,3859],"pre",{"className":3856,"code":3857,"language":3858,"meta":177,"style":177},"language-html shiki shiki-themes github-light github-dark","\u003C!-- icon 與 文字一起使用 -->\n\u003Cbutton>\n  \u003Cspan>訂閱電子郵件\u003C\u002Fspan>\n  \u003Ci class=\"xxx\">\u003C\u002Fi>\n\u003C\u002Fbutton>\n\n\u003C!-- 文字在畫面上隱藏，但在報讀軟體中會讀出來 -->\n\u003Cbutton>\n  \u003Cspan class=\"visually-hidden\">訂閱電子郵件\u003C\u002Fspan>\n  \u003Ci class=\"xxx\" aria-hidden=\"true\">\u003C\u002Fi>\n\u003C\u002Fbutton>\n","html",[1444,3860,3861,3870,3883,3897,3923,3933,3939,3945,3954,3974,4001],{"__ignoreMap":177},[3862,3863,3866],"span",{"class":3864,"line":3865},"line",1,[3862,3867,3869],{"class":3868},"sdCPZ","\u003C!-- icon 與 文字一起使用 -->\n",[3862,3871,3872,3876,3880],{"class":3864,"line":178},[3862,3873,3875],{"class":3874},"ssxIu","\u003C",[3862,3877,3879],{"class":3878},"sk71V","button",[3862,3881,3882],{"class":3874},">\n",[3862,3884,3885,3888,3890,3893,3895],{"class":3864,"line":181},[3862,3886,3887],{"class":3874},"  \u003C",[3862,3889,3862],{"class":3878},[3862,3891,3892],{"class":3874},">訂閱電子郵件\u003C\u002F",[3862,3894,3862],{"class":3878},[3862,3896,3882],{"class":3874},[3862,3898,3900,3902,3905,3909,3912,3916,3919,3921],{"class":3864,"line":3899},4,[3862,3901,3887],{"class":3874},[3862,3903,3904],{"class":3878},"i",[3862,3906,3908],{"class":3907},"sIsaT"," class",[3862,3910,3911],{"class":3874},"=",[3862,3913,3915],{"class":3914},"sJ6F3","\"xxx\"",[3862,3917,3918],{"class":3874},">\u003C\u002F",[3862,3920,3904],{"class":3878},[3862,3922,3882],{"class":3874},[3862,3924,3926,3929,3931],{"class":3864,"line":3925},5,[3862,3927,3928],{"class":3874},"\u003C\u002F",[3862,3930,3879],{"class":3878},[3862,3932,3882],{"class":3874},[3862,3934,3936],{"class":3864,"line":3935},6,[3862,3937,3938],{"emptyLinePlaceholder":192},"\n",[3862,3940,3942],{"class":3864,"line":3941},7,[3862,3943,3944],{"class":3868},"\u003C!-- 文字在畫面上隱藏，但在報讀軟體中會讀出來 -->\n",[3862,3946,3948,3950,3952],{"class":3864,"line":3947},8,[3862,3949,3875],{"class":3874},[3862,3951,3879],{"class":3878},[3862,3953,3882],{"class":3874},[3862,3955,3957,3959,3961,3963,3965,3968,3970,3972],{"class":3864,"line":3956},9,[3862,3958,3887],{"class":3874},[3862,3960,3862],{"class":3878},[3862,3962,3908],{"class":3907},[3862,3964,3911],{"class":3874},[3862,3966,3967],{"class":3914},"\"visually-hidden\"",[3862,3969,3892],{"class":3874},[3862,3971,3862],{"class":3878},[3862,3973,3882],{"class":3874},[3862,3975,3977,3979,3981,3983,3985,3987,3990,3992,3995,3997,3999],{"class":3864,"line":3976},10,[3862,3978,3887],{"class":3874},[3862,3980,3904],{"class":3878},[3862,3982,3908],{"class":3907},[3862,3984,3911],{"class":3874},[3862,3986,3915],{"class":3914},[3862,3988,3989],{"class":3907}," aria-hidden",[3862,3991,3911],{"class":3874},[3862,3993,3994],{"class":3914},"\"true\"",[3862,3996,3918],{"class":3874},[3862,3998,3904],{"class":3878},[3862,4000,3882],{"class":3874},[3862,4002,4004,4006,4008],{"class":3864,"line":4003},11,[3862,4005,3928],{"class":3874},[3862,4007,3879],{"class":3878},[3862,4009,3882],{"class":3874},[10,4011,4012],{},"但實務上也會碰到這樣的情況：",[3854,4014,4016],{"className":3856,"code":4015,"language":3858,"meta":177,"style":177},"\u003C!-- 文字在畫面上隱藏，但在報讀軟體中會讀出來 -->\n\u003Cbutton>\n  \u003Cspan class=\"visually-hidden\">訂閱電子郵件\u003C\u002Fspan>\n  \u003Csvg>\n    ...\n  \u003C\u002Fsvg>\n\u003C\u002Fbutton>\n",[1444,4017,4018,4022,4030,4048,4057,4062,4071],{"__ignoreMap":177},[3862,4019,4020],{"class":3864,"line":3865},[3862,4021,3944],{"class":3868},[3862,4023,4024,4026,4028],{"class":3864,"line":178},[3862,4025,3875],{"class":3874},[3862,4027,3879],{"class":3878},[3862,4029,3882],{"class":3874},[3862,4031,4032,4034,4036,4038,4040,4042,4044,4046],{"class":3864,"line":181},[3862,4033,3887],{"class":3874},[3862,4035,3862],{"class":3878},[3862,4037,3908],{"class":3907},[3862,4039,3911],{"class":3874},[3862,4041,3967],{"class":3914},[3862,4043,3892],{"class":3874},[3862,4045,3862],{"class":3878},[3862,4047,3882],{"class":3874},[3862,4049,4050,4052,4055],{"class":3864,"line":3899},[3862,4051,3887],{"class":3874},[3862,4053,4054],{"class":3878},"svg",[3862,4056,3882],{"class":3874},[3862,4058,4059],{"class":3864,"line":3925},[3862,4060,4061],{"class":3874},"    ...\n",[3862,4063,4064,4067,4069],{"class":3864,"line":3935},[3862,4065,4066],{"class":3874},"  \u003C\u002F",[3862,4068,4054],{"class":3878},[3862,4070,3882],{"class":3874},[3862,4072,4073,4075,4077],{"class":3864,"line":3941},[3862,4074,3928],{"class":3874},[3862,4076,3879],{"class":3878},[3862,4078,3882],{"class":3874},[10,4080,4081,4082,4084],{},"然後因為 freego 掃描時會去掃 ",[1444,4083,3135],{},"，會發現沒有 title，然後 svg 的 title 又要放在第一個子項目，所以又要改成：",[3854,4086,4088],{"className":3856,"code":4087,"language":3858,"meta":177,"style":177},"\u003C!-- 文字在畫面上隱藏，但在報讀軟體中會讀出來 -->\n\u003C!-- 文字在畫面上隱藏，但在報讀軟體中會讀出來 -->\n\u003Cbutton>\n  \u003Cspan class=\"visually-hidden\">訂閱電子郵件\u003C\u002Fspan>\n  \u003Csvg>\n    \u003Ctitle>email icon\u003C\u002Ftitle>\n    ...\n  \u003C\u002Fsvg>\n\u003C\u002Fbutton>\n",[1444,4089,4090,4094,4098,4106,4124,4132,4147,4151,4159],{"__ignoreMap":177},[3862,4091,4092],{"class":3864,"line":3865},[3862,4093,3944],{"class":3868},[3862,4095,4096],{"class":3864,"line":178},[3862,4097,3944],{"class":3868},[3862,4099,4100,4102,4104],{"class":3864,"line":181},[3862,4101,3875],{"class":3874},[3862,4103,3879],{"class":3878},[3862,4105,3882],{"class":3874},[3862,4107,4108,4110,4112,4114,4116,4118,4120,4122],{"class":3864,"line":3899},[3862,4109,3887],{"class":3874},[3862,4111,3862],{"class":3878},[3862,4113,3908],{"class":3907},[3862,4115,3911],{"class":3874},[3862,4117,3967],{"class":3914},[3862,4119,3892],{"class":3874},[3862,4121,3862],{"class":3878},[3862,4123,3882],{"class":3874},[3862,4125,4126,4128,4130],{"class":3864,"line":3925},[3862,4127,3887],{"class":3874},[3862,4129,4054],{"class":3878},[3862,4131,3882],{"class":3874},[3862,4133,4134,4137,4140,4143,4145],{"class":3864,"line":3935},[3862,4135,4136],{"class":3874},"    \u003C",[3862,4138,4139],{"class":3878},"title",[3862,4141,4142],{"class":3874},">email icon\u003C\u002F",[3862,4144,4139],{"class":3878},[3862,4146,3882],{"class":3874},[3862,4148,4149],{"class":3864,"line":3941},[3862,4150,4061],{"class":3874},[3862,4152,4153,4155,4157],{"class":3864,"line":3947},[3862,4154,4066],{"class":3874},[3862,4156,4054],{"class":3878},[3862,4158,3882],{"class":3874},[3862,4160,4161,4163,4165],{"class":3864,"line":3956},[3862,4162,3928],{"class":3874},[3862,4164,3879],{"class":3878},[3862,4166,3882],{"class":3874},[10,4168,4169],{},"然後 svg title 又不希望被報讀出來，所以再改一次：",[3854,4171,4173],{"className":3856,"code":4172,"language":3858,"meta":177,"style":177},"\u003C!-- 文字在畫面上隱藏，但在報讀軟體中會讀出來 -->\n\u003Cbutton>\n  \u003Cspan class=\"visually-hidden\">訂閱電子郵件\u003C\u002Fspan>\n  \u003Csvg aria-hidden=\"true\">\n    \u003Ctitle>email icon\u003C\u002Ftitle>\n    ...\n  \u003C\u002Fsvg>\n\u003C\u002Fbutton>\n",[1444,4174,4175,4179,4187,4205,4219,4231,4235,4243],{"__ignoreMap":177},[3862,4176,4177],{"class":3864,"line":3865},[3862,4178,3944],{"class":3868},[3862,4180,4181,4183,4185],{"class":3864,"line":178},[3862,4182,3875],{"class":3874},[3862,4184,3879],{"class":3878},[3862,4186,3882],{"class":3874},[3862,4188,4189,4191,4193,4195,4197,4199,4201,4203],{"class":3864,"line":181},[3862,4190,3887],{"class":3874},[3862,4192,3862],{"class":3878},[3862,4194,3908],{"class":3907},[3862,4196,3911],{"class":3874},[3862,4198,3967],{"class":3914},[3862,4200,3892],{"class":3874},[3862,4202,3862],{"class":3878},[3862,4204,3882],{"class":3874},[3862,4206,4207,4209,4211,4213,4215,4217],{"class":3864,"line":3899},[3862,4208,3887],{"class":3874},[3862,4210,4054],{"class":3878},[3862,4212,3989],{"class":3907},[3862,4214,3911],{"class":3874},[3862,4216,3994],{"class":3914},[3862,4218,3882],{"class":3874},[3862,4220,4221,4223,4225,4227,4229],{"class":3864,"line":3925},[3862,4222,4136],{"class":3874},[3862,4224,4139],{"class":3878},[3862,4226,4142],{"class":3874},[3862,4228,4139],{"class":3878},[3862,4230,3882],{"class":3874},[3862,4232,4233],{"class":3864,"line":3935},[3862,4234,4061],{"class":3874},[3862,4236,4237,4239,4241],{"class":3864,"line":3941},[3862,4238,4066],{"class":3874},[3862,4240,4054],{"class":3878},[3862,4242,3882],{"class":3874},[3862,4244,4245,4247,4249],{"class":3864,"line":3947},[3862,4246,3928],{"class":3874},[3862,4248,3879],{"class":3878},[3862,4250,3882],{"class":3874},[10,4252,4253],{},"或是乾脆直接在 svg 使用 aria-labelledby：",[3854,4255,4257],{"className":3856,"code":4256,"language":3858,"meta":177,"style":177},"\u003C!-- 文字在畫面上隱藏，但在報讀軟體中會讀出來 -->\n\u003Cbutton>\n  \u003Csvg aria-labelledby=\"abc\">\n    \u003Ctitle id=\"abc\">email icon\u003C\u002Ftitle>\n    ...\n  \u003C\u002Fsvg>\n\u003C\u002Fbutton>\n",[1444,4258,4259,4263,4271,4287,4306,4310,4318],{"__ignoreMap":177},[3862,4260,4261],{"class":3864,"line":3865},[3862,4262,3944],{"class":3868},[3862,4264,4265,4267,4269],{"class":3864,"line":178},[3862,4266,3875],{"class":3874},[3862,4268,3879],{"class":3878},[3862,4270,3882],{"class":3874},[3862,4272,4273,4275,4277,4280,4282,4285],{"class":3864,"line":181},[3862,4274,3887],{"class":3874},[3862,4276,4054],{"class":3878},[3862,4278,4279],{"class":3907}," aria-labelledby",[3862,4281,3911],{"class":3874},[3862,4283,4284],{"class":3914},"\"abc\"",[3862,4286,3882],{"class":3874},[3862,4288,4289,4291,4293,4296,4298,4300,4302,4304],{"class":3864,"line":3899},[3862,4290,4136],{"class":3874},[3862,4292,4139],{"class":3878},[3862,4294,4295],{"class":3907}," id",[3862,4297,3911],{"class":3874},[3862,4299,4284],{"class":3914},[3862,4301,4142],{"class":3874},[3862,4303,4139],{"class":3878},[3862,4305,3882],{"class":3874},[3862,4307,4308],{"class":3864,"line":3925},[3862,4309,4061],{"class":3874},[3862,4311,4312,4314,4316],{"class":3864,"line":3935},[3862,4313,4066],{"class":3874},[3862,4315,4054],{"class":3878},[3862,4317,3882],{"class":3874},[3862,4319,4320,4322,4324],{"class":3864,"line":3941},[3862,4321,3928],{"class":3874},[3862,4323,3879],{"class":3878},[3862,4325,3882],{"class":3874},[10,4327,4328],{},"或是直接放棄，就還是維持 icon 搭配文字：",[3854,4330,4332],{"className":3856,"code":4331,"language":3858,"meta":177,"style":177},"\u003Cbutton>\n  \u003Cspan>訂閱電子郵件\u003C\u002Fspan>\n  \u003Csvg aria-hidden=\"true\">\n    \u003Ctitle>email icon\u003C\u002Ftitle>\n    ...\n  \u003C\u002Fsvg>\n\u003C\u002Fbutton>\n",[1444,4333,4334,4342,4354,4368,4380,4384,4392],{"__ignoreMap":177},[3862,4335,4336,4338,4340],{"class":3864,"line":3865},[3862,4337,3875],{"class":3874},[3862,4339,3879],{"class":3878},[3862,4341,3882],{"class":3874},[3862,4343,4344,4346,4348,4350,4352],{"class":3864,"line":178},[3862,4345,3887],{"class":3874},[3862,4347,3862],{"class":3878},[3862,4349,3892],{"class":3874},[3862,4351,3862],{"class":3878},[3862,4353,3882],{"class":3874},[3862,4355,4356,4358,4360,4362,4364,4366],{"class":3864,"line":181},[3862,4357,3887],{"class":3874},[3862,4359,4054],{"class":3878},[3862,4361,3989],{"class":3907},[3862,4363,3911],{"class":3874},[3862,4365,3994],{"class":3914},[3862,4367,3882],{"class":3874},[3862,4369,4370,4372,4374,4376,4378],{"class":3864,"line":3899},[3862,4371,4136],{"class":3874},[3862,4373,4139],{"class":3878},[3862,4375,4142],{"class":3874},[3862,4377,4139],{"class":3878},[3862,4379,3882],{"class":3874},[3862,4381,4382],{"class":3864,"line":3925},[3862,4383,4061],{"class":3874},[3862,4385,4386,4388,4390],{"class":3864,"line":3935},[3862,4387,4066],{"class":3874},[3862,4389,4054],{"class":3878},[3862,4391,3882],{"class":3874},[3862,4393,4394,4396,4398],{"class":3864,"line":3941},[3862,4395,3928],{"class":3874},[3862,4397,3879],{"class":3878},[3862,4399,3882],{"class":3874},[10,4401,4402,4403],{},"相信到這裡你已經發現到，光是這樣一個簡單的情境，就可以使用很多種不同的方式寫出來，甚至還會被規則、掃描軟體所影響，逼得你不得不拐很多彎才能達成。可以參考一下光是無障礙設計，Font Awesome 就得花一大篇幅再寫注意事項。",[87,4404,4407],{"href":4405,"rel":4406,"target":92,"title":93},"https:\u002F\u002Ffontawesome.com\u002Fdocs\u002Fweb\u002Fdig-deeper\u002Faccessibility",[91],"Font Awesome文件",[17,4409,4411],{"id":4410},"_2-切版維護時-icon-不夠用就會自建或拿別套-icon來使用","2. 切版維護時 icon 不夠用，就會自建或拿別套 icon 來使用。",[10,4413,4414,4415,4419],{},"這是很難避免的一種情形，例如客製化的軟體、不講武德的客戶或是專有名詞但又想要有個 icon ，面臨到這種問題時，比較在乎的可能就會自己模擬 icon 風格，畫完送進去類似 icoMoon(",[87,4416,403],{"href":4417,"rel":4418,"target":92,"title":93},"https:\u002F\u002Ficomoon.io\u002F",[91],") 的工具產出 iconfont，再引入到檔案。\n而不在乎、趕時間、或是原本使用 fontawesome 但本身 UI Framework 也有提供 icon的情況，就會直接去拿另一套 icon 來引入，就會造成風格混亂。",[10,4421,4422],{},"以上兩個問題，還只是從最源頭的問題發現的，接下來還有實作上的問題，\n讓我們來一一釐清。",[17,4424,4426],{"id":4425},"_3-引入一套-iconfont就會耗損工時","3. 引入一套 iconFont ，就會耗損工時",[10,4428,4429],{},"就拿最常見的 Font Awesome，最新版本還要先到後台設定才能開始引入：",[104,4431,4432],{},[10,4433,4434],{},[109,4435],{"alt":4436,"src":4437},"Font Awesome 6 要先進到設定裡面","\u002Fimages\u002Fblog\u002F24.webp",[10,4439,4440],{},"要進到這裡來，你還得先經過註冊帳號的一系列流程，最後才能拿到手應用。再來，應用時，又有分 Html 、Vue 或是 React。",[10,4442,4443,4444,4447],{},"以 Vue 為例，可能還要先跟團隊決定是要用 component 形式的寫法，或是一樣使用平常比較習慣的寫法 ",[1444,4445,4446],{},"\u003Ci class=”xxx”>\u003C\u002Fi>","，然後寫程式的期間，後者還會碰到有時候沒轉成 svg 的情形（因為 watch 只有一開始偵測到才變成 svg）。",[10,4449,4450],{},"再來，import 的時候，可能還要專門弄一個 plugin 檔案（Nuxt 專案的話），接著，又可能會碰到 typescript 的問題跟其他問題，因為層層依賴，所以會有各式各樣的 bug 等著。",[10,4452,4453],{},"再再來，每次用的時候，都要把 Font Awesome官網開起來以便隨時查詢代碼、複製代碼或下載圖檔。",[10,4455,4456],{},"再再再來，如果客戶使用環境是不能對外連網，就得把整包載入。",[10,4458,4459],{},"再再再再來，客戶使用的是 IE 為大宗……….",[10,4461,4462],{},"以上這些，如果目前正在閱讀的你是前端設計師\u002F前端工程師，可以回想看看，這些時間是不是都浪費掉了。",[10,4464,4465],{},"我踩過了這些坑，痛到不行。",[10,4467,4468,4469,4473],{},"所以後來團隊在開發 Piman (",[87,4470,403],{"href":4471,"rel":4472,"target":92,"title":93},"https:\u002F\u002Fbpio.gitbook.io\u002Fpiman\u002F",[91],") 無障礙 UI 框架和延伸的專案時，我們盡量直接使用 Emoji，為什麼呢？",[42,4475,4476,4484,4487,4490,4493,4496,4499,4502,4510],{},[45,4477,4478,4479],{},"符合使用者當下使用的作業系統、服務：emoji 會隨著不同環境而改變，這是最自然的方式。",[87,4480,4483],{"href":4481,"rel":4482,"target":92,"title":93},"https:\u002F\u002Femojipedia.org\u002Fcaniemoji\u002F",[91],"查詢 emoji 是否可用",[45,4485,4486],{},"沒有依賴關係：因為是 Unicode。",[45,4488,4489],{},"不用需要前置作業：因為是 Unicode 。",[45,4491,4492],{},"不用考慮瀏覽器能不能用：因為是 Unicode。",[45,4494,4495],{},"不需要考量寫法或是怎麼通過無障礙設計規範：因為是 Unicode。",[45,4497,4498],{},"依然可以展現出想表達的意思：例如 page 404 就可以用個尷尬的笑臉，報讀軟體也會把這個「情緒」給表達出來。",[45,4500,4501],{},"現代人已經用的非常習慣，甚至取代貼圖了，辨識度佳。",[45,4503,4504,4505,4509],{},"可以無痛轉換風格，例如使用 Google Noto Emoji ",[87,4506,403],{"href":4507,"rel":4508,"target":92,"title":93},"https:\u002F\u002Ffonts.google.com\u002Fnoto\u002Fspecimen\u002FNoto+Emoji",[91],"，同樣的使用方式，轉換成不同的風格，不用改寫任何一個 html 內容，只需要引入 font 和寫 font-family。",[45,4511,4512,4513],{},"可使用快捷鍵快速尋找。",[87,4514,403],{"href":4515,"rel":4516,"target":92,"title":93},"https:\u002F\u002Fmrmad.com.tw\u002Fmac-emoji-shortcut",[91],[10,4518,4519],{},"當然，缺點也是有的：",[42,4521,4522,4525,4528,4531,4539],{},[45,4523,4524],{},"可能會喪失視覺風格一制性：雖然有這個疑慮，但我個人覺得還好，因為就是視為 emoji 就是個顏文字而已，不是「特別」使用的圖示，所以不太會破壞主視覺。",[45,4526,4527],{},"還是解決不了 icon 不夠用的情形，尤其是客製化的情形，而且 Emoji 會隨著環境變化，反而使這個問題更糟，例如在 IE 可能就是黑白，但客製化的 icon 卻是彩色的這種尷尬情況。",[45,4529,4530],{},"Noto Emoji 載入完畢前，呈現會是系統的 emoji 樣式。",[45,4532,4533,4534],{},"舊版本或不同服務可能會缺少某些 Emoji，所以不能挑太特別的使用。",[87,4535,4538],{"href":4536,"rel":4537,"target":92,"title":93},"https:\u002F\u002Fccc.technews.tw\u002F2018\u002F07\u002F10\u002Fwhy-emoji-look-different-on-every-platform\u002F",[91],"參考資料",[45,4540,4541,4542],{},"太多的表情符號會造成困擾，只能適時使用，必要時使用 aria-hidden。",[87,4543,4538],{"href":4544,"rel":4545,"target":92,"title":93},"https:\u002F\u002Fblog.easterseals.com\u002Femojis-and-accessibility-the-dos-and-donts-of-including-emojis-in-texts-and-emails\u002F",[91],[10,4547,4548],{},"結論\n我個人還是看好在無障礙網頁設計上使用 Emoji ，總體來說利大於弊，而且能有效降低工時、減少依賴，可以把時間、資源留給優先度更高的事。而在無障礙網頁設計、web3 必定是未來趨勢的前提下，相信 Emoji 的發展會更蓬勃、更多元！",[10,4550,4551],{},"UI 設計師\u002F前端設計師\u002F前端工程師的你會怎麼想這議題呢？歡迎一起討論！",[4553,4554,4555],"style",{},"html pre.shiki code .sdCPZ, html code.shiki .sdCPZ{--shiki-default:#6A737D;--shiki-github-dark:#6A737D}html pre.shiki code .ssxIu, html code.shiki .ssxIu{--shiki-default:#24292E;--shiki-github-dark:#E1E4E8}html pre.shiki code .sk71V, html code.shiki .sk71V{--shiki-default:#22863A;--shiki-github-dark:#85E89D}html pre.shiki code .sIsaT, html code.shiki .sIsaT{--shiki-default:#6F42C1;--shiki-github-dark:#B392F0}html pre.shiki code .sJ6F3, html code.shiki .sJ6F3{--shiki-default:#032F62;--shiki-github-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html.github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}",{"title":177,"searchDepth":178,"depth":178,"links":4557},[4558,4559,4560,4561,4562],{"id":3770,"depth":181,"text":3771},{"id":3800,"depth":181,"text":3801},{"id":3848,"depth":181,"text":3849},{"id":4410,"depth":181,"text":4411},{"id":4425,"depth":181,"text":4426},"2022-07-02","從無障礙設計的角度探討 icon 對網站視覺與體驗的影響，以及為什麼我在設計與切版時改用 Emoji——越少依賴，越不容易出問題，也更貼心。",{},"\u002Fzh\u002Fblog\u002Fwhy-i-love-emoji",{"title":3759,"description":4564},"zh\u002Fblog\u002Fwhy-i-love-emoji",[199,201,4570,4571,4572],"icon","FontAwesome","Emoji","mm7x--Dn-_vZ2bu0Ud3kzzw41rxRATkLMkctudmD3rg",{"id":4575,"title":4576,"body":4577,"date":4861,"description":4583,"draft":189,"extension":190,"meta":4862,"navigation":192,"ogImage":193,"path":4863,"seo":4864,"stem":4865,"tags":4866,"translationKey":193,"updatedAt":193,"__hash__":4872},"blog_zh\u002Fzh\u002Fblog\u002Fballpark-intro.md","Ballpark — 適合線上驗證想法的問卷服務",{"type":7,"value":4578,"toc":4850},[4579,4581,4584,4591,4594,4597,4610,4613,4617,4624,4627,4630,4642,4646,4649,4652,4661,4664,4668,4671,4684,4687,4690,4703,4716,4729,4733,4736,4749,4752,4765,4768,4781,4784,4792,4795,4799,4812,4816,4819,4826,4834,4838,4841,4844,4847],[17,4580,395],{"id":395},[10,4582,4583],{},"前幾天收到 Prototypr.io 電子報，發表了一款線上問卷新服務。來寫寫快速使用後的心得。",[10,4585,4586],{},[87,4587,4590],{"href":4588,"rel":4589,"target":92,"title":93},"https:\u002F\u002Fballparkhq.com\u002F",[91],"Ballpark 官網",[10,4592,4593],{},"一看到這封電子報，還沒來得及看完內容我就迫不及待點 CTA 按鈕了！",[10,4595,4596],{},"內容如下：",[104,4598,4599,4605],{},[10,4600,4601],{},[109,4602],{"alt":4603,"src":4604},"Prototypr.io 介紹 Ballpark","\u002Fimages\u002Fblog\u002F11.webp",[2854,4606,4607],{},[10,4608,4609],{},"Prototypr.io 電子報，內容提及了 Ballpark 可以把問卷跟 Figma Prototypes 做結合。",[10,4611,4612],{},"嘿！這實在是太香了，以下娓娓道來有夠香的原因：",[17,4614,4616],{"id":4615},"beta-版","Beta 版",[10,4618,4619],{},[87,4620,4623],{"href":4621,"rel":4622,"target":92,"title":93},"https:\u002F\u002Fballparkhq.com\u002Fpricing",[91],"價格",[10,4625,4626],{},"有點養套殺節奏，但 Free 版本我覺得非常適合個人、小型工作室以及敏捷開發收集回饋使用。",[10,4628,4629],{},"雖然只能建立一個 Project 而且不能封存，但是 Responses 跟 Team members 都是 Unlimited，也就是說可以利用這個服務跟團隊一起快速驗證假設，之後要再開新專案，就先自己手動整理一下資料，或是申請新信箱。",[104,4631,4632,4637],{},[10,4633,4634],{},[109,4635],{"alt":4636,"src":4604},"Ballpark 免費版 0 元",[2854,4638,4639],{},[10,4640,4641],{},"免費版本雖然只能用一個專案，但其他優點覺得很可以！",[17,4643,4645],{"id":4644},"問卷與-prototype-自然的融入體驗無斷點","問卷與 Prototype 自然的融入，體驗無斷點",[10,4647,4648],{},"以往發線上問卷的時候，想要測試 Prototype 時還要另外發一個連結，點擊後就會跳離問卷，會使得一致性的體驗消失，甚至受測者玩完之後，再回到問卷已經不知道正在做什麼事了。",[10,4650,4651],{},"利用 ballpark ，問卷填一填，接續測試，測試還可以給予小提醒，之後趁著記憶猶新再繼續填問卷，體驗無斷點，試試就知道優點！",[10,4653,4654,4655,4660],{},"這是官網提供的 ",[87,4656,4659],{"href":4657,"rel":4658,"target":92,"title":93},"https:\u002F\u002Fapp.ballparkhq.com\u002Frecord\u002F8cc3ea0c-e380-4d5e-b842-6d6bbbb65b96",[91],"範例","，簡潔明瞭的設計風格、RWD 、QRCode 也都已產出方便分享。第五個步驟就會開始進入 Prototype 的測試，玩完結束後，趁著記憶猶新，直接追問想知道的答案，而且不能再回頭測試了！",[10,4662,4663],{},"目前 Prototype 可以接受 Figma 與 Marvel，除了 Prototype 之外，也可以加入影音。",[17,4665,4667],{"id":4666},"編輯簡單專注在思考如何發問","編輯簡單，專注在思考如何發問",[10,4669,4670],{},"也許是因為還在 Beta 版以及目前目標使用者很明確，所以沒有像其他發展已久的問卷系統有多樣化的功能，但我個人特別喜歡這種單純，可以讓我專注在思考問題、選擇適合的題型以及加強問卷與 Prototype 之間的聯繫。",[104,4672,4673,4679],{},[10,4674,4675],{},[109,4676],{"alt":4677,"src":4678},"Ballpark 目前提供的題型","\u002Fimages\u002Fblog\u002F12.webp",[2854,4680,4681],{},[10,4682,4683],{},"大致分為指引、問卷、易用性、市場調查",[17,4685,4686],{"id":4686},"答題前的設定",[10,4688,4689],{},"根據不同的題型，會有不同的設定，例如 Prototype 題型，會有是否使用攝影機、麥克風以及螢幕錄影。而每個題型都有的就會有增加影片導覽以及必填設定。如果是比較需要理解的題目，這個前置作業就會變得很重要，例如降低使用者焦躁的心情等等，非常實用的功能！",[104,4691,4692,4698],{},[10,4693,4694],{},[109,4695],{"alt":4696,"src":4697},"攝影機、麥克風以及螢幕錄影設定","\u002Fimages\u002Fblog\u002F13.webp",[2854,4699,4700],{},[10,4701,4702],{},"根據需求啟動各種隱私要求",[104,4704,4705,4711],{},[10,4706,4707],{},[109,4708],{"alt":4709,"src":4710},"影片指引範例","\u002Fimages\u002Fblog\u002F14.webp",[2854,4712,4713],{},[10,4714,4715],{},"視訊指導如何設定",[104,4717,4718,4724],{},[10,4719,4720],{},[109,4721],{"alt":4722,"src":4723},"強調步驟要完成","\u002Fimages\u002Fblog\u002F15.webp",[2854,4725,4726],{},[10,4727,4728],{},"可以設定使用者一定要做完指引",[17,4730,4732],{"id":4731},"summary-與-responses","Summary 與 Responses",[10,4734,4735],{},"問卷設計完後，下一個重點當然是收到回饋後的分析，畫面如下：",[104,4737,4738,4744],{},[10,4739,4740],{},[109,4741],{"alt":4742,"src":4743},"問券完成後的每題分析","\u002Fimages\u002Fblog\u002F16.png",[2854,4745,4746],{},[10,4747,4748],{},"分析統計資料",[10,4750,4751],{},"除了一般常見的統計之外，我比較想要知道 Prototype 他如何分析。",[104,4753,4754,4760],{},[10,4755,4756],{},[109,4757],{"alt":4758,"src":4759},"Prototype資訊","\u002Fimages\u002Fblog\u002F17.webp",[2854,4761,4762],{},[10,4763,4764],{},"Prototype 操作目標達成率、平均操作時間等資訊",[10,4766,4767],{},"點擊 Heatmap 後，會出現最常點擊、移動熱區以及兩者合併的圖，左下角還可以下載圖片。下方資料區還提供各種數據資訊。",[104,4769,4770,4776],{},[10,4771,4772],{},[109,4773],{"alt":4774,"src":4775},"Heatmap 儀表板","\u002Fimages\u002Fblog\u002F18.png",[2854,4777,4778],{},[10,4779,4780],{},"Heatmap 的操作資訊",[10,4782,4783],{},"點擊 All Responses 會跳到這頁，然後突出 Prototype task 的地方。",[104,4785,4786],{},[10,4787,4788],{},[109,4789],{"alt":4790,"src":4791},"問卷分析儀表板","\u002Fimages\u002Fblog\u002F19.webp",[10,4793,4794],{},"連 Prototype 常見的簡易分析都有做到了，這真是個殺手鐧！除了在前台的體驗一致，後台的體驗也是一致，真是近年來用過最棒的服務之一了。（螢幕錄影等特殊功能還沒測試他的分析會長什麼樣子，就留待大家試試看。）",[17,4796,4798],{"id":4797},"既然重視體驗當然也備好了-template","既然重視體驗，當然也備好了 Template",[104,4800,4801,4807],{},[10,4802,4803],{},[109,4804],{"alt":4805,"src":4806},"範本列表","\u002Fimages\u002Fblog\u002F20.png",[2854,4808,4809],{},[10,4810,4811],{},"ballpark 提供各式各樣的 template 供各種場景使用。",[17,4813,4815],{"id":4814},"roadmap","Roadmap",[10,4817,4818],{},"國外服務看了好幾個都會把 Roadmap 給展示出來讓大家知道，覺得真的是很棒的一件事，暸解他們未來的規劃方向，可以給使用者更多資訊來判斷自己需不需要這項服務，例如近期可能就會開發測試線上網站的功能。",[10,4820,4821],{},[87,4822,4825],{"href":4823,"rel":4824,"target":92,"title":93},"https:\u002F\u002Fportal.productboard.com\u002Fballpark\u002F1-ballpark\u002Ftabs\u002F1-short-term-1-6-months",[91],"產品路線圖",[104,4827,4828],{},[10,4829,4830],{},[109,4831],{"alt":4832,"src":4833},"ballpark 的路線圖","\u002Fimages\u002Fblog\u002F21.png",[17,4835,4837],{"id":4836},"那缺點呢","那…缺點呢？",[10,4839,4840],{},"價格可能還是第一優先考量，如果專案有封存的需求、分享時密碼保護、下載 CSV等，那就勢必一直升級方案。Starter 年付平約一個月 100 美金，一整年相當於台幣約 35000 左右，對於個人工作室或小型企業可能還是有一點負擔，需要評估使用 ballpark 的效益。",[10,4842,4843],{},"另外是目前沒有中文支援，因為CTA 按鈕是不給編輯文字的（呼應我前面講的單純），所以如果很介意一定都要中文的，可能就不適合，不過這項未來應該是會改善，畢竟站在 UX Writing 的角度來說，適合的文案才能更讓人理解如何操作。",[10,4845,4846],{},"而跳題等進階題型設定也還沒有出現，目前也沒有在路線圖看到，也許他們想先專注在某些功能上吧。",[10,4848,4849],{},"這次快速地熟悉了 ballpark 的核心，希望未來有機會能使用這樣服務，也是驗證這項產品適不適合用在自身的公司身上，但想像中應該是很多可以發揮的地方，拭目以待未來的發展！",{"title":177,"searchDepth":178,"depth":178,"links":4851},[4852,4853,4854,4855,4856,4857,4858,4859,4860],{"id":395,"depth":181,"text":395},{"id":4615,"depth":181,"text":4616},{"id":4644,"depth":181,"text":4645},{"id":4666,"depth":181,"text":4667},{"id":4686,"depth":181,"text":4686},{"id":4731,"depth":181,"text":4732},{"id":4797,"depth":181,"text":4798},{"id":4814,"depth":181,"text":4815},{"id":4836,"depth":181,"text":4837},"2022-06-29",{},"\u002Fzh\u002Fblog\u002Fballpark-intro",{"title":4576,"description":4583},"zh\u002Fblog\u002Fballpark-intro",[4867,4868,4869,4870,4871],"易用性測試","問卷","需求訪談","使用者體驗","UX","VpmOTlnqFU6oQSDcQ6TzUib6QdoA2fEeQfzLOp-ohvs",{"id":4874,"title":4875,"body":4876,"date":4861,"description":4887,"draft":189,"extension":190,"meta":5169,"navigation":192,"ogImage":193,"path":5170,"seo":5171,"stem":5172,"tags":5173,"translationKey":193,"updatedAt":5175,"__hash__":5176},"blog_zh\u002Fzh\u002Fblog\u002Freport-website-issue.md","我的第一個 Chrome 瀏覽器擴充程式：Report Website issues",{"type":7,"value":4877,"toc":5161},[4878,4881,4883,4885,4888,4891,4898,4906,4909,4912,4941,4944,4947,4949,4952,4955,4958,4961,4964,4990,4994,5002,5025,5028,5048,5051,5065,5073,5076,5079,5087,5090,5093,5108,5116,5119,5144,5147,5150,5152,5155,5158],[10,4879,4880],{},"2026\u002F06\u002F21 更新：已更名為 Accesserty Signal，所以更新連結，圖片不更新，以符合創建文章時的情境。",[10,4882,15],{},[17,4884,395],{"id":395},[10,4886,4887],{},"大概七年前看到同事有做了一個瀏覽器擴充程式，當時的我也是躍躍欲試，沒想到就這樣過了七年，直接變成大叔了。",[10,4889,4890],{},"這次在想 2023 鐵人賽的題目，突然想起了這件事，於是就快速地學習了一下，暸解從 0 到 1 的過程，打鐵趁熱寫篇文章記錄一下。",[10,4892,4893],{},[87,4894,4897],{"href":4895,"rel":4896,"target":92,"title":93},"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Faccesserty-signal\u002Fjabgpbgdmhdmibhogmcjfinnkcngcelc?hl=zh-TW&pli=1",[91],"擴充程式連結",[104,4899,4900],{},[10,4901,4902],{},[109,4903],{"alt":4904,"src":4905},"Chrome 瀏覽器擴充程式：Report website issues","\u002Fimages\u002Fblog\u002F26.webp",[17,4907,4908],{"id":4908},"目標與需求",[10,4910,4911],{},"接觸無障礙網頁設計之後，都沈浸在開發無障礙 UI Framework。後來想想好像應該開發一些成本低、易用、立即有幫助的簡單功能，潛在幫助大家，讓上網的環境更好，於是就有了以下理想、目標、需求：",[42,4913,4914,4917,4920,4923,4926,4929,4932,4935,4938],{},[45,4915,4916],{},"使用者可以簡單回報目前瀏覽網頁的問題：",[45,4918,4919],{},"讓使用者輸入最少的情況，只收集「使用者發現的問題分類」、「目前網址」、「時間」、「作業系統\u002F瀏覽器資訊」以及「聯絡資訊（選填）」。",[45,4921,4922],{},"我透過收集到的資料，回傳給網站客服。",[45,4924,4925],{},"網站客服收到網站回饋。",[45,4927,4928],{},"網站工程師修正問題。",[45,4930,4931],{},"使用者下次再上網發現問題解決，開心了。",[45,4933,4934],{},"我透過收集資料間接幫助修網站，開心了。",[45,4936,4937],{},"網站客服發現使用者黏著度上升，開心了。",[45,4939,4940],{},"網站工程師修正程式碼提升技能，開心了。",[10,4942,4943],{},"可能會有人覺得使用者直接面對網站客服不就好了嗎？",[10,4945,4946],{},"我的想法是處於遇到障礙的情境下，使用者跟網站客服的溝通大部分都是雙輸的局面，尤其碰到其實是技術層面的問題。",[10,4948,2811],{},[10,4950,4951],{},"這是個簡單例子，主要描述認識的東西不同，解讀不同。但我也不想讓使用者看太多字或輸入太多東西提高回報障礙，所以中間墊一層可能是比較好的方式，等日後 AI 變很強，就可以幫忙通靈了。",[10,4953,4954],{},"那為什麼要用瀏覽器擴充程式？",[10,4956,4957],{},"因為這樣子就不需要讓使用者輸入作業系統\u002F瀏覽器版本、時間、網址了，只需要勾選分類，送出！比起前往表單，使用擴充程式的方便性更大。",[17,4959,4960],{"id":4960},"現實考量",[10,4962,4963],{},"因為個人開發、只會切版跟簡單 javascript，也不會寫後端，所以必須想一些簡易的方法，還有思考瀏覽器那麼多種要挑哪個來做？於是開始思考眾多限制下的實行方案：",[42,4965,4966,4969,4972,4975,4987],{},[45,4967,4968],{},"Chrome 市場占比高、安裝意願也高，所以只鎖定 Chrome。有需要之後再做 Safari、Firefox、Edge。Edge也可以裝 Chrome 的擴充程式，所以選 Chrome CP值很高啊～！",[45,4970,4971],{},"不會寫後端但需要將得到的資訊儲存，然後也因為只鎖定 Chrome，所以只想用 google 的產品：google sheet。",[45,4973,4974],{},"要將資料直接存到 google sheet 還是要寫很多程式，所以想到可以跟 google sheet 溝通的 google form，它可以跟 google sheet 連結。",[45,4976,4977,4978,4981,4982,4986],{},"實驗如果使用 html 的 ",[1444,4979,4980],{},"\u003Cform>"," ，能不能將資料塞進 google form，於是找到了這篇文章(",[87,4983,403],{"href":4984,"rel":4985,"target":92,"title":93},"https:\u002F\u002Fspreadsheet.dev\u002Fsubmit-responses-to-google-form-apps-script",[91],")",[45,4988,4989],{},"寫一點點 javascript 提升UX，應該不是難事，不知道就問 AI",[17,4991,4993],{"id":4992},"學習-chrome擴充程式","學習 Chrome 擴充程式",[10,4995,4996,4997,5001],{},"確定以上都能實作後，就開始學 Chrome 擴充程式要怎麼做，於是直接去翻最新的書(",[87,4998,403],{"href":4999,"rel":5000,"target":92,"title":93},"https:\u002F\u002Flearning.oreilly.com\u002Flibrary\u002Fview\u002Fbuilding-browser-extensions\u002F9781484287255\u002F",[91],")：，或是一些參考連結（以下連結請注意內文提到的開發版本）：",[42,5003,5004,5011,5018],{},[45,5005,5006],{},[87,5007,5010],{"href":5008,"rel":5009,"target":92,"title":93},"https:\u002F\u002Fithelp.ithome.com.tw\u002Fusers\u002F20139636\u002Fironman\u002F4982",[91],"你知道這是什麼嗎？ Chrome Extension MV3 With Vite",[45,5012,5013],{},[87,5014,5017],{"href":5015,"rel":5016,"target":92,"title":93},"https:\u002F\u002Fithelp.ithome.com.tw\u002Fusers\u002F20079450\u002Fironman\u002F1149",[91],"Chrome Extension 開發與實作",[45,5019,5020],{},[87,5021,5024],{"href":5022,"rel":5023,"target":92,"title":93},"https:\u002F\u002Fpjchender.dev\u002Fchrome-extension\u002Fchrome-extension-api\u002F",[91],"Chrome Extension API 筆記",[10,5026,5027],{},"簡單介紹一下開發 Chrome 瀏覽器擴充程式內容：",[42,5029,5030,5033,5036,5039,5042,5045],{},[45,5031,5032],{},"manifest.json：最重要，包含了擴充程式的所有設置、描述和功能概要，例如需要使用到的權限。如果有使用第 2 點到第 6 點，都要寫在 manifest.json，而這個檔案在最後上架的時候， google 會檢查。\n最新版本是 V3 ，所以在挑選線上參考連結閱讀時，要注意版本。",[45,5034,5035],{},"Background Script：背景中運行，通常用來監聽事件和處理請求。",[45,5037,5038],{},"popup.html：在擴充程式按一下跳出來的視窗畫面。",[45,5040,5041],{},"options.html：在擴充程式按右鍵，裡面一個叫「選項」的選單按鈕，點擊後會另開視窗，是一個獨立頁面，可以在這個頁面做更多的功能、描述與使用者互動，各位可以開開看自己常用的擴充程式在這一頁有什麼樣的互動。",[45,5043,5044],{},"Content Script：目前所在網頁與擴充程式的交流，例如用了擴充程式，就讓目前網頁有下雪效果。",[45,5046,5047],{},"devtools.html：可以建立一個檢查程式碼時的頁面",[10,5049,5050],{},"這次實際用到只有 1, 3, 4，實作完之後，如何測試 Chrome 擴充程式呢？其實很簡單：",[42,5052,5053,5056,5059,5062],{},[45,5054,5055],{},"在 Chrome 的右上角「…」> 擴充功能 > 管理擴充功能",[45,5057,5058],{},"打開「開發人員模式」，在左側會有三個按鈕",[45,5060,5061],{},"選擇「載入未封裝項目」",[45,5063,5064],{},"再選擇你的開發資料夾",[104,5066,5067],{},[10,5068,5069],{},[109,5070],{"alt":5071,"src":5072},"擴充功能裡載入未封裝項目的按鈕位置示意圖","\u002Fimages\u002Fblog\u002F27.png",[10,5074,5075],{},"「開發人員模式」按鈕與「載入未封裝項目」按鈕位置示意圖",[10,5077,5078],{},"然後每次修改後，都需要更新擴充程式，更新按鈕在卡片的右下角，點擊後再重新測試你的擴充程式。",[104,5080,5081],{},[10,5082,5083],{},[109,5084],{"alt":5085,"src":5086},"載入未封裝項目示意圖","\u002Fimages\u002Fblog\u002F28.png",[17,5088,5089],{"id":5089},"上架與發佈",[10,5091,5092],{},"確定都沒什麼問題之後，就要到 Chrome Web Store Developer 註冊與上架",[42,5094,5095,5102,5105],{},[45,5096,5097,5098,4986],{},"跟著文件指示註冊(",[87,5099,403],{"href":5100,"rel":5101,"target":92,"title":93},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fwebstore\u002Fregister\u002F",[91],[45,5103,5104],{},"註冊完後需要付款 5 美元開通",[45,5106,5107],{},"進到開發者 Dashboard 畫面",[104,5109,5110],{},[10,5111,5112],{},[109,5113],{"alt":5114,"src":5115},"開發者儀表板畫面示意，左側為選單，右側為列表","\u002Fimages\u002Fblog\u002F29.png",[10,5117,5118],{},"按新增商品跟著指示走，把資料填一填即可，大致如下：",[42,5120,5121,5124,5127,5135,5138,5141],{},[45,5122,5123],{},"套件壓縮檔",[45,5125,5126],{},"可以放 Youtube 連結、首頁連結等",[45,5128,5129,5130,5134],{},"可以放五張螢幕截圖，1280",[5131,5132,5133],"em",{},"800 或 640","400，JPEG 或 24 位元 PNG (無 alpha 透明層)，至少 1 張",[45,5136,5137],{},"小 icon：440*280",[45,5139,5140],{},"Banner：1400*560",[45,5142,5143],{},"可以創建 GA4 資源",[10,5145,5146],{},"但有一個重點是，如果你有需要用到使用者的權限，是需要描述清楚的，而且需要附帶一個隱私權政策的網址。如果你沒有，可以使用免費的線上服務，創建一個頁面，裡面寫好隱私權政策的內容，再把網址貼進去即可。",[10,5148,5149],{},"最後就是提交了，審核時間不一定，我等了三天，看 Google 心情，後續每次修改，都需要再提交一次，所以如果是要經營的話，要注意上架審核的時間，如果時間急迫又被退件，那就麻煩了。但應該會有不重新審核就可以更新內容的技巧，但那離我太遠了。",[17,5151,1465],{"id":1465},[10,5153,5154],{},"雖然只有用到簡單的 Html、CSS、Javascript 沒遇到什麼困難，但其實這樣就可以打造一個對人有用的產品了，覺得設計師\u002F工程師們都可以多嘗試一點，說不定一個爆紅的產品就又出現了。",[10,5156,5157],{},"而我也只想要用這樣可以快速、不複雜的方式打造產品，看能不能多幫助上網會遇到困難的人，能幫一個是一個，所以也用了 ChatGPT 幫我翻譯內容成英文，放到 Producthunt 上看有沒有人會看到而使用。",[10,5159,5160],{},"最後，邊練習擴充程式的同時，2023 鐵人賽的題目我也想出好了，希望可以順利完賽～！",{"title":177,"searchDepth":178,"depth":178,"links":5162},[5163,5164,5165,5166,5167,5168],{"id":395,"depth":181,"text":395},{"id":4908,"depth":181,"text":4908},{"id":4960,"depth":181,"text":4960},{"id":4992,"depth":181,"text":4993},{"id":5089,"depth":181,"text":5089},{"id":1465,"depth":181,"text":1465},{},"\u002Fzh\u002Fblog\u002Freport-website-issue",{"title":4875,"description":4887},"zh\u002Fblog\u002Freport-website-issue",[2621,198,5174],"iThome 鐵人賽","2026-06-21","dpoRw_AFX99dkvUs40Wg3p38yuJpQlXgATirBBUrmi8",{"id":5178,"title":5179,"body":5180,"date":5367,"description":5368,"draft":189,"extension":190,"meta":5369,"navigation":192,"ogImage":193,"path":5370,"seo":5371,"stem":5372,"tags":5373,"translationKey":193,"updatedAt":5374,"__hash__":5375},"blog_zh\u002Fzh\u002Fblog\u002Ftaiwan-beauty-aa-website.md","通過臺灣 AA 級無障礙網頁標章且美觀的網站",{"type":7,"value":5181,"toc":5365},[5182,5185,5188],[10,5183,5184],{},"收集至啟用日期 2025–08–20。",[10,5186,5187],{},"大概每隔一段時間，就會去無障礙網頁設計規範網站，到啟用列表看看已經通過 AA 標章且 UI 也不錯的網站。",[42,5189,5190,5197,5204,5211,5218,5225,5232,5239,5246,5253,5260,5267,5274,5281,5288,5295,5302,5309,5316,5323,5330,5337,5344,5351,5358],{},[45,5191,5192],{},[87,5193,5196],{"href":5194,"rel":5195,"target":92,"title":93},"https:\u002F\u002Fwww.tcam.museum",[91],"臺中市立美術館",[45,5198,5199],{},[87,5200,5203],{"href":5201,"rel":5202,"target":92,"title":93},"https:\u002F\u002Fwoodcraftdaxi.tycg.gov.tw\u002F",[91],"桃園市立大溪木藝生態博物館大溪工藝之城",[45,5205,5206],{},[87,5207,5210],{"href":5208,"rel":5209,"target":92,"title":93},"https:\u002F\u002Foutdoor.moe.edu.tw\u002F",[91],"教育部國民及學前教育署戶外教育資源平臺",[45,5212,5213],{},[87,5214,5217],{"href":5215,"rel":5216,"target":92,"title":93},"https:\u002F\u002Fyouth.gov.taipei\u002F",[91],"臺北市政府青年局",[45,5219,5220],{},[87,5221,5224],{"href":5222,"rel":5223,"target":92,"title":93},"https:\u002F\u002Ftaiwanoverseas.nmth.gov.tw\u002F",[91],"國立臺灣歷史博物館海外史料看臺灣專題網站",[45,5226,5227],{},[87,5228,5231],{"href":5229,"rel":5230,"target":92,"title":93},"https:\u002F\u002Fkinmen.travel\u002F",[91],"金門觀光旅遊網",[45,5233,5234],{},[87,5235,5238],{"href":5236,"rel":5237,"target":92,"title":93},"https:\u002F\u002Fwww.filmassist.ntpc.gov.tw\u002F",[91],"新北協拍中心",[45,5240,5241],{},[87,5242,5245],{"href":5243,"rel":5244,"target":92,"title":93},"https:\u002F\u002Fmpa.afa.gov.tw\u002F",[91],"農產品初級加工場",[45,5247,5248],{},[87,5249,5252],{"href":5250,"rel":5251,"target":92,"title":93},"https:\u002F\u002Fexbook.ntl.edu.tw\u002F",[91],"臺灣人文學者珍藏圖書媒合平臺",[45,5254,5255],{},[87,5256,5259],{"href":5257,"rel":5258,"target":92,"title":93},"https:\u002F\u002Fkeid.nat.gov.tw\u002Fmittw\u002F",[91],"經濟部產業發展署臺灣製產品 MIT 微笑標章網站",[45,5261,5262],{},[87,5263,5266],{"href":5264,"rel":5265,"target":92,"title":93},"https:\u002F\u002Fksepb.kcg.gov.tw\u002F",[91],"高雄市政府環境保護局",[45,5268,5269],{},[87,5270,5273],{"href":5271,"rel":5272,"target":92,"title":93},"https:\u002F\u002Fbuskers.yunlin.gov.tw\u002F",[91],"雲林縣街頭藝人資訊平台",[45,5275,5276],{},[87,5277,5280],{"href":5278,"rel":5279,"target":92,"title":93},"https:\u002F\u002Ftpac.org.taipei\u002F",[91],"臺北表演藝術中心",[45,5282,5283],{},[87,5284,5287],{"href":5285,"rel":5286,"target":92,"title":93},"https:\u002F\u002Fopendata.taichung.gov.tw\u002F",[91],"臺中市政府資料開放平臺",[45,5289,5290],{},[87,5291,5294],{"href":5292,"rel":5293,"target":92,"title":93},"https:\u002F\u002Fopendata.tycg.gov.tw\u002F",[91],"桃園資料開放平台",[45,5296,5297],{},[87,5298,5301],{"href":5299,"rel":5300,"target":92,"title":93},"https:\u002F\u002Fdata.taipei\u002F",[91],"臺北市資料大平臺",[45,5303,5304],{},[87,5305,5308],{"href":5306,"rel":5307,"target":92,"title":93},"https:\u002F\u002Fwww.ttfi.com.tw\u002F",[91],"中央研究院社會學研究所包容為導向之科技計畫",[45,5310,5311],{},[87,5312,5315],{"href":5313,"rel":5314,"target":92,"title":93},"https:\u002F\u002Fwww.coapre.org.tw\u002F",[91],"財團法人職業災害預防及重建中心",[45,5317,5318],{},[87,5319,5322],{"href":5320,"rel":5321,"target":92,"title":93},"https:\u002F\u002Fsas.miaoli.gov.tw\u002F",[91],"苗栗縣人民團體全球資訊網",[45,5324,5325],{},[87,5326,5329],{"href":5327,"rel":5328,"target":92,"title":93},"https:\u002F\u002Fwww.foi.org.tw\u002FArticle.aspx?Arti=17&Lang=1",[91],"財團法人金融消費評議中心官方網站",[45,5331,5332],{},[87,5333,5336],{"href":5334,"rel":5335,"target":92,"title":93},"https:\u002F\u002Fdaxiculture.tycg.gov.tw\u002F",[91],"大溪學文化資源網",[45,5338,5339],{},[87,5340,5343],{"href":5341,"rel":5342,"target":92,"title":93},"https:\u002F\u002Fcultureexpress.taipei\u002F",[91],"臺北市政府文化局文化快遞",[45,5345,5346],{},[87,5347,5350],{"href":5348,"rel":5349,"target":92,"title":93},"https:\u002F\u002Fcbs.tw\u002F",[91],"國家災害防救科技中心災害告警細胞廣播訊息網",[45,5352,5353],{},[87,5354,5357],{"href":5355,"rel":5356,"target":92,"title":93},"https:\u002F\u002Fwww.twrr.ndc.gov.tw\u002F",[91],"國家發展委員會地方創生資訊共享交流平臺",[45,5359,5360],{},[87,5361,5364],{"href":5362,"rel":5363,"target":92,"title":93},"https:\u002F\u002Ftravel.tycg.gov.tw\u002Fzh-tw",[91],"桃園觀光導覽網",{"title":177,"searchDepth":178,"depth":178,"links":5366},[],"2022-06-10","定期整理通過臺灣 AA 級無障礙網頁標章、同時兼顧美觀與 UI 的網站清單，證明無障礙與設計美感可以並存。",{},"\u002Fzh\u002Fblog\u002Ftaiwan-beauty-aa-website",{"title":5179,"description":5368},"zh\u002Fblog\u002Ftaiwan-beauty-aa-website",[199,201,200,202],"2025-08-20","n5jKeNYuvuXK_tORtCeZ5bs1fGMeVnDntaskCcwqgXA",{"id":5377,"title":5378,"body":5379,"date":5849,"description":5850,"draft":189,"extension":190,"meta":5851,"navigation":192,"ogImage":193,"path":5852,"seo":5853,"stem":5854,"tags":5855,"translationKey":193,"updatedAt":5856,"__hash__":5857},"blog_zh\u002Fzh\u002Fblog\u002Fa11y-learning.md","無障礙網頁設計學習與簡易要點",{"type":7,"value":5380,"toc":5818},[5381,5393,5403,5406,5409,5412,5415,5419,5422,5429,5439,5477,5480,5501,5504,5507,5510,5513,5518,5528,5531,5545,5548,5560,5568,5606,5620,5624,5633,5640,5646,5649,5652,5657,5663,5675,5678,5684,5688,5691,5694,5697,5700,5703,5706,5709,5713,5720,5723,5727,5741,5744,5747,5750,5758,5774,5777,5780,5783,5786,5789,5792,5795,5798,5800,5803,5806,5809,5812,5815],[10,5382,5383,5384,5386,5387,5392],{},"2024\u002F07\u002F23：",[28,5385],{},"\n製作了公司內",[87,5388,5391],{"href":5389,"rel":5390,"target":92,"title":93},"https:\u002F\u002Fbpio.gitbook.io\u002Fdocs\u002Fedu-a11y",[91],"教育訓練文件","，覺得自己整理的蠻用心的，所以分享出來。",[10,5394,5395,5396,5398],{},"2023\u002F07\u002F01：完整系列：",[28,5397],{},[87,5399,5402],{"href":5400,"rel":5401,"target":92,"title":93},"https:\u002F\u002Fithelp.ithome.com.tw\u002Fusers\u002F20152260\u002Fironman\u002F5614",[91],"無障礙網頁設計大叔日記 :: 2022 iThome 鐵人賽",[17,5404,5405],{"id":5405},"顏色對比",[10,5407,5408],{},"AA：一般大小 4.5:1，大文字或圖 3:1\nAAA： 一般大小 7:1，大文字或圖 4.5:1 \n(大文字定義： 24px 或是 粗體 19px ）",[17,5410,5411],{"id":5411},"字級",[10,5413,5414],{},"請用相對單位，如 %、em、rem",[17,5416,5418],{"id":5417},"需要有定位點-和-accesskey","需要有定位點 ::: 和 accesskey",[10,5420,5421],{},"定位點不用太多，主要使用在版面各主要區塊即可。",[10,5423,5424,5425],{},"快捷鍵 accesskey ",[87,5426,403],{"href":5427,"rel":5428,"target":92,"title":93},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTML\u002FGlobal_attributes\u002Faccesskey",[91],[17,5430,5432,5435,5436],{"id":5431},"h1-到h6",[1444,5433,5434],{},"\u003Ch1>"," 到 ",[1444,5437,5438],{},"\u003Ch6>",[42,5440,5441,5447,5453,5461,5469],{},[45,5442,5443,5444,5446],{},"通常網站 Logo 會使用 ",[1444,5445,5434],{}," 包起來",[45,5448,5449,5450],{},"頁面標題使用 ",[1444,5451,5452],{},"\u003Ch2>",[45,5454,5455,5457,5458,5460],{},[1444,5456,5434],{}," 和 ",[1444,5459,5452],{}," 一個頁面只能出現一次",[45,5462,5463,5465,5466,5468],{},[1444,5464,5434],{}," 到 ",[1444,5467,5438],{}," 需要按順序使用",[45,5470,5471,5465,5474,5476],{},[1444,5472,5473],{},"\u003Ch3>",[1444,5475,5438],{}," 可以重複",[10,5478,5479],{},"每個網站的用法都不一樣，而我們的建議是：",[42,5481,5482,5488,5493],{},[45,5483,5484,5485,5487],{},"因為 ",[1444,5486,5434],{}," 只能出現一次，很適合用在網站 logo 上，輔以整個網站的名稱作為描述。",[45,5489,5449,5490,5492],{},[1444,5491,5452],{},"，整個頁面的重點，所以只出現一次就好。",[45,5494,5495,5496,5498,5499],{},"章節依序使用 ",[1444,5497,5473],{}," 至 ",[1444,5500,5438],{},[17,5502,5503],{"id":5503},"跳至主要區塊",[10,5505,5506],{},"需要製作「跳至主要區塊」 按鈕，方便跳過每頁都會重複出現的區域。",[17,5508,5509],{"id":5509},"回頂端",[10,5511,5512],{},"要注意焦點是否有跟著跳回去。",[17,5514,5516],{"id":5515},"noscript",[1444,5517,3179],{},[10,5519,5520,5521,5523,5524,5527],{},"如果瀏覽器關閉了 javascript，最好使用 ",[1444,5522,3179],{},"content",[1444,5525,5526],{},"\u003C\u002Fnoscript>"," 顯示內容。因為現代網站幾乎都有 javascript， 目前已經沒有此項規定，但建議還是可以順手做，至少真的關閉時，還有一些提示。",[17,5529,1647],{"id":5530},"seo",[42,5532,5533,5536,5539,5542],{},[45,5534,5535],{},"頁籤標題",[45,5537,5538],{},"頁面描述",[45,5540,5541],{},"favicon",[45,5543,5544],{},"社群分享圖片",[17,5546,5547],{"id":4139},"title=””",[10,5549,5550,5552,5553,5556,5557,5559],{},[1444,5551,3263],{}," ",[1444,5554,5555],{},"\u003Ciframe>"," 必要時需要有 title=”” ，如果 ",[1444,5558,3263],{}," 是另開視窗，則要使用\ntarget=”_blank” 並且加入 rel=”noreferrer noopener” 和 “另開視窗” 文字。",[10,5561,5562,5564,5565,5567],{},[1444,5563,3135],{}," 標題要寫在接續在",[1444,5566,3135],{},"之後，如：",[3854,5569,5571],{"className":3856,"code":5570,"language":3858,"meta":177,"style":177},"\u003Csvg>\n  \u003Ctitle>\u003C\u002Ftitle>\n  …\n\u003C\u002Fsvg>\n",[1444,5572,5573,5581,5593,5598],{"__ignoreMap":177},[3862,5574,5575,5577,5579],{"class":3864,"line":3865},[3862,5576,3875],{"class":3874},[3862,5578,4054],{"class":3878},[3862,5580,3882],{"class":3874},[3862,5582,5583,5585,5587,5589,5591],{"class":3864,"line":178},[3862,5584,3887],{"class":3874},[3862,5586,4139],{"class":3878},[3862,5588,3918],{"class":3874},[3862,5590,4139],{"class":3878},[3862,5592,3882],{"class":3874},[3862,5594,5595],{"class":3864,"line":181},[3862,5596,5597],{"class":3874},"  …\n",[3862,5599,5600,5602,5604],{"class":3864,"line":3899},[3862,5601,3928],{"class":3874},[3862,5603,4054],{"class":3878},[3862,5605,3882],{"class":3874},[10,5607,5608,5609,5552,5612,5615,5616,5619],{},"若 svg 僅僅是圖示，可以使用 ",[1444,5610,5611],{},"aria-hidden=”true”",[1444,5613,5614],{},"focusable=”false”"," 但因為還是要描述，所以可以再之後補上",[1444,5617,5618],{},"\u003Cspan class=”visually-hidden”>description\u003C\u002Fspan> ","補充。",[17,5621,5623],{"id":5622},"alt","alt=””",[10,5625,5626,5629,5630,2782],{},[1444,5627,5628],{},"\u003Cimg>"," 需要有 alt=”” 屬性。 如果是裝飾性質的圖片（沒有實質意義），還是要寫但沒有值， ",[1444,5631,5632],{},"alt=”” ",[10,5634,5635,5636],{},"alt 屬性文字內容主要可以根據圖片以及其上下文內容而決定，一般建議最多 150 個字以下，但這沒有任何根據。",[87,5637,4538],{"href":5638,"rel":5639,"target":92,"title":93},"https:\u002F\u002Fcss-tricks.com\u002Fjust-how-long-should-alt-text-be\u002F",[91],[17,5641,5643],{"id":5642},"label-forid",[1444,5644,5645],{},"\u003Clabel for=”id”>",[10,5647,5648],{},"在表單內，使用 label 時，for 屬性必須對應到內容的 id。",[17,5650,5651],{"id":5651},"visually-hidden",[10,5653,5654,5656],{},[1444,5655,1446],{}," 必須要有內容，設計時可善加利用 visually-hidden 以及 \naria-hidden。",[17,5658,5660],{"id":5659},"th",[1444,5661,5662],{},"\u003Cth>",[10,5664,5665,5668,5669,5671,5672,2782],{},[1444,5666,5667],{},"\u003Ctable>"," 的 ",[1444,5670,5662],{}," 需要標註是欄或列： ",[1444,5673,5674],{},"\u003Cth scope=”row\u002Fcol”>",[17,5676,5677],{"id":5677},"download",[10,5679,5680,5681],{},"下載的檔案不可依賴特定文書商用軟體，且在連結裡要使用 title 寫出完整檔名，例如：",[1444,5682,5683],{},"\u003Ca title=”操作手冊.pdf”>",[17,5685,5687],{"id":5686},"focus-狀態","focus 狀態",[10,5689,5690],{},"focus 狀態都要很明顯，焦點提示區域與其相鄰的顏色需具有 3：1 的對比度，且大於選單4.5:1，若無，另外還有至少 2px 厚。",[17,5692,5693],{"id":5693},"非文字圖示",[10,5695,5696],{},"非文字對比需大於 3:1",[17,5698,5699],{"id":5699},"網站導覽",[10,5701,5702],{},"若網站有「網站導覽」頁面連結，建議進入網站後，擺在 3 個步驟內就可以把注目焦點放在「網站導覽」頁面連結上。",[17,5704,5705],{"id":5705},"放大",[10,5707,5708],{},"確保畫面放大或「只放大文字」200% 畫面都不會破版（firefox 有此設定）",[17,5710,5712],{"id":5711},"font-awesome","Font Awesome",[10,5714,5715],{},[87,5716,5719],{"href":5717,"rel":5718,"target":92,"title":93},"https:\u002F\u002Ffontawesome.com\u002Fhow-to-use\u002Fon-the-web\u002Fother-topics\u002Faccessibility",[91],"使用說明",[10,5721,5722],{},"常用icon：Font Awesome 關於無障礙的使用方式 )",[17,5724,5726],{"id":5725},"這些文字設定之下仍保有外觀完整性","這些文字設定之下，仍保有外觀完整性",[42,5728,5729,5732,5735,5738],{},[45,5730,5731],{},"line-height 1.5 以上",[45,5733,5734],{},"letter-spacing 0.14rem 以上",[45,5736,5737],{},"word-spacing 0.16rem 以上",[45,5739,5740],{},"段落間距 font-size*2",[10,5742,5743],{},"以上 此為英文，中文也可先根據此距離斟酌使用。",[17,5745,5746],{"id":5746},"驗證機制",[10,5748,5749],{},"根據 W3C ，目前仍然沒有完美的方式，但有以下建議：",[10,5751,5752,5753,5757],{},"如果業主可以不用使用輸入框，推薦使用 google recaptcha v3\n若業主想要使用輸入框形式，則根據",[87,5754,4538],{"href":5755,"rel":5756,"target":92,"title":93},"https:\u002F\u002Faccessibility.ncc.gov.tw\u002FQuestions\u002FDetail\u002F100?Category=21",[91],"，有 3 種方式選擇：",[42,5759,5760,5763,5771],{},[45,5761,5762],{},"需要有驗證圖形與聲音提示",[45,5764,5765,5766],{},"寄送 email，如 ",[87,5767,5770],{"href":5768,"rel":5769,"target":92,"title":93},"https:\u002F\u002Fwww.hcaptcha.com\u002Faccessibility",[91],"hcaptcha",[45,5772,5773],{},"撥打客服電話取得驗證碼",[17,5775,5776],{"id":5776},"色盲",[10,5778,5779],{},"建議至少針對紅綠色盲做設計。",[17,5781,5782],{"id":5782},"行動裝置方向",[10,5784,5785],{},"除非是有其必要性，否則不可以鎖定行動裝置方向，例如學習鋼琴 app，就是有其橫向的必要性。",[17,5787,5788],{"id":5788},"autocomplete",[10,5790,5791],{},"善用 autocomplete 屬性，方便使用者快速填入過去常使用的值。\n密碼請使用 autocomplete=”new-password”，避免意外填寫現在的密碼。",[17,5793,5794],{"id":5794},"聲音",[10,5796,5797],{},"非語音的聲音 \u003C 語音音訊 20 分貝",[17,5799,403],{"id":403},[10,5801,5802],{},"非連結盡量不要用底線。",[17,5804,5805],{"id":5805},"影片",[10,5807,5808],{},"不要自動播放、可以加上字幕。",[17,5810,5811],{"id":5811},"必要時使用多種提示引導",[10,5813,5814],{},"避免只使用單一種方式，例如圖表除了顏色外，可以加上圖樣來區別。",[4553,5816,5817],{},"html pre.shiki code .ssxIu, html code.shiki .ssxIu{--shiki-default:#24292E;--shiki-github-dark:#E1E4E8}html pre.shiki code .sk71V, html code.shiki .sk71V{--shiki-default:#22863A;--shiki-github-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html.github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}",{"title":177,"searchDepth":178,"depth":178,"links":5819},[5820,5821,5822,5823,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848],{"id":5405,"depth":181,"text":5405},{"id":5411,"depth":181,"text":5411},{"id":5417,"depth":181,"text":5418},{"id":5431,"depth":181,"text":5824},"\u003Ch1> 到 \u003Ch6>",{"id":5503,"depth":181,"text":5503},{"id":5509,"depth":181,"text":5509},{"id":5515,"depth":181,"text":3179},{"id":5530,"depth":181,"text":1647},{"id":4139,"depth":181,"text":5547},{"id":5622,"depth":181,"text":5623},{"id":5642,"depth":181,"text":5645},{"id":5651,"depth":181,"text":5651},{"id":5659,"depth":181,"text":5662},{"id":5677,"depth":181,"text":5677},{"id":5686,"depth":181,"text":5687},{"id":5693,"depth":181,"text":5693},{"id":5699,"depth":181,"text":5699},{"id":5705,"depth":181,"text":5705},{"id":5711,"depth":181,"text":5712},{"id":5725,"depth":181,"text":5726},{"id":5746,"depth":181,"text":5746},{"id":5776,"depth":181,"text":5776},{"id":5782,"depth":181,"text":5782},{"id":5788,"depth":181,"text":5788},{"id":5794,"depth":181,"text":5794},{"id":403,"depth":181,"text":403},{"id":5805,"depth":181,"text":5805},{"id":5811,"depth":181,"text":5811},"2022-06-07","整理無障礙網頁設計的學習筆記與簡易要點，含公司內部教育訓練文件與完整系列文章，適合想入門數位無障礙的人參考。",{},"\u002Fzh\u002Fblog\u002Fa11y-learning",{"title":5378,"description":5850},"zh\u002Fblog\u002Fa11y-learning",[199,201,200,202],"2024-07-23","4xXOqCdCBRILedcYj_n1xdT_im03UvayZbaXk9EJu70",{"id":5859,"title":5860,"body":5861,"date":7854,"description":7855,"draft":189,"extension":190,"meta":7856,"navigation":192,"ogImage":193,"path":7857,"seo":7858,"stem":7859,"tags":7860,"translationKey":193,"updatedAt":193,"__hash__":7862},"blog_zh\u002Fzh\u002Fblog\u002Fseo.md","SEO 整理",{"type":7,"value":5862,"toc":7848},[5863,5865,5868,5871,5874,5878,5891,5894,5897,7220,7223,7253,7301,7306,7327,7331,7334,7376,7379,7430,7433,7456,7459,7481,7484,7487,7491,7563,7566,7592,7605,7608,7663,7676,7686,7689,7757,7759,7845],[17,5864,395],{"id":395},[10,5866,5867],{},"中英文全名: Search Engine Optimisation，搜尋引擎最佳化。是一種透過了解搜尋引擎的運作規則來調整網站， 提高在搜尋引擎內排名。搜尋引擎演算法時常在變，2020 google 切換為 Mobile First",[17,5869,5870],{"id":5870},"提高排名的好處",[10,5872,5873],{},"經過許多專業的 SEO 研究機構調查後發現， 當使用者利用搜尋引擎尋找資料、產品或服務時， 大部分人通常只會點擊搜尋結果當中，最前面出現的幾個連結。通常 4 ~ 6 個月才能看出明顯效益。",[17,5875,5877],{"id":5876},"近三年台灣主要搜尋引擎desktopgoogle-yahoobing","近三年台灣主要搜尋引擎(Desktop)：Google, Yahoo, Bing",[104,5879,5880,5886],{},[10,5881,5882],{},[109,5883],{"alt":5884,"src":5885},"搜尋引擎三年數據比較","\u002Fimages\u002Fblog\u002F8.png",[2854,5887,5888],{},[10,5889,5890],{},"Google Chrome 獨霸市場",[17,5892,5893],{"id":5893},"技術層面",[430,5895,5896],{"id":3858},"HTML",[3854,5898,5900],{"className":3856,"code":5899,"language":3858,"meta":177,"style":177},"\u003Cmeta charset=\"UTF-8\">\n\u003Cmeta name=\"description\" content=\"網頁簡短描述\">\n\u003Cmeta name=\"keywords\" content=\"網頁關鍵字\">\n\u003Cmeta name=\"author\" content=\"作者姓名\">\n\u003Cmeta name=\"generator\" content=\"編輯器名稱\">\n\u003Cmeta name=\"copyright\" content=\"網頁版權\">\n\u003Cmeta name=\"distribution\" content=\"網頁發佈地區\">\n\u003Cmeta name=\"robots\" content=\"index,follow\"\u002F>\n\u003Ctitle>頁面標題\u003C\u002Ftitle>\n\n\u003C!-- Open Graph -->\n\u003Cmeta property=\"og:url\" content=\"\" \u002F>\n\u003Cmeta property=\"og:title\" content=\"\" \u002F>\n\u003Cmeta property=\"og:description\" content=\"\" \u002F>\n\u003Cmeta property=\"og:image\" content=\"\" \u002F>\n\u003Cmeta property=\"og:type\" content=\"\" \u002F>\n\u003Cmeta property=\"og:locale\" content=\"\" \u002F>\n\u003Cmeta property=\"og:site_name\" content=\"\" \u002F>\n\u003Cmeta property=\"article:published_time\" content=\"\" \u002F>\n\u003Cmeta property=\"article:modified_time\" content=\"\" \u002F>\n\u003Cmeta property=\"article:section\" content=\"\" \u002F>\n\u003Cmeta property=\"article:tag\" content=\"\" \u002F>\n\u003Cmeta property=\"fb:admins\" content=\"\" \u002F>\n\u003Cmeta property=\"fb:app_id\" content=\"\" \u002F>\n\n\u003C!-- Twitter -->\n\u003Cmeta name=\"twitter:card\" content=\"\">\n\u003Cmeta name=\"twitter:site\" content=\"\">\n\u003Cmeta name=\"twitter:title\" content=\"\">\n\u003Cmeta name=\"twitter:description\" content=\"\">\n\u003Cmeta name=\"twitter:creator\" content=\"\">\n\u003Cmeta name=\"twitter:image:src\" content=\"\">\n\n\u003C!-- Favicon -->\n\u003Clink rel=\"shortcut icon\" href=\"XXXX.png\">\n\u003Clink rel=\"apple-touch-icon\" href=\"XXXX.png\">\n\u003Clink rel=\"apple-touch-icon-precomposed\" sizes=\"57x57\" href=\"XXXX.png\">\n\u003Clink rel=\"apple-touch-icon-precomposed\" sizes=\"72x72\" href=\"XXXX.png\">\n\u003Clink rel=\"apple-touch-icon-precomposed\" sizes=\"114x114\" href=\"XXXX.png\">\n\u003Clink rel=\"apple-touch-icon-precomposed\" sizes=\"144x144\" href=\"XXXX.png\">\n\n\u003C!-- 還可以加上 -->\nmedia=\"screen and (min-device-width:481px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio: 2)\">\n\n\u003C!-- 關於行動裝置主畫面 -->\n\u003C!-- 添加到主畫面的標題（iOS 6 新增） -->\n\u003Cmeta name=\"apple-mobile-web-app-title\" content=\"標題\">\n\n\u003C!-- 是否啟用 WebApp 全螢幕模式，刪除蘋果默認的工具欄和選單 -->\n\u003Cmeta name=\"apple-mobile-web-app-capable\" content=\"yes\"\u002F>\n\n\u003C!-- 添加智能 App 廣告條（iOS 6+ Safari） -->\n\u003Cmeta name=\"apple-itunes-app\" content=\"app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL\">\n\n\u003C!-- 設置蘋果工具欄顏色 -->\n\u003Cmeta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\"\u002F>\n\n\u003C!-- 忽略頁面中的數字識別為電話，忽略email識別 -->\n\u003Cmeta name=\"format-detection\" content=\"telphone=no, email=no\"\u002F>\n\n\u003C!-- iPad （直） 768 x 1004（標準解析度） -->\n\u003Clink rel=\"apple-touch-startup-image\" sizes=\"768x1004\" href=\"\u002Fsplash-screen-768x1004.png\"\u002F>\n\n\u003C!-- iPad （直） 1536x2008（Retina） -->\n\u003Clink rel=\"apple-touch-startup-image\" sizes=\"1536x2008\" href=\"\u002Fsplash-screen-1536x2008.png\"\u002F>\n\n\u003C!-- iPad (橫) 1024x748（標準解析度） -->\n\u003Clink rel=\"apple-touch-startup-image\" sizes=\"1024x748\" href=\"\u002FDefault-Portrait-1024x748.png\"\u002F>\n\n\u003C!-- iPad (橫) 2048x1496（Retina）-->\n\u003Clink rel=\"apple-touch-startup-image\" sizes=\"2048x1496\" href=\"\u002Fsplash-screen-2048x1496.png\"\u002F>\n\n\u003C!-- iPhone\u002FiPod Touch 豎屏 320x480 (標準解析度) -->\n\u003Clink rel=\"apple-touch-startup-image\" href=\"\u002Fsplash-screen-320x480.png\"\u002F>\n\n\u003C!-- iPhone\u002FiPod Touch 豎屏 640x960 (Retina) -->\n\u003Clink rel=\"apple-touch-startup-image\" sizes=\"640x960\" href=\"\u002Fsplash-screen-640x960.png\"\u002F>\n\n\u003C!-- iPhone 5\u002FiPod Touch 5 豎屏 640x1136 (Retina)-->\n\u003Clink rel=\"apple-touch-startup-image\" sizes=\"640x1136\" href=\"\u002Fsplash-screen-640x1136.png\"\u002F>\n\n\u003C!-- RSS -->\n\u003Clink rel=\"alternate\" type=\"application\u002Frss+xml\" title=\"RSS\" href=\"\u002Frss.xml\"\u002F>\n",[1444,5901,5902,5919,5943,5965,5987,6009,6031,6053,6076,6089,6093,6098,6123,6145,6167,6189,6211,6233,6255,6277,6299,6321,6343,6365,6387,6392,6398,6420,6442,6464,6486,6508,6530,6535,6541,6567,6589,6619,6647,6675,6703,6708,6714,6720,6725,6731,6737,6760,6765,6771,6794,6799,6805,6828,6833,6839,6862,6867,6873,6896,6901,6907,6937,6942,6948,6977,6982,6988,7017,7022,7028,7057,7062,7068,7090,7095,7101,7130,7135,7141,7170,7175,7181],{"__ignoreMap":177},[3862,5903,5904,5906,5909,5912,5914,5917],{"class":3864,"line":3865},[3862,5905,3875],{"class":3874},[3862,5907,5908],{"class":3878},"meta",[3862,5910,5911],{"class":3907}," charset",[3862,5913,3911],{"class":3874},[3862,5915,5916],{"class":3914},"\"UTF-8\"",[3862,5918,3882],{"class":3874},[3862,5920,5921,5923,5925,5928,5930,5933,5936,5938,5941],{"class":3864,"line":178},[3862,5922,3875],{"class":3874},[3862,5924,5908],{"class":3878},[3862,5926,5927],{"class":3907}," name",[3862,5929,3911],{"class":3874},[3862,5931,5932],{"class":3914},"\"description\"",[3862,5934,5935],{"class":3907}," content",[3862,5937,3911],{"class":3874},[3862,5939,5940],{"class":3914},"\"網頁簡短描述\"",[3862,5942,3882],{"class":3874},[3862,5944,5945,5947,5949,5951,5953,5956,5958,5960,5963],{"class":3864,"line":181},[3862,5946,3875],{"class":3874},[3862,5948,5908],{"class":3878},[3862,5950,5927],{"class":3907},[3862,5952,3911],{"class":3874},[3862,5954,5955],{"class":3914},"\"keywords\"",[3862,5957,5935],{"class":3907},[3862,5959,3911],{"class":3874},[3862,5961,5962],{"class":3914},"\"網頁關鍵字\"",[3862,5964,3882],{"class":3874},[3862,5966,5967,5969,5971,5973,5975,5978,5980,5982,5985],{"class":3864,"line":3899},[3862,5968,3875],{"class":3874},[3862,5970,5908],{"class":3878},[3862,5972,5927],{"class":3907},[3862,5974,3911],{"class":3874},[3862,5976,5977],{"class":3914},"\"author\"",[3862,5979,5935],{"class":3907},[3862,5981,3911],{"class":3874},[3862,5983,5984],{"class":3914},"\"作者姓名\"",[3862,5986,3882],{"class":3874},[3862,5988,5989,5991,5993,5995,5997,6000,6002,6004,6007],{"class":3864,"line":3925},[3862,5990,3875],{"class":3874},[3862,5992,5908],{"class":3878},[3862,5994,5927],{"class":3907},[3862,5996,3911],{"class":3874},[3862,5998,5999],{"class":3914},"\"generator\"",[3862,6001,5935],{"class":3907},[3862,6003,3911],{"class":3874},[3862,6005,6006],{"class":3914},"\"編輯器名稱\"",[3862,6008,3882],{"class":3874},[3862,6010,6011,6013,6015,6017,6019,6022,6024,6026,6029],{"class":3864,"line":3935},[3862,6012,3875],{"class":3874},[3862,6014,5908],{"class":3878},[3862,6016,5927],{"class":3907},[3862,6018,3911],{"class":3874},[3862,6020,6021],{"class":3914},"\"copyright\"",[3862,6023,5935],{"class":3907},[3862,6025,3911],{"class":3874},[3862,6027,6028],{"class":3914},"\"網頁版權\"",[3862,6030,3882],{"class":3874},[3862,6032,6033,6035,6037,6039,6041,6044,6046,6048,6051],{"class":3864,"line":3941},[3862,6034,3875],{"class":3874},[3862,6036,5908],{"class":3878},[3862,6038,5927],{"class":3907},[3862,6040,3911],{"class":3874},[3862,6042,6043],{"class":3914},"\"distribution\"",[3862,6045,5935],{"class":3907},[3862,6047,3911],{"class":3874},[3862,6049,6050],{"class":3914},"\"網頁發佈地區\"",[3862,6052,3882],{"class":3874},[3862,6054,6055,6057,6059,6061,6063,6066,6068,6070,6073],{"class":3864,"line":3947},[3862,6056,3875],{"class":3874},[3862,6058,5908],{"class":3878},[3862,6060,5927],{"class":3907},[3862,6062,3911],{"class":3874},[3862,6064,6065],{"class":3914},"\"robots\"",[3862,6067,5935],{"class":3907},[3862,6069,3911],{"class":3874},[3862,6071,6072],{"class":3914},"\"index,follow\"",[3862,6074,6075],{"class":3874},"\u002F>\n",[3862,6077,6078,6080,6082,6085,6087],{"class":3864,"line":3956},[3862,6079,3875],{"class":3874},[3862,6081,4139],{"class":3878},[3862,6083,6084],{"class":3874},">頁面標題\u003C\u002F",[3862,6086,4139],{"class":3878},[3862,6088,3882],{"class":3874},[3862,6090,6091],{"class":3864,"line":3976},[3862,6092,3938],{"emptyLinePlaceholder":192},[3862,6094,6095],{"class":3864,"line":4003},[3862,6096,6097],{"class":3868},"\u003C!-- Open Graph -->\n",[3862,6099,6101,6103,6105,6108,6110,6113,6115,6117,6120],{"class":3864,"line":6100},12,[3862,6102,3875],{"class":3874},[3862,6104,5908],{"class":3878},[3862,6106,6107],{"class":3907}," property",[3862,6109,3911],{"class":3874},[3862,6111,6112],{"class":3914},"\"og:url\"",[3862,6114,5935],{"class":3907},[3862,6116,3911],{"class":3874},[3862,6118,6119],{"class":3914},"\"\"",[3862,6121,6122],{"class":3874}," \u002F>\n",[3862,6124,6126,6128,6130,6132,6134,6137,6139,6141,6143],{"class":3864,"line":6125},13,[3862,6127,3875],{"class":3874},[3862,6129,5908],{"class":3878},[3862,6131,6107],{"class":3907},[3862,6133,3911],{"class":3874},[3862,6135,6136],{"class":3914},"\"og:title\"",[3862,6138,5935],{"class":3907},[3862,6140,3911],{"class":3874},[3862,6142,6119],{"class":3914},[3862,6144,6122],{"class":3874},[3862,6146,6148,6150,6152,6154,6156,6159,6161,6163,6165],{"class":3864,"line":6147},14,[3862,6149,3875],{"class":3874},[3862,6151,5908],{"class":3878},[3862,6153,6107],{"class":3907},[3862,6155,3911],{"class":3874},[3862,6157,6158],{"class":3914},"\"og:description\"",[3862,6160,5935],{"class":3907},[3862,6162,3911],{"class":3874},[3862,6164,6119],{"class":3914},[3862,6166,6122],{"class":3874},[3862,6168,6170,6172,6174,6176,6178,6181,6183,6185,6187],{"class":3864,"line":6169},15,[3862,6171,3875],{"class":3874},[3862,6173,5908],{"class":3878},[3862,6175,6107],{"class":3907},[3862,6177,3911],{"class":3874},[3862,6179,6180],{"class":3914},"\"og:image\"",[3862,6182,5935],{"class":3907},[3862,6184,3911],{"class":3874},[3862,6186,6119],{"class":3914},[3862,6188,6122],{"class":3874},[3862,6190,6192,6194,6196,6198,6200,6203,6205,6207,6209],{"class":3864,"line":6191},16,[3862,6193,3875],{"class":3874},[3862,6195,5908],{"class":3878},[3862,6197,6107],{"class":3907},[3862,6199,3911],{"class":3874},[3862,6201,6202],{"class":3914},"\"og:type\"",[3862,6204,5935],{"class":3907},[3862,6206,3911],{"class":3874},[3862,6208,6119],{"class":3914},[3862,6210,6122],{"class":3874},[3862,6212,6214,6216,6218,6220,6222,6225,6227,6229,6231],{"class":3864,"line":6213},17,[3862,6215,3875],{"class":3874},[3862,6217,5908],{"class":3878},[3862,6219,6107],{"class":3907},[3862,6221,3911],{"class":3874},[3862,6223,6224],{"class":3914},"\"og:locale\"",[3862,6226,5935],{"class":3907},[3862,6228,3911],{"class":3874},[3862,6230,6119],{"class":3914},[3862,6232,6122],{"class":3874},[3862,6234,6236,6238,6240,6242,6244,6247,6249,6251,6253],{"class":3864,"line":6235},18,[3862,6237,3875],{"class":3874},[3862,6239,5908],{"class":3878},[3862,6241,6107],{"class":3907},[3862,6243,3911],{"class":3874},[3862,6245,6246],{"class":3914},"\"og:site_name\"",[3862,6248,5935],{"class":3907},[3862,6250,3911],{"class":3874},[3862,6252,6119],{"class":3914},[3862,6254,6122],{"class":3874},[3862,6256,6258,6260,6262,6264,6266,6269,6271,6273,6275],{"class":3864,"line":6257},19,[3862,6259,3875],{"class":3874},[3862,6261,5908],{"class":3878},[3862,6263,6107],{"class":3907},[3862,6265,3911],{"class":3874},[3862,6267,6268],{"class":3914},"\"article:published_time\"",[3862,6270,5935],{"class":3907},[3862,6272,3911],{"class":3874},[3862,6274,6119],{"class":3914},[3862,6276,6122],{"class":3874},[3862,6278,6280,6282,6284,6286,6288,6291,6293,6295,6297],{"class":3864,"line":6279},20,[3862,6281,3875],{"class":3874},[3862,6283,5908],{"class":3878},[3862,6285,6107],{"class":3907},[3862,6287,3911],{"class":3874},[3862,6289,6290],{"class":3914},"\"article:modified_time\"",[3862,6292,5935],{"class":3907},[3862,6294,3911],{"class":3874},[3862,6296,6119],{"class":3914},[3862,6298,6122],{"class":3874},[3862,6300,6302,6304,6306,6308,6310,6313,6315,6317,6319],{"class":3864,"line":6301},21,[3862,6303,3875],{"class":3874},[3862,6305,5908],{"class":3878},[3862,6307,6107],{"class":3907},[3862,6309,3911],{"class":3874},[3862,6311,6312],{"class":3914},"\"article:section\"",[3862,6314,5935],{"class":3907},[3862,6316,3911],{"class":3874},[3862,6318,6119],{"class":3914},[3862,6320,6122],{"class":3874},[3862,6322,6324,6326,6328,6330,6332,6335,6337,6339,6341],{"class":3864,"line":6323},22,[3862,6325,3875],{"class":3874},[3862,6327,5908],{"class":3878},[3862,6329,6107],{"class":3907},[3862,6331,3911],{"class":3874},[3862,6333,6334],{"class":3914},"\"article:tag\"",[3862,6336,5935],{"class":3907},[3862,6338,3911],{"class":3874},[3862,6340,6119],{"class":3914},[3862,6342,6122],{"class":3874},[3862,6344,6346,6348,6350,6352,6354,6357,6359,6361,6363],{"class":3864,"line":6345},23,[3862,6347,3875],{"class":3874},[3862,6349,5908],{"class":3878},[3862,6351,6107],{"class":3907},[3862,6353,3911],{"class":3874},[3862,6355,6356],{"class":3914},"\"fb:admins\"",[3862,6358,5935],{"class":3907},[3862,6360,3911],{"class":3874},[3862,6362,6119],{"class":3914},[3862,6364,6122],{"class":3874},[3862,6366,6368,6370,6372,6374,6376,6379,6381,6383,6385],{"class":3864,"line":6367},24,[3862,6369,3875],{"class":3874},[3862,6371,5908],{"class":3878},[3862,6373,6107],{"class":3907},[3862,6375,3911],{"class":3874},[3862,6377,6378],{"class":3914},"\"fb:app_id\"",[3862,6380,5935],{"class":3907},[3862,6382,3911],{"class":3874},[3862,6384,6119],{"class":3914},[3862,6386,6122],{"class":3874},[3862,6388,6390],{"class":3864,"line":6389},25,[3862,6391,3938],{"emptyLinePlaceholder":192},[3862,6393,6395],{"class":3864,"line":6394},26,[3862,6396,6397],{"class":3868},"\u003C!-- Twitter -->\n",[3862,6399,6401,6403,6405,6407,6409,6412,6414,6416,6418],{"class":3864,"line":6400},27,[3862,6402,3875],{"class":3874},[3862,6404,5908],{"class":3878},[3862,6406,5927],{"class":3907},[3862,6408,3911],{"class":3874},[3862,6410,6411],{"class":3914},"\"twitter:card\"",[3862,6413,5935],{"class":3907},[3862,6415,3911],{"class":3874},[3862,6417,6119],{"class":3914},[3862,6419,3882],{"class":3874},[3862,6421,6423,6425,6427,6429,6431,6434,6436,6438,6440],{"class":3864,"line":6422},28,[3862,6424,3875],{"class":3874},[3862,6426,5908],{"class":3878},[3862,6428,5927],{"class":3907},[3862,6430,3911],{"class":3874},[3862,6432,6433],{"class":3914},"\"twitter:site\"",[3862,6435,5935],{"class":3907},[3862,6437,3911],{"class":3874},[3862,6439,6119],{"class":3914},[3862,6441,3882],{"class":3874},[3862,6443,6445,6447,6449,6451,6453,6456,6458,6460,6462],{"class":3864,"line":6444},29,[3862,6446,3875],{"class":3874},[3862,6448,5908],{"class":3878},[3862,6450,5927],{"class":3907},[3862,6452,3911],{"class":3874},[3862,6454,6455],{"class":3914},"\"twitter:title\"",[3862,6457,5935],{"class":3907},[3862,6459,3911],{"class":3874},[3862,6461,6119],{"class":3914},[3862,6463,3882],{"class":3874},[3862,6465,6467,6469,6471,6473,6475,6478,6480,6482,6484],{"class":3864,"line":6466},30,[3862,6468,3875],{"class":3874},[3862,6470,5908],{"class":3878},[3862,6472,5927],{"class":3907},[3862,6474,3911],{"class":3874},[3862,6476,6477],{"class":3914},"\"twitter:description\"",[3862,6479,5935],{"class":3907},[3862,6481,3911],{"class":3874},[3862,6483,6119],{"class":3914},[3862,6485,3882],{"class":3874},[3862,6487,6489,6491,6493,6495,6497,6500,6502,6504,6506],{"class":3864,"line":6488},31,[3862,6490,3875],{"class":3874},[3862,6492,5908],{"class":3878},[3862,6494,5927],{"class":3907},[3862,6496,3911],{"class":3874},[3862,6498,6499],{"class":3914},"\"twitter:creator\"",[3862,6501,5935],{"class":3907},[3862,6503,3911],{"class":3874},[3862,6505,6119],{"class":3914},[3862,6507,3882],{"class":3874},[3862,6509,6511,6513,6515,6517,6519,6522,6524,6526,6528],{"class":3864,"line":6510},32,[3862,6512,3875],{"class":3874},[3862,6514,5908],{"class":3878},[3862,6516,5927],{"class":3907},[3862,6518,3911],{"class":3874},[3862,6520,6521],{"class":3914},"\"twitter:image:src\"",[3862,6523,5935],{"class":3907},[3862,6525,3911],{"class":3874},[3862,6527,6119],{"class":3914},[3862,6529,3882],{"class":3874},[3862,6531,6533],{"class":3864,"line":6532},33,[3862,6534,3938],{"emptyLinePlaceholder":192},[3862,6536,6538],{"class":3864,"line":6537},34,[3862,6539,6540],{"class":3868},"\u003C!-- Favicon -->\n",[3862,6542,6544,6546,6549,6552,6554,6557,6560,6562,6565],{"class":3864,"line":6543},35,[3862,6545,3875],{"class":3874},[3862,6547,6548],{"class":3878},"link",[3862,6550,6551],{"class":3907}," rel",[3862,6553,3911],{"class":3874},[3862,6555,6556],{"class":3914},"\"shortcut icon\"",[3862,6558,6559],{"class":3907}," href",[3862,6561,3911],{"class":3874},[3862,6563,6564],{"class":3914},"\"XXXX.png\"",[3862,6566,3882],{"class":3874},[3862,6568,6570,6572,6574,6576,6578,6581,6583,6585,6587],{"class":3864,"line":6569},36,[3862,6571,3875],{"class":3874},[3862,6573,6548],{"class":3878},[3862,6575,6551],{"class":3907},[3862,6577,3911],{"class":3874},[3862,6579,6580],{"class":3914},"\"apple-touch-icon\"",[3862,6582,6559],{"class":3907},[3862,6584,3911],{"class":3874},[3862,6586,6564],{"class":3914},[3862,6588,3882],{"class":3874},[3862,6590,6592,6594,6596,6598,6600,6603,6606,6608,6611,6613,6615,6617],{"class":3864,"line":6591},37,[3862,6593,3875],{"class":3874},[3862,6595,6548],{"class":3878},[3862,6597,6551],{"class":3907},[3862,6599,3911],{"class":3874},[3862,6601,6602],{"class":3914},"\"apple-touch-icon-precomposed\"",[3862,6604,6605],{"class":3907}," sizes",[3862,6607,3911],{"class":3874},[3862,6609,6610],{"class":3914},"\"57x57\"",[3862,6612,6559],{"class":3907},[3862,6614,3911],{"class":3874},[3862,6616,6564],{"class":3914},[3862,6618,3882],{"class":3874},[3862,6620,6622,6624,6626,6628,6630,6632,6634,6636,6639,6641,6643,6645],{"class":3864,"line":6621},38,[3862,6623,3875],{"class":3874},[3862,6625,6548],{"class":3878},[3862,6627,6551],{"class":3907},[3862,6629,3911],{"class":3874},[3862,6631,6602],{"class":3914},[3862,6633,6605],{"class":3907},[3862,6635,3911],{"class":3874},[3862,6637,6638],{"class":3914},"\"72x72\"",[3862,6640,6559],{"class":3907},[3862,6642,3911],{"class":3874},[3862,6644,6564],{"class":3914},[3862,6646,3882],{"class":3874},[3862,6648,6650,6652,6654,6656,6658,6660,6662,6664,6667,6669,6671,6673],{"class":3864,"line":6649},39,[3862,6651,3875],{"class":3874},[3862,6653,6548],{"class":3878},[3862,6655,6551],{"class":3907},[3862,6657,3911],{"class":3874},[3862,6659,6602],{"class":3914},[3862,6661,6605],{"class":3907},[3862,6663,3911],{"class":3874},[3862,6665,6666],{"class":3914},"\"114x114\"",[3862,6668,6559],{"class":3907},[3862,6670,3911],{"class":3874},[3862,6672,6564],{"class":3914},[3862,6674,3882],{"class":3874},[3862,6676,6678,6680,6682,6684,6686,6688,6690,6692,6695,6697,6699,6701],{"class":3864,"line":6677},40,[3862,6679,3875],{"class":3874},[3862,6681,6548],{"class":3878},[3862,6683,6551],{"class":3907},[3862,6685,3911],{"class":3874},[3862,6687,6602],{"class":3914},[3862,6689,6605],{"class":3907},[3862,6691,3911],{"class":3874},[3862,6693,6694],{"class":3914},"\"144x144\"",[3862,6696,6559],{"class":3907},[3862,6698,3911],{"class":3874},[3862,6700,6564],{"class":3914},[3862,6702,3882],{"class":3874},[3862,6704,6706],{"class":3864,"line":6705},41,[3862,6707,3938],{"emptyLinePlaceholder":192},[3862,6709,6711],{"class":3864,"line":6710},42,[3862,6712,6713],{"class":3868},"\u003C!-- 還可以加上 -->\n",[3862,6715,6717],{"class":3864,"line":6716},43,[3862,6718,6719],{"class":3874},"media=\"screen and (min-device-width:481px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio: 2)\">\n",[3862,6721,6723],{"class":3864,"line":6722},44,[3862,6724,3938],{"emptyLinePlaceholder":192},[3862,6726,6728],{"class":3864,"line":6727},45,[3862,6729,6730],{"class":3868},"\u003C!-- 關於行動裝置主畫面 -->\n",[3862,6732,6734],{"class":3864,"line":6733},46,[3862,6735,6736],{"class":3868},"\u003C!-- 添加到主畫面的標題（iOS 6 新增） -->\n",[3862,6738,6740,6742,6744,6746,6748,6751,6753,6755,6758],{"class":3864,"line":6739},47,[3862,6741,3875],{"class":3874},[3862,6743,5908],{"class":3878},[3862,6745,5927],{"class":3907},[3862,6747,3911],{"class":3874},[3862,6749,6750],{"class":3914},"\"apple-mobile-web-app-title\"",[3862,6752,5935],{"class":3907},[3862,6754,3911],{"class":3874},[3862,6756,6757],{"class":3914},"\"標題\"",[3862,6759,3882],{"class":3874},[3862,6761,6763],{"class":3864,"line":6762},48,[3862,6764,3938],{"emptyLinePlaceholder":192},[3862,6766,6768],{"class":3864,"line":6767},49,[3862,6769,6770],{"class":3868},"\u003C!-- 是否啟用 WebApp 全螢幕模式，刪除蘋果默認的工具欄和選單 -->\n",[3862,6772,6774,6776,6778,6780,6782,6785,6787,6789,6792],{"class":3864,"line":6773},50,[3862,6775,3875],{"class":3874},[3862,6777,5908],{"class":3878},[3862,6779,5927],{"class":3907},[3862,6781,3911],{"class":3874},[3862,6783,6784],{"class":3914},"\"apple-mobile-web-app-capable\"",[3862,6786,5935],{"class":3907},[3862,6788,3911],{"class":3874},[3862,6790,6791],{"class":3914},"\"yes\"",[3862,6793,6075],{"class":3874},[3862,6795,6797],{"class":3864,"line":6796},51,[3862,6798,3938],{"emptyLinePlaceholder":192},[3862,6800,6802],{"class":3864,"line":6801},52,[3862,6803,6804],{"class":3868},"\u003C!-- 添加智能 App 廣告條（iOS 6+ Safari） -->\n",[3862,6806,6808,6810,6812,6814,6816,6819,6821,6823,6826],{"class":3864,"line":6807},53,[3862,6809,3875],{"class":3874},[3862,6811,5908],{"class":3878},[3862,6813,5927],{"class":3907},[3862,6815,3911],{"class":3874},[3862,6817,6818],{"class":3914},"\"apple-itunes-app\"",[3862,6820,5935],{"class":3907},[3862,6822,3911],{"class":3874},[3862,6824,6825],{"class":3914},"\"app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL\"",[3862,6827,3882],{"class":3874},[3862,6829,6831],{"class":3864,"line":6830},54,[3862,6832,3938],{"emptyLinePlaceholder":192},[3862,6834,6836],{"class":3864,"line":6835},55,[3862,6837,6838],{"class":3868},"\u003C!-- 設置蘋果工具欄顏色 -->\n",[3862,6840,6842,6844,6846,6848,6850,6853,6855,6857,6860],{"class":3864,"line":6841},56,[3862,6843,3875],{"class":3874},[3862,6845,5908],{"class":3878},[3862,6847,5927],{"class":3907},[3862,6849,3911],{"class":3874},[3862,6851,6852],{"class":3914},"\"apple-mobile-web-app-status-bar-style\"",[3862,6854,5935],{"class":3907},[3862,6856,3911],{"class":3874},[3862,6858,6859],{"class":3914},"\"black\"",[3862,6861,6075],{"class":3874},[3862,6863,6865],{"class":3864,"line":6864},57,[3862,6866,3938],{"emptyLinePlaceholder":192},[3862,6868,6870],{"class":3864,"line":6869},58,[3862,6871,6872],{"class":3868},"\u003C!-- 忽略頁面中的數字識別為電話，忽略email識別 -->\n",[3862,6874,6876,6878,6880,6882,6884,6887,6889,6891,6894],{"class":3864,"line":6875},59,[3862,6877,3875],{"class":3874},[3862,6879,5908],{"class":3878},[3862,6881,5927],{"class":3907},[3862,6883,3911],{"class":3874},[3862,6885,6886],{"class":3914},"\"format-detection\"",[3862,6888,5935],{"class":3907},[3862,6890,3911],{"class":3874},[3862,6892,6893],{"class":3914},"\"telphone=no, email=no\"",[3862,6895,6075],{"class":3874},[3862,6897,6899],{"class":3864,"line":6898},60,[3862,6900,3938],{"emptyLinePlaceholder":192},[3862,6902,6904],{"class":3864,"line":6903},61,[3862,6905,6906],{"class":3868},"\u003C!-- iPad （直） 768 x 1004（標準解析度） -->\n",[3862,6908,6910,6912,6914,6916,6918,6921,6923,6925,6928,6930,6932,6935],{"class":3864,"line":6909},62,[3862,6911,3875],{"class":3874},[3862,6913,6548],{"class":3878},[3862,6915,6551],{"class":3907},[3862,6917,3911],{"class":3874},[3862,6919,6920],{"class":3914},"\"apple-touch-startup-image\"",[3862,6922,6605],{"class":3907},[3862,6924,3911],{"class":3874},[3862,6926,6927],{"class":3914},"\"768x1004\"",[3862,6929,6559],{"class":3907},[3862,6931,3911],{"class":3874},[3862,6933,6934],{"class":3914},"\"\u002Fsplash-screen-768x1004.png\"",[3862,6936,6075],{"class":3874},[3862,6938,6940],{"class":3864,"line":6939},63,[3862,6941,3938],{"emptyLinePlaceholder":192},[3862,6943,6945],{"class":3864,"line":6944},64,[3862,6946,6947],{"class":3868},"\u003C!-- iPad （直） 1536x2008（Retina） -->\n",[3862,6949,6951,6953,6955,6957,6959,6961,6963,6965,6968,6970,6972,6975],{"class":3864,"line":6950},65,[3862,6952,3875],{"class":3874},[3862,6954,6548],{"class":3878},[3862,6956,6551],{"class":3907},[3862,6958,3911],{"class":3874},[3862,6960,6920],{"class":3914},[3862,6962,6605],{"class":3907},[3862,6964,3911],{"class":3874},[3862,6966,6967],{"class":3914},"\"1536x2008\"",[3862,6969,6559],{"class":3907},[3862,6971,3911],{"class":3874},[3862,6973,6974],{"class":3914},"\"\u002Fsplash-screen-1536x2008.png\"",[3862,6976,6075],{"class":3874},[3862,6978,6980],{"class":3864,"line":6979},66,[3862,6981,3938],{"emptyLinePlaceholder":192},[3862,6983,6985],{"class":3864,"line":6984},67,[3862,6986,6987],{"class":3868},"\u003C!-- iPad (橫) 1024x748（標準解析度） -->\n",[3862,6989,6991,6993,6995,6997,6999,7001,7003,7005,7008,7010,7012,7015],{"class":3864,"line":6990},68,[3862,6992,3875],{"class":3874},[3862,6994,6548],{"class":3878},[3862,6996,6551],{"class":3907},[3862,6998,3911],{"class":3874},[3862,7000,6920],{"class":3914},[3862,7002,6605],{"class":3907},[3862,7004,3911],{"class":3874},[3862,7006,7007],{"class":3914},"\"1024x748\"",[3862,7009,6559],{"class":3907},[3862,7011,3911],{"class":3874},[3862,7013,7014],{"class":3914},"\"\u002FDefault-Portrait-1024x748.png\"",[3862,7016,6075],{"class":3874},[3862,7018,7020],{"class":3864,"line":7019},69,[3862,7021,3938],{"emptyLinePlaceholder":192},[3862,7023,7025],{"class":3864,"line":7024},70,[3862,7026,7027],{"class":3868},"\u003C!-- iPad (橫) 2048x1496（Retina）-->\n",[3862,7029,7031,7033,7035,7037,7039,7041,7043,7045,7048,7050,7052,7055],{"class":3864,"line":7030},71,[3862,7032,3875],{"class":3874},[3862,7034,6548],{"class":3878},[3862,7036,6551],{"class":3907},[3862,7038,3911],{"class":3874},[3862,7040,6920],{"class":3914},[3862,7042,6605],{"class":3907},[3862,7044,3911],{"class":3874},[3862,7046,7047],{"class":3914},"\"2048x1496\"",[3862,7049,6559],{"class":3907},[3862,7051,3911],{"class":3874},[3862,7053,7054],{"class":3914},"\"\u002Fsplash-screen-2048x1496.png\"",[3862,7056,6075],{"class":3874},[3862,7058,7060],{"class":3864,"line":7059},72,[3862,7061,3938],{"emptyLinePlaceholder":192},[3862,7063,7065],{"class":3864,"line":7064},73,[3862,7066,7067],{"class":3868},"\u003C!-- iPhone\u002FiPod Touch 豎屏 320x480 (標準解析度) -->\n",[3862,7069,7071,7073,7075,7077,7079,7081,7083,7085,7088],{"class":3864,"line":7070},74,[3862,7072,3875],{"class":3874},[3862,7074,6548],{"class":3878},[3862,7076,6551],{"class":3907},[3862,7078,3911],{"class":3874},[3862,7080,6920],{"class":3914},[3862,7082,6559],{"class":3907},[3862,7084,3911],{"class":3874},[3862,7086,7087],{"class":3914},"\"\u002Fsplash-screen-320x480.png\"",[3862,7089,6075],{"class":3874},[3862,7091,7093],{"class":3864,"line":7092},75,[3862,7094,3938],{"emptyLinePlaceholder":192},[3862,7096,7098],{"class":3864,"line":7097},76,[3862,7099,7100],{"class":3868},"\u003C!-- iPhone\u002FiPod Touch 豎屏 640x960 (Retina) -->\n",[3862,7102,7104,7106,7108,7110,7112,7114,7116,7118,7121,7123,7125,7128],{"class":3864,"line":7103},77,[3862,7105,3875],{"class":3874},[3862,7107,6548],{"class":3878},[3862,7109,6551],{"class":3907},[3862,7111,3911],{"class":3874},[3862,7113,6920],{"class":3914},[3862,7115,6605],{"class":3907},[3862,7117,3911],{"class":3874},[3862,7119,7120],{"class":3914},"\"640x960\"",[3862,7122,6559],{"class":3907},[3862,7124,3911],{"class":3874},[3862,7126,7127],{"class":3914},"\"\u002Fsplash-screen-640x960.png\"",[3862,7129,6075],{"class":3874},[3862,7131,7133],{"class":3864,"line":7132},78,[3862,7134,3938],{"emptyLinePlaceholder":192},[3862,7136,7138],{"class":3864,"line":7137},79,[3862,7139,7140],{"class":3868},"\u003C!-- iPhone 5\u002FiPod Touch 5 豎屏 640x1136 (Retina)-->\n",[3862,7142,7144,7146,7148,7150,7152,7154,7156,7158,7161,7163,7165,7168],{"class":3864,"line":7143},80,[3862,7145,3875],{"class":3874},[3862,7147,6548],{"class":3878},[3862,7149,6551],{"class":3907},[3862,7151,3911],{"class":3874},[3862,7153,6920],{"class":3914},[3862,7155,6605],{"class":3907},[3862,7157,3911],{"class":3874},[3862,7159,7160],{"class":3914},"\"640x1136\"",[3862,7162,6559],{"class":3907},[3862,7164,3911],{"class":3874},[3862,7166,7167],{"class":3914},"\"\u002Fsplash-screen-640x1136.png\"",[3862,7169,6075],{"class":3874},[3862,7171,7173],{"class":3864,"line":7172},81,[3862,7174,3938],{"emptyLinePlaceholder":192},[3862,7176,7178],{"class":3864,"line":7177},82,[3862,7179,7180],{"class":3868},"\u003C!-- RSS -->\n",[3862,7182,7184,7186,7188,7190,7192,7195,7198,7200,7203,7206,7208,7211,7213,7215,7218],{"class":3864,"line":7183},83,[3862,7185,3875],{"class":3874},[3862,7187,6548],{"class":3878},[3862,7189,6551],{"class":3907},[3862,7191,3911],{"class":3874},[3862,7193,7194],{"class":3914},"\"alternate\"",[3862,7196,7197],{"class":3907}," type",[3862,7199,3911],{"class":3874},[3862,7201,7202],{"class":3914},"\"application\u002Frss+xml\"",[3862,7204,7205],{"class":3907}," title",[3862,7207,3911],{"class":3874},[3862,7209,7210],{"class":3914},"\"RSS\"",[3862,7212,6559],{"class":3907},[3862,7214,3911],{"class":3874},[3862,7216,7217],{"class":3914},"\"\u002Frss.xml\"",[3862,7219,6075],{"class":3874},[10,7221,7222],{},"除此之外：",[42,7224,7225,7228,7231,7238,7247,7250],{},[45,7226,7227],{},"H1 — H5 至少要有一個，且按照層級出現，不可跳過。",[45,7229,7230],{},"資料類型請使用 table, 列表類型請使用 ol, ul。",[45,7232,7233,7234,7237],{},"內容太長可以使用錨點，例如 ",[1444,7235,7236],{},"\u003Ca href=\"#id\">\u003C\u002Fa>","，增加關聯性。",[45,7239,7240,7241,7243,7244,2782],{},"Html盡量符合語意，例如文章使用",[1444,7242,3381],{},"，章節使用",[1444,7245,7246],{},"\u003Csection>",[45,7248,7249],{},"如果可以，可增加影音類型有助提升 SEO。",[45,7251,7252],{},"可以增加輔助標示的要加上去。例如：",[3854,7254,7256],{"className":3856,"code":7255,"language":3858,"meta":177,"style":177},"\u003Cimg alt=\"測試圖\"\u002F>\n\u003Ca href=\"#\" title=\"連結\">連結文字\u003C\u002Fa>\n",[1444,7257,7258,7274],{"__ignoreMap":177},[3862,7259,7260,7262,7264,7267,7269,7272],{"class":3864,"line":3865},[3862,7261,3875],{"class":3874},[3862,7263,109],{"class":3878},[3862,7265,7266],{"class":3907}," alt",[3862,7268,3911],{"class":3874},[3862,7270,7271],{"class":3914},"\"測試圖\"",[3862,7273,6075],{"class":3874},[3862,7275,7276,7278,7280,7282,7284,7287,7289,7291,7294,7297,7299],{"class":3864,"line":178},[3862,7277,3875],{"class":3874},[3862,7279,87],{"class":3878},[3862,7281,6559],{"class":3907},[3862,7283,3911],{"class":3874},[3862,7285,7286],{"class":3914},"\"#\"",[3862,7288,7205],{"class":3907},[3862,7290,3911],{"class":3874},[3862,7292,7293],{"class":3914},"\"連結\"",[3862,7295,7296],{"class":3874},">連結文字\u003C\u002F",[3862,7298,87],{"class":3878},[3862,7300,3882],{"class":3874},[42,7302,7303],{},[45,7304,7305],{},"語言",[3854,7307,7309],{"className":3856,"code":7308,"language":3858,"meta":177,"style":177},"\u003Chtml lang=\"en\">\n",[1444,7310,7311],{"__ignoreMap":177},[3862,7312,7313,7315,7317,7320,7322,7325],{"class":3864,"line":3865},[3862,7314,3875],{"class":3874},[3862,7316,3858],{"class":3878},[3862,7318,7319],{"class":3907}," lang",[3862,7321,3911],{"class":3874},[3862,7323,7324],{"class":3914},"\"en\"",[3862,7326,3882],{"class":3874},[430,7328,7330],{"id":7329},"vue","Vue",[10,7332,7333],{},"因為目前專案大部分都使用 Vue ，但 Vue 要做每頁都不一樣的 meta 資訊比較麻煩，所以直接使用 Nuxt。\n全域: 整個網站，寫在全域設定檔 nuxt.config.js\n單頁: 套用單頁，寫在該頁面的 head 設定，例如：",[3854,7335,7339],{"className":7336,"code":7337,"language":7338,"meta":177,"style":177},"language-ts shiki shiki-themes github-light github-dark","export default {\n  head: {\n    title: ''\n }\n}\n","ts",[1444,7340,7341,7353,7358,7366,7371],{"__ignoreMap":177},[3862,7342,7343,7347,7350],{"class":3864,"line":3865},[3862,7344,7346],{"class":7345},"svdQ7","export",[3862,7348,7349],{"class":7345}," default",[3862,7351,7352],{"class":3874}," {\n",[3862,7354,7355],{"class":3864,"line":178},[3862,7356,7357],{"class":3874},"  head: {\n",[3862,7359,7360,7363],{"class":3864,"line":181},[3862,7361,7362],{"class":3874},"    title: ",[3862,7364,7365],{"class":3914},"''\n",[3862,7367,7368],{"class":3864,"line":3899},[3862,7369,7370],{"class":3874}," }\n",[3862,7372,7373],{"class":3864,"line":3925},[3862,7374,7375],{"class":3874},"}\n",[430,7377,7378],{"id":7378},"網頁載入速度",[42,7380,7381,7384,7390,7400,7406,7409,7412,7415,7418,7421,7424,7427],{},[45,7382,7383],{},"基本先依據 Google PageSpeed Insights改善。至少半秒載完畫面。",[45,7385,7386,7387,7389],{},"提供 next-gen 格式的圖片",[28,7388],{},"\nJPEG 2000、JPEG XR 和 WebP 等圖片格式的壓縮效果通常優於 PNG 或 JPEG，因此能提高下載速度並節省使用者的數據用量。",[45,7391,7392,7393,7395,7396,7399],{},"使用大小合適的圖片有助於節省行動數據用量並縮短載入時間。",[28,7394],{},"\n視瀏覽器支援狀況採用不同技術，若可支援最新，圖片可使用 ",[1444,7397,7398],{},"\u003Cpicture>"," 相關 RWD 方式。若不支援最新，使用 css media方式。\n另外情境如果可以，使用 lazy loading。",[45,7401,7402,7403,7405],{},"排除禁止轉譯的資源。",[28,7404],{},"\n先載入必要之 js\u002Fcss ，其他不重要的使用 lazy loading",[45,7407,7408],{},"視情況使用 Cache",[45,7410,7411],{},"將主要執行緒的工作降到最低 。",[45,7413,7414],{},"文字壓縮",[45,7416,7417],{},"避免耗用大量網路資源。",[45,7419,7420],{},"減少 JavaScript 執行時間",[45,7422,7423],{},"將關鍵要求層級降至最低 。優先載入必要資源",[45,7425,7426],{},"降低要求數量並減少傳輸大小",[45,7428,7429],{},"手機版跟桌機版",[430,7431,7432],{"id":7432},"網站安全性",[42,7434,7435,7438,7441,7444,7447,7450,7453],{},[45,7436,7437],{},"Https (申請 SSL)，Chrome79將逐步封鎖網頁中未SSL加密之內容",[45,7439,7440],{},"如果使用者輸入http，也要轉到 Https",[45,7442,7443],{},"監控流量、伺服器錯誤、駭客入侵等可使用 Google Search Console幫助",[45,7445,7446],{},"備份",[45,7448,7449],{},"防火牆與弱掃",[45,7451,7452],{},"軟體更新",[45,7454,7455],{},"其他，sesstion 存活時間、不連外網、blahblah…",[430,7457,7458],{"id":7458},"提交索引",[42,7460,7461,7464,7467,7474],{},[45,7462,7463],{},"Google 在 2018\u002F7\u002F25 星期三宣布停止公開提交網址索引的服務。",[45,7465,7466],{},"Bing 於 2018\u002F9\u002F18 公告停止公開提交網址索引服務",[45,7468,7469],{},[87,7470,7473],{"href":7471,"rel":7472,"target":92,"title":93},"https:\u002F\u002Fsearch.google.com\u002Fsearch-console\u002Fabout",[91],"Google Search Console",[45,7475,7476],{},[87,7477,7480],{"href":7478,"rel":7479,"target":92,"title":93},"https:\u002F\u002Fwww.bing.com\u002Ftoolbox\u002Fwebmaster",[91],"Bing網站管理工具",[430,7482,7483],{"id":7483},"域名",[10,7485,7486],{},"域名最好可以包含關鍵字或相關。\n使用者不管有沒有打 www ，也要可以連線。\n域名最好是符合性質。例如台灣使用.tw，開發使用.dev",[430,7488,7490],{"id":7489},"robottxt","Robot.txt",[42,7492,7493,7502,7510,7518,7527,7535,7547,7554,7557,7560],{},[45,7494,7495,7496,7498,7499,7501],{},"允許所有搜尋引擎檢索所有內容(通常建議使用)",[28,7497],{},"\n User-agent: *",[28,7500],{},"\n Disallow:",[45,7503,7504,7505,7498,7507,7509],{},"拒絕所有搜尋引擎檢索所有內容(正式環境請避免使用)",[28,7506],{},[28,7508],{},"\n Disallow: \u002F",[45,7511,7512,7513,7498,7515,7517],{},"拒絕所有搜尋引擎檢索\u002Fmembers\u002F底下所有內容。",[28,7514],{},[28,7516],{},"\n Disallow: \u002Fmembers\u002F",[45,7519,7520,7521,7523,7524,7526],{},"拒絕Google搜圖的爬蟲檢索\u002Fimages\u002F底下所有內容。",[28,7522],{},"\n User-agent: Googlebot-image",[28,7525],{},"\n Disallow:\u002Fimages\u002F",[45,7528,7529,7530,7498,7532,7534],{},"萬用字元：拒絕所有搜尋引擎檢索網站內png為副檔名的圖檔。",[28,7531],{},[28,7533],{},"\n Disallow: *.png$",[45,7536,7537,7538,7540,7541,7543,7544,7546],{},"萬用字元：拒絕Bing搜尋引擎檢索網站內\u002Fwp-admin目錄底下所有內容及網站內開頭為test的所有檔名。",[28,7539],{},"\n User-agent: bingbot",[28,7542],{},"\n Disallow: \u002Fwp-admin\u002F",[28,7545],{},"\n Disallow: ^test*",[45,7548,7549,7550],{},"sitemap: ",[87,7551,7552],{"href":7552,"rel":7553},"http:\u002F\u002Fwww.XXXXXXXX.com\u002Fsitemap.xml",[91],[45,7555,7556],{},"Crawl-deslay: XX — 告訴爬蟲，再次來訪的最短時間間隔為20秒。(百度公開表示不支援此語法)",[45,7558,7559],{},"Robot.txt檔案只能放在網站的根目錄底下",[45,7561,7562],{},"有些東西要擋掉比較好",[430,7564,7565],{"id":7565},"其他",[42,7567,7568,7571,7586],{},[45,7569,7570],{},"XML",[45,7572,7573,7574,7576,7577,7579,7580,7582,7583,7585],{},"可使用工具產生：XML-Sitemaps",[28,7575],{},"\n網址數量往往超過一個Sitemap檔案可以乘載的大小？",[28,7578],{},"\n單靠Sitemap製作工具依然會有許多網頁沒辦法被找到？",[28,7581],{},"\n每天都有大量新頁面產生，需要時時更新Sitemap內的內容？",[28,7584],{},"\n解決辦法：套件、模組、自行開發程式自行產生sitemap",[45,7587,7588,7589,7591],{},"Subdomain or SubFolder？",[28,7590],{},"\n建議 SubFolder",[104,7593,7594,7600],{},[10,7595,7596],{},[109,7597],{"alt":7598,"src":7599},"Subdomain 與 SubFolder 比較圖表","\u002Fimages\u002Fblog\u002F9.png",[2854,7601,7602],{},[10,7603,7604],{},"SubFolder 表現較佳",[430,7606,4871],{"id":7607},"ux",[42,7609,7610,7613,7616,7619,7622,7625,7628,7631,7634,7640,7643,7646,7649,7652,7655],{},[45,7611,7612],{},"每頁至少要顯示關鍵字一次。",[45,7614,7615],{},"避免無意義的用關鍵字填滿內容，可使用同義詞 確保內容是高品質的。",[45,7617,7618],{},"內容定期更新，透露更新時間。",[45,7620,7621],{},"廣告不能影響主要內容閱讀，且可以是被辨別的。 提供外部連結與內部連結。",[45,7623,7624],{},"supplementary content。例如:導航選單。",[45,7626,7627],{},"舊的 SEO 資訊要清理乾淨 。",[45,7629,7630],{},"Copyright, Contact。",[45,7632,7633],{},"主要內容前 150 個字要有關鍵字。",[45,7635,7636,7639],{},[1444,7637,7638],{},"\u003Ctitle>","少於64個字符, 您最多可以包含12個單詞，這些單詞將被算作頁 面標題的一部分，並考慮在前8個單詞中使用重要的關鍵字。頁面標題 的其餘部分將被視為頁面上的普通文本。",[45,7641,7642],{},"別亂轉址。",[45,7644,7645],{},"太多 Landing Page 導到同一頁面。",[45,7647,7648],{},"頁面只以賺錢為目的，google 會視為垃圾。 廣告別亂放，蓋全頁面會被降低排名。",[45,7650,7651],{},"自動播放的影音廣告會降低排名 固定位置的大型廣告會降低排名 廣告在行動裝置大於30%高度會降低排名",[45,7653,7654],{},"全螢幕的廣告 動畫廣告",[45,7656,7657,7662],{},[87,7658,7661],{"href":7659,"rel":7660,"target":92,"title":93},"https:\u002F\u002Fwww.searchenginewatch.com\u002F2017\u002F11\u002F30\u002Fwhat-are-sitelinks-and-how-can-i-get-them\u002F",[91],"Sitelinks"," and search box internal 語言沒設定好，也會影響。",[104,7664,7665,7671],{},[10,7666,7667],{},[109,7668],{"alt":7669,"src":7670},"在搜尋結果出現站內搜尋框","\u002Fimages\u002Fblog\u002F10.webp",[2854,7672,7673],{},[10,7674,7675],{},"站內搜尋",[42,7677,7678,7680,7683],{},[45,7679,7305],{},[45,7681,7682],{},"301 Redirects Are POWERFUL & WHITE HAT",[45,7684,7685],{},"注意使用者在你的網站上的發言內容",[430,7687,7688],{"id":7688},"工具整理",[42,7690,7691,7696,7703,7710,7717,7724,7729,7736,7743,7750],{},[45,7692,7693],{},[87,7694,7473],{"href":7471,"rel":7695,"target":92,"title":93},[91],[45,7697,7698],{},[87,7699,7702],{"href":7700,"rel":7701,"target":92,"title":93},"https:\u002F\u002Fdevelopers.google.com\u002Fspeed\u002Fpagespeed\u002Finsights\u002F?hl=zh-TW",[91],"Google PageSpeed Insights",[45,7704,7705],{},[87,7706,7709],{"href":7707,"rel":7708,"target":92,"title":93},"https:\u002F\u002Fads.google.com\u002Fhome\u002Ftools\u002Fkeyword-planner\u002F",[91],"Google Ads 關鍵字研究",[45,7711,7712],{},[87,7713,7716],{"href":7714,"rel":7715,"target":92,"title":93},"https:\u002F\u002Fsearch.google.com\u002Fstructured-data\u002Ftesting-tool\u002F",[91],"Google結構化資料測試工具",[45,7718,7719],{},[87,7720,7723],{"href":7721,"rel":7722,"target":92,"title":93},"https:\u002F\u002Fmarketingplatform.google.com\u002Fabout\u002Fanalytics\u002F",[91],"Google Analytics",[45,7725,7726],{},[87,7727,7480],{"href":7478,"rel":7728,"target":92,"title":93},[91],[45,7730,7731],{},[87,7732,7735],{"href":7733,"rel":7734,"target":92,"title":93},"https:\u002F\u002Fkeywordtool.io\u002F",[91],"相關關鍵字檢索",[45,7737,7738],{},[87,7739,7742],{"href":7740,"rel":7741,"target":92,"title":93},"https:\u002F\u002Fapp.kwfinder.com\u002F",[91],"相關關鍵字檢索＋查看其他有關的網站",[45,7744,7745],{},[87,7746,7749],{"href":7747,"rel":7748,"target":92,"title":93},"https:\u002F\u002Fwww.xml-sitemaps.com\u002F",[91],"XML-Sitemaps",[45,7751,7752],{},[87,7753,7756],{"href":7754,"rel":7755,"target":92,"title":93},"https:\u002F\u002Fseositecheckup.com\u002F",[91],"SEO Reporter",[430,7758,3009],{"id":3009},[42,7760,7761,7768,7775,7782,7789,7796,7803,7810,7817,7824,7831,7838],{},[45,7762,7763],{},[87,7764,7767],{"href":7765,"rel":7766,"target":92,"title":93},"https:\u002F\u002Fzh.wikipedia.org\u002Fwiki\u002F%E6%90%9C%E5%B0%8B%E5%BC%95%E6%93%8E%E6%9C%80%E4%BD%B3%E5%8C%96#%E5%BD%93%E4%BB%A3%E6%90%9C%E5%B0%8B%E5%BC%95%E6%93%8E",[91],"搜尋引擎最佳化",[45,7769,7770],{},[87,7771,7774],{"href":7772,"rel":7773,"target":92,"title":93},"https:\u002F\u002Fwww.hobo-web.co.uk\u002Fseo-tutorial\u002F?fbclid=IwAR0QKuD_RBGD-DdRr2vbj3brSjJ9H_50hqtLKE98_C4BfRvufcW0F0IvnJI#an-introduction-to-seo",[91],"Google SEO Tutorial for Beginners | How To SEO A Website Step By Step (2020)",[45,7776,7777],{},[87,7778,7781],{"href":7779,"rel":7780,"target":92,"title":93},"https:\u002F\u002Fbacklinko.com\u002Fon-page-seo",[91],"On-Page SEO: Anatomy of a Perfectly Optimized Page (2019 Update)",[45,7783,7784],{},[87,7785,7788],{"href":7786,"rel":7787,"target":92,"title":93},"https:\u002F\u002Fwww.oxxostudio.tw\u002Farticles\u002F201406\u002Fsocial-meta.html",[91],"結構化資料 SEO 與 meta 標籤",[45,7790,7791],{},[87,7792,7795],{"href":7793,"rel":7794,"target":92,"title":93},"https:\u002F\u002Fithelp.ithome.com.tw\u002Farticles\u002F10201762",[91],"01. Nuxt.js 小跑起步 - iT 邦幫忙::一起幫忙解決難題，拯救 IT 人的一天",[45,7797,7798],{},[87,7799,7802],{"href":7800,"rel":7801,"target":92,"title":93},"https:\u002F\u002Fithelp.ithome.com.tw\u002Farticles\u002F10204248",[91],"08. Nuxt 客製《甜點電商》SEO 基本資訊 - iT 邦幫忙::一起幫忙解決難題，拯救 IT 人的一天",[45,7804,7805],{},[87,7806,7809],{"href":7807,"rel":7808,"target":92,"title":93},"http:\u002F\u002Fwww.ank.co.jp\u002Fworks\u002Fproducts\u002Fcopypelna\u002F",[91],"株式会社アンク：コピペ判定判定ソフト「コピペルナー」",[45,7811,7812],{},[87,7813,7816],{"href":7814,"rel":7815,"target":92,"title":93},"http:\u002F\u002Fsujiko.jp\u002F",[91],"重複コンテンツ・ミラーサイト・類似ページ判定ツール",[45,7818,7819],{},[87,7820,7823],{"href":7821,"rel":7822,"target":92,"title":93},"https:\u002F\u002Fsearch.google.com\u002Ftest\u002Fmobile-friendly",[91],"Mobile-Friendly Test - Google Search Console",[45,7825,7826],{},[87,7827,7830],{"href":7828,"rel":7829,"target":92,"title":93},"http:\u002F\u002Fseocheki.net\u002F",[91],"SEOチェキ！無料で使えるSEOツール",[45,7832,7833],{},[87,7834,7837],{"href":7835,"rel":7836,"target":92,"title":93},"https:\u002F\u002Fthe-allstars.com\u002Ftools\u002Fkeyword\u002Fsearch",[91],"Google \u002F Yahoo 關鍵字排名查詢 | 陪您航向未來的好夥伴 - Allstars 星辰網站建置與網頁設計",[45,7839,7840],{},[87,7841,7844],{"href":7842,"rel":7843,"target":92,"title":93},"https:\u002F\u002Fmyrankaware.com\u002F",[91],"Free Keyword Rank Checker Tool Online for Google, Yahoo, Bing",[4553,7846,7847],{},"html pre.shiki code .ssxIu, html code.shiki .ssxIu{--shiki-default:#24292E;--shiki-github-dark:#E1E4E8}html pre.shiki code .sk71V, html code.shiki .sk71V{--shiki-default:#22863A;--shiki-github-dark:#85E89D}html pre.shiki code .sIsaT, html code.shiki .sIsaT{--shiki-default:#6F42C1;--shiki-github-dark:#B392F0}html pre.shiki code .sJ6F3, html code.shiki .sJ6F3{--shiki-default:#032F62;--shiki-github-dark:#9ECBFF}html pre.shiki code .sdCPZ, html code.shiki .sdCPZ{--shiki-default:#6A737D;--shiki-github-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html.github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html pre.shiki code .svdQ7, html code.shiki .svdQ7{--shiki-default:#D73A49;--shiki-github-dark:#F97583}",{"title":177,"searchDepth":178,"depth":178,"links":7849},[7850,7851,7852,7853],{"id":395,"depth":181,"text":395},{"id":5870,"depth":181,"text":5870},{"id":5876,"depth":181,"text":5877},{"id":5893,"depth":181,"text":5893},"2020-01-16","SEO（搜尋引擎最佳化）學習筆記總整理：從 HTML meta、載入速度、網站安全、提交索引、robots.txt 到 UX 與實用工具的完整重點。",{},"\u002Fzh\u002Fblog\u002Fseo",{"title":5860,"description":7855},"zh\u002Fblog\u002Fseo",[1647,7861],"搜尋引擎","ggAaIsDqD0uhYM2nK6OPWCxVC48u0M0xplFrQVb-xqI",{"id":7864,"title":7865,"body":7866,"date":8043,"description":7872,"draft":189,"extension":190,"meta":8044,"navigation":192,"ogImage":193,"path":8045,"seo":8046,"stem":8047,"tags":8048,"translationKey":193,"updatedAt":193,"__hash__":8051},"blog_zh\u002Fzh\u002Fblog\u002Fshopping-in-chat-ui.md","如果使用即時通訊 UI 來設計購物車結帳流程，會是什麼樣的感覺？",{"type":7,"value":7867,"toc":8035},[7868,7870,7873,7876,7879,7882,7886,7899,7902,7905,7908,7911,7914,7927,7930,7933,7936,7939,7942,7946,7959,7962,7965,7978,7981,7994,7997,8000,8003,8006,8009,8012,8015,8018,8021,8024,8027],[17,7869,395],{"id":395},[10,7871,7872],{},"昨晚在填寫一些網路表單覺得好枯燥乏味時，突然標題靈光一閃，於是決定在放國慶連假前，好好的集中精神來實做、初探一下，否則放完了假可能會是一條活屍行走於人間…",[10,7874,7875],{},"而因為是一時興起，所以決定能不動流程就不動的前提之下來進行，流程參考為 P 家 APP 從檢視購物車到結帳的流程：",[10,7877,7878],{},"購物車清單(可調整商品數量)\n付款方式選擇(可調整付款方式細項)\n購買人、發票與收貨人資料(可編輯)\n送出訂單。\n當然，我不精於做購物網站，這個流程中一定還有很多特殊的「眉角」我沒注意到和不知道的，正在閱讀此篇文章的你，不管你是在這方面領域的高高手或是喜愛購物的捧油們，只要認為有問題或值得討論的地方就可以框起來留言或是在最底下留言，大家一起研究研究。",[10,7880,7881],{},"如果你準備好了就可以隨時開始閱讀，希望讀完後你會覺得我可以。",[17,7883,7885],{"id":7884},"購物車清單-與調整商品數量","購物車清單 與 調整商品數量",[104,7887,7888,7894],{},[10,7889,7890],{},[109,7891],{"alt":7892,"src":7893},"聊天訊息框裡顯示購物車商品以及商品總額計算","\u002Fimages\u002Fblog\u002F2.png",[2854,7895,7896],{},[10,7897,7898],{},"左圖：購物車清單 ; 右圖：編輯購物車",[10,7900,7901],{},"開始總是美好的，畫完之後完全覺得沒問題…",[10,7903,7904],{},"清單中拋棄直接在裡面編輯數量的做法，因為版面會不夠用，所以乾脆直接用一顆修改按鈕。模糊背景後利用卡片式手法顯示編輯頁，單項數量增減使用大顆按鈕點擊，數字則不能歸 0 ，有看過一種方式是歸 0 後，會跳出警告視窗說明歸 0 會從購物車刪除，但我想讓這個品項必須按刪除才能刪除，讓商品盡可能留在畫面上，也許還有從 0 到 1 的機會(風險則是使用者會不會很想直接按刪除…)。",[10,7906,7907],{},"調整後回到左圖清單中，清單立即刷新，總額數字擺在結帳按鈕左邊，利用簡單的設計手法讓他看得清，但又不要一直注意總金額，畢竟，買到自己想要跟需要的產品，不管花多少應該都值得 😂 。",[10,7909,7910],{},"右圖上方的總額捲動時會縮小並固定於最上方。另外卡片以垂直滑動，因為使用左右滑動可能會誤觸數量+- 按鈕，而且比起橫向滑動，我覺得垂直滑動更得心應手，而且不會有左右手問題。",[17,7912,7913],{"id":7913},"付款方式選擇",[104,7915,7916,7922],{},[10,7917,7918],{},[109,7919],{"alt":7920,"src":7921},"結帳流程","\u002Fimages\u002Fblog\u002F3.png",[2854,7923,7924],{},[10,7925,7926],{},"左圖：選擇付款方式 ; 右圖：選擇信用卡分期付款。",[10,7928,7929],{},"畫到這裡其實已經開始覺得我幹嘛自己踩這個坑，這裡超煩躁的。",[10,7931,7932],{},"當上一步按結帳之後，訊息欄先跳出總金額，接著詢問付款方式，因為我們是用即時通訊的設計方法，所以詢問的語氣可以展現親和力。",[10,7934,7935],{},"因為規定自己在一天內完成這個實驗，所以直接挑信用卡實作，先不考量其他付款方式，但不管如何，這裏我想來想去都需要用第二畫面來實作，否則一問一答之下很容易讓訊息過多，也就分散購物的注意力了。另外則是用第二畫面之後，可以保留日後的擴充性。",[10,7937,7938],{},"接著是最底下「稍等再…要買」那個位置，我一直在思考什麼時候要讓使用者說話，如果有 AI 的介入，我可能就會把使用者文字輸入框永遠顯示。如果沒有，基於循循善誘的原則，放顆按鈕讓他可以隨時離開結帳流程，但導引他到可以買更多東西的地方去，比如可以引導去熱門商品逛逛看。",[10,7940,7941],{},"右圖左下角則提供更換付款方式。右下角按下確定後，則進入下一個對話。",[17,7943,7945],{"id":7944},"購買人發票方式與收貨人資料及其資料編輯","購買人、發票方式與收貨人資料及其資料編輯",[104,7947,7948,7954],{},[10,7949,7950],{},[109,7951],{"alt":7952,"src":7953},"修改信用卡資料","\u002Fimages\u002Fblog\u002F4.png",[2854,7955,7956],{},[10,7957,7958],{},"左圖：購買人資料 ; 右圖：購買人資料編輯。",[10,7960,7961],{},"如果先前已經購物過，則直接顯示購買人資訊，確定無誤則直接輸入信用卡背後 3 碼。若先前沒有購買過或是想修改資料，則使用第二畫面填寫，底下仍舊保留兩顆按鈕，可以取消修改或是按確定直接進到下一步。",[10,7963,7964],{},"這裡思考很久的地方是背面 3 碼要不要統一輸入形式的問題，但最後還是決定在修改時可以直接輸入，就不需要剛從傳統表單填完又要以即時通訊的輸入方式填那 3 碼，雖然分兩種輸入方式，但我覺得這樣會是比較好的。",[104,7966,7967,7973],{},[10,7968,7969],{},[109,7970],{"alt":7971,"src":7972},"發票處理方式","\u002Fimages\u002Fblog\u002F5.png",[2854,7974,7975],{},[10,7976,7977],{},"左圖：發票處理方式 ; 右圖：使用者輸入統一發票",[10,7979,7980],{},"發票則因為相對簡單，捐贈可以使用第二畫面來挑選與輸入愛心碼，統一發票則是直接使用輸入框(右圖)，並提供一個取消按鈕，讓他可以返回。如果已經輸入了統一發票(下方左圖)，則取消會變成修改按鈕，提供修改機會。",[104,7982,7983,7989],{},[10,7984,7985],{},[109,7986],{"alt":7987,"src":7988},"收件資料修改","\u002Fimages\u002Fblog\u002F6.png",[2854,7990,7991],{},[10,7992,7993],{},"左圖：收貨人資料 ; 右圖：收貨人資料編輯。",[10,7995,7996],{},"終於來到最後一個步驟，如果已經有資料則直接顯示，若沒有則有兩種方式：通訊錄快速選單 與 直接修改。 快速選單只顯示名稱與地址部分資料，因為這裡不會有數字增減按鈕，所以使用了左右滑動概念，點擊後直接更新收貨人資料。直接修改則是使用第二畫面，只顯示必要的欄位。",[10,7998,7999],{},"到了這個節骨眼，左下角仍舊保持著稍待結帳你可能覺得奇怪，而我的目的是為了讓使用者臨時想起或是親友突然要他加買個東西，可以再跳出去，等待下次進來(但仍舊是本次操作沒離開 APP)，就直接進到這個最後畫面，點擊完成終結這趟旅程，也就是說，整個旅程都是隨時可以跳出去的，即便這樣有風險，但也許會得到更多。",[17,8001,8002],{"id":8002},"感想",[10,8004,8005],{},"優點：",[10,8007,8008],{},"只要畫面捲回去看就一目瞭然各種資訊，畫面上不需要有重複提示(例如總金額，數量…等)。\n循序漸進的誘導，避免使用者以往在填寫表單時會不照順序填，出錯機率較小，一次只專注一種題目。\n視覺與心理較為輕鬆，不若以往心態上很謹慎的填寫(容易手滑？)。",[10,8010,8011],{},"缺點：",[10,8013,8014],{},"仍在某些時刻，需要填寫傳統表單，若全用訊息方式訊息會過長。\n對於進階高手，有可能反而造成結帳速度過慢。\n沒有 AI 介入，為了防呆，使用者文字輸入框會極少出現，有點失去用此設計的意義。如果能直接輸入「信用卡分3期0利率，開統一發票：12345678」，一瞬之間就可以忽略兩個步驟，而且自動判斷流程哪個還沒填到就最棒了。\n可能需要的互動技巧：",[10,8016,8017],{},"任何經過修正的資料，都要在原來的對話方塊內做即時更新，讓未來畫面回卷時都能夠再做修正，避免使用者不知道之前的對話方塊內的按鈕是否能再點擊，而且有更動過的資料要重新顯示在最新訊息位置。另外置底的按鈕也要判斷是否已經填完全部所需資料，才出現「完成」按鈕。",[17,8019,8020],{"id":8020},"結語",[10,8022,8023],{},"此篇幾乎都是基於我平時當一個正常使用者時的情況來做一個設想，初步探討用這樣的方式來設計購物車可能會遇到什麼樣的麻煩，然後如何解決遇到的問題。雖然沒有什麼數據可以支持我的這些構想，但如果有些許地方能幫上你的忙的話那就太棒了！",[10,8025,8026],{},"最後，獻上初淺的流程圖，祝大家民國 106 年國慶愉快！",[104,8028,8029],{},[10,8030,8031],{},[109,8032],{"alt":8033,"src":8034},"聊天訊息框購物流程圖","\u002Fimages\u002Fblog\u002F7.png",{"title":177,"searchDepth":178,"depth":178,"links":8036},[8037,8038,8039,8040,8041,8042],{"id":395,"depth":181,"text":395},{"id":7884,"depth":181,"text":7885},{"id":7913,"depth":181,"text":7913},{"id":7944,"depth":181,"text":7945},{"id":8002,"depth":181,"text":8002},{"id":8020,"depth":181,"text":8020},"2017-10-06",{},"\u002Fzh\u002Fblog\u002Fshopping-in-chat-ui",{"title":7865,"description":7872},"zh\u002Fblog\u002Fshopping-in-chat-ui",[3753,8049,8050],"即時通訊","線上購物","Pxs184xQ4v5UmNuMR0zlytBTcYr0CYGvNoysCtb50tE",1782154044073]