個人品牌官網Google搜尋優化指南
電商知識庫

沒有官網的個人品牌,在 Google 上等於不存在:
你正在錯過哪些機會?(2026)

2026-04-11 閱讀約 7 分鐘 個人品牌 · Google SEO · 顧問建站 · 講師官網
30 秒看懂核心答案

個人品牌沒有官網,在 Google 搜尋結果中幾乎不存在,潛在客戶、媒體採訪、演講邀請等機會,都會在找不到你的第一秒流向有官網的競爭者。

你的 IG 帳號、你的 LinkedIn 頁面、你的 Podcast,都不是你在 Google 搜尋結果裡的「主頁」。當有人 Google 你的名字或你的專業類別,出現的是社群平台的連結——如果排名不夠好,甚至什麼都找不到。

這意味著:每一個透過 Google 找顧問、找教練、找講師的潛在客戶,如果你沒有官網,他就不會聯絡你,他根本不知道你存在。這不是在說你的社群做得不好,這是在說你缺少一個「讓 Google 找得到你」的基礎建設。

Google 搜尋和社群平台,對個人品牌的意義有什麼不同?

這兩個工具不是競爭關係,而是完全不同的任務。搞清楚它們的差異,是決定你要不要建官網最重要的第一步:

面向 Google 搜尋+官網 IG / LinkedIn / 社群
使用者意圖 有具體需求、準備付費或合作 瀏覽、娛樂、追蹤動態
內容保存期限 文章越老越強,持續帶流量 24 小時到 2 週後幾乎消失
演算法依賴 可優化控制,不依賴平台決定 平台隨時可以砍觸及率
資料擁有 訪客資料你完全擁有 平台擁有,你無法帶走
AI 引用機率 高(有結構化標記則更高) 極低(AI 幾乎不引用社群)
第一印象控制 你決定顯示什麼、如何呈現 平台介面決定,你只能填格子

社群讓人認識你,但 Google 讓人「在有需求的時候」找到你。這個差別,直接決定了你接到的合作品質是隨機演算法送來的,還是主動搜尋你專業的精準客戶。

沒有官網,個人品牌正在錯過哪些機會?

以下是四種最常發生、但個人品牌業主最難察覺的「隱形損失」——它們之所以難察覺,是因為你根本不知道那些機會曾經出現過:

1. 媒體採訪和報導機會

記者在寫報導前,第一件事就是 Google 受訪者的名字。找不到官網,他不會花時間追問你的資料,而是改聯絡下一個有完整官網的人。你可能永遠不知道有這個機會存在。

2. 演講邀請和課程合作

活動主辦單位評估講師時,官網是信任度的第一指標。一個有清楚服務頁面、見證案例、媒體露出的官網,比 IG 帳號更能在「5 分鐘內說服主辦人」,邀請費通常也更高。

3. 企業培訓採購

企業 HR 或採購在尋找培訓講師、顧問時,通常透過 Google 搜尋,而非社群。這類採購金額通常是個人客戶的 5–20 倍,而他們不會在 IG 上搜尋你。

4. 主動搜尋的精準客戶

在 Google 搜尋「台北職涯顧問」「ESG 培訓講師」「行銷策略顧問推薦」的人,是已經有需求、準備付費的精準客戶。沒有官網,這批人 100% 流向有官網的競爭者。

個人品牌官網的最低可行版本,需要哪些頁面?

你不需要一個完美的大型網站。最低可行版本只需要 5 個頁面,就足以讓陌生人在 10 分鐘內建立信任並採取行動:

1
首頁
你是誰、你解決什麼問題、你最強的一個成果。訪客在 8 秒內沒看到「這和我有關」,就會離開。首頁的目的是讓人留下來,而不是介紹你所有的服務。
2
關於我
你的背景故事、專業資歷、為什麼你是這個領域的可信賴聲音。About 頁面是個人品牌官網最重要的 SEO 頁面之一,Google 透過這頁了解你是誰。
3
服務項目
你具體能做什麼、適合什麼樣的客戶、大概的預算範圍。不需要列出所有服務,列出你最想接的那 1–3 個,讓訪客快速判斷是否適合找你。
4
成功案例或見證
真實顧客的成果或評語,是陌生人轉換為客戶的最短路徑。不需要正式設計,截圖或簡短文字都行,有勝於無。
5
聯絡或預約表單
清楚的行動呼籲。不要讓訪客猜你希望他們做什麼——放一個表單、一個 Calendly 連結,或一個 Line 帳號,越簡單越好。

如何讓官網在 Google 被搜尋到你的名字時排第一?

讓「搜尋你的名字時你的官網排第一」是個人品牌 SEO 最基本的目標,通常也是最容易達成的目標——因為競爭對手沒有和你同名的官網。以下四個步驟可以在 1–2 個月內達成:

在網頁 title 和 H1 放你的名字 確保首頁的 標籤包含你的中文全名,例如「王小明 | 行銷策略顧問 | 個人品牌」。這是 Google 了解「這個網站的主角是誰」最重要的信號。</span> </div> </div> <div style="display:flex; gap:1rem; align-items:flex-start; padding:1.1rem 0; border-bottom:1px solid #f0f4ff;"> <div style="flex-shrink:0; width:28px; height:28px; background:#0f1f3d; border-radius:50%; display:flex; align-items:center; justify-content:center;"> <i class="fas fa-check" style="font-size:0.7rem; color:#ffd166;"></i> </div> <div> <strong style="color:#0f1f3d; display:block; margin-bottom:0.3rem;">在 About 頁面和首頁強化名字+定位</strong> <span style="color:#64748b; font-size:0.92rem; line-height:1.7;">在關於我頁面的第一段明確寫出你的名字和你的專業定位,並自然帶入你希望被搜尋到的關鍵字,例如「10 年 UX 設計顧問」「台北企業培訓講師」。</span> </div> </div> <div style="display:flex; gap:1rem; align-items:flex-start; padding:1.1rem 0; border-bottom:1px solid #f0f4ff;"> <div style="flex-shrink:0; width:28px; height:28px; background:#0f1f3d; border-radius:50%; display:flex; align-items:center; justify-content:center;"> <i class="fas fa-check" style="font-size:0.7rem; color:#ffd166;"></i> </div> <div> <strong style="color:#0f1f3d; display:block; margin-bottom:0.3rem;">建立並優化 Google 商家檔案</strong> <span style="color:#64748b; font-size:0.92rem; line-height:1.7;">免費的 Google 商家檔案讓你出現在地圖搜尋結果,輸入你的名字、服務類型、聯絡方式,並連結到官網,是快速被 Google 索引的捷徑之一。</span> </div> </div> <div style="display:flex; gap:1rem; align-items:flex-start; padding:1.1rem 0; border-bottom:1px solid #f0f4ff;"> <div style="flex-shrink:0; width:28px; height:28px; background:#0f1f3d; border-radius:50%; display:flex; align-items:center; justify-content:center;"> <i class="fas fa-check" style="font-size:0.7rem; color:#ffd166;"></i> </div> <div> <strong style="color:#0f1f3d; display:block; margin-bottom:0.3rem;">在所有外部管道放官網連結</strong> <span style="color:#64748b; font-size:0.92rem; line-height:1.7;">把官網連結放進你的 IG bio、LinkedIn 介紹、演講資料、採訪稿、電子報簽名——每一個外部連結都是告訴 Google「這個網站很重要」的信號,加速排名提升。</span> </div> </div> <div style="background: #f8faff; border-radius: 10px; padding: 1.2rem 1.5rem; border-left: 3px solid #4872c6; margin: 1.5rem 0;"> <strong style="color: #1e3a8a;">關於 AEO(AI 問答引擎優化):</strong><span style="color: #374151;"> 使用有 AEO 架構的平台(如 Shopto),系統會自動加入結構化標記,讓 ChatGPT、Perplexity、Google AI Overview 在回答「台灣行銷顧問推薦」等問題時,有機會主動引用並推薦你的官網——這是社群平台永遠做不到的事。</span> </div> <!-- H2-5 --> <h2 style="font-size: 1.45rem; color: #0f1f3d; margin: 3rem 0 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid #f0f4ff;"> 個人品牌建站費用和時間,最快的方法是什麼? </h2> <p>現在開始建站,比你想像的快。三種常見方式的費用和時間比較:</p> <div style="overflow-x: auto; margin: 1.5rem 0 2rem;"> <table style="width: 100%; border-collapse: collapse; font-size: 0.88rem;"> <thead> <tr style="background: #0f1f3d; color: white;"> <th style="padding: 0.85rem 1rem; text-align: left; border-radius: 8px 0 0 0; font-weight: 600;">方式</th> <th style="padding: 0.85rem 0.8rem; text-align: center; font-weight: 600;">初期費用</th> <th style="padding: 0.85rem 0.8rem; text-align: center; font-weight: 600;">年度費用</th> <th style="padding: 0.85rem 0.8rem; text-align: center; font-weight: 600;">上線時間</th> <th style="padding: 0.85rem 1rem; text-align: center; border-radius: 0 8px 0 0; font-weight: 600;">SEO 能力</th> </tr> </thead> <tbody> <tr style="background:#f8faff;"> <td style="padding:0.7rem 1rem; border-bottom:1px solid #eef1f7; color:#374151;">委託設計師客製</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; color:#64748b;">NT$80,000–200,000</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; color:#374151;">NT$24,000–60,000</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; color:#374151;">1–3 個月</td> <td style="padding:0.7rem 1rem; text-align:center; border-bottom:1px solid #eef1f7; color:#374151;">依設計師而定</td> </tr><tr style="background:white;"> <td style="padding:0.7rem 1rem; border-bottom:1px solid #eef1f7; color:#374151;">自架 WordPress</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; color:#64748b;">NT$5,000–15,000</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; color:#374151;">NT$15,000–30,000</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; color:#374151;">2–8 週</td> <td style="padding:0.7rem 1rem; text-align:center; border-bottom:1px solid #eef1f7; color:#374151;">中(需自行優化)</td> </tr><tr style="background:#f0f9f0;"> <td style="padding:0.7rem 1rem; border-bottom:1px solid #eef1f7; font-weight:700; color:#15803d;">Shopto 形象預訂版</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; color:#64748b;">NT$0</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; font-weight:700; color:#15803d;">NT$9,900</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; font-weight:700; color:#15803d;">30 分鐘</td> <td style="padding:0.7rem 1rem; text-align:center; border-bottom:1px solid #eef1f7; font-weight:700; color:#15803d;">高(SEO+AEO 內建)</td> </tr><tr style="background:#f0f9f0;"> <td style="padding:0.7rem 1rem; border-bottom:1px solid #eef1f7; font-weight:700; color:#15803d;">Shopto 內容獲客版</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; color:#64748b;">NT$0</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; font-weight:700; color:#15803d;">NT$18,800</td> <td style="padding:0.7rem 0.8rem; text-align:center; border-bottom:1px solid #eef1f7; font-weight:700; color:#15803d;">30 分鐘</td> <td style="padding:0.7rem 1rem; text-align:center; border-bottom:1px solid #eef1f7; font-weight:700; color:#15803d;">高(+部落格SEO)</td> </tr> </tbody> </table> </div> <p>WordPress 的隱藏成本通常讓人驚嚇:主機費、主題費、安全外掛、備份外掛、SSL 更新……年費輕鬆超過 NT$20,000,還需要定期維護。Shopto 的費用完全透明,技術面全部由平台處理,你只需要專注在內容上。</p> <!-- H2-6 FAQ --> <h2 style="font-size: 1.45rem; color: #0f1f3d; margin: 3rem 0 1.5rem; padding-bottom: 0.5rem; border-bottom: 2px solid #f0f4ff;"> 常見問題 FAQ </h2> <div style="border-radius: 10px; border: 1px solid #e8edf5; margin-bottom: 0.8rem; overflow: hidden;"> <div style="background: #f8faff; padding: 1.2rem 1.5rem;"> <div style="display: flex; gap: 0.8rem; align-items: flex-start; margin-bottom: 0.5rem;"> <span style="color: #4872c6; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">Q</span> <strong style="color: #0f1f3d; font-size: 0.97rem;">個人品牌沒有官網,Google 搜得到我嗎?</strong> </div> <div style="display: flex; gap: 0.8rem; align-items: flex-start;"> <span style="color: #16a34a; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">A</span> <span style="color: #374151; font-size: 0.92rem; line-height: 1.75;">IG 和 LinkedIn 頁面雖然可被索引,但通常排名在「平台結果」之後,而且你無法控制顯示的內容。唯有官網才能讓你主動優化 Google 搜尋排名、設定要呈現給潛在客戶的第一印象。</span> </div> </div> </div> <div style="border-radius: 10px; border: 1px solid #e8edf5; margin-bottom: 0.8rem; overflow: hidden;"> <div style="background: white; padding: 1.2rem 1.5rem;"> <div style="display: flex; gap: 0.8rem; align-items: flex-start; margin-bottom: 0.5rem;"> <span style="color: #4872c6; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">Q</span> <strong style="color: #0f1f3d; font-size: 0.97rem;">個人品牌官網最低可行版本要有哪些頁面?</strong> </div> <div style="display: flex; gap: 0.8rem; align-items: flex-start;"> <span style="color: #16a34a; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">A</span> <span style="color: #374151; font-size: 0.92rem; line-height: 1.75;">最低 5 頁:首頁(品牌定位+最強成果)、關於我(背景+資歷)、服務項目(清楚說明你能做什麼)、成功案例或見證(社會證明)、聯絡或預約表單(轉換行動)。這五頁足以讓陌生人建立信任並行動。</span> </div> </div> </div> <div style="border-radius: 10px; border: 1px solid #e8edf5; margin-bottom: 0.8rem; overflow: hidden;"> <div style="background: #f8faff; padding: 1.2rem 1.5rem;"> <div style="display: flex; gap: 0.8rem; align-items: flex-start; margin-bottom: 0.5rem;"> <span style="color: #4872c6; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">Q</span> <strong style="color: #0f1f3d; font-size: 0.97rem;">官網建好後多久會出現在 Google 搜尋結果?</strong> </div> <div style="display: flex; gap: 0.8rem; align-items: flex-start;"> <span style="color: #16a34a; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">A</span> <span style="color: #374151; font-size: 0.92rem; line-height: 1.75;">通常 1–4 週內 Google 完成初次索引。Shopto 系統會自動提交 Sitemap,加快被索引的速度。你的名字關鍵字通常是最快被排名的,但整體排名提升需要 3–6 個月持續優化。</span> </div> </div> </div> <div style="border-radius: 10px; border: 1px solid #e8edf5; margin-bottom: 0.8rem; overflow: hidden;"> <div style="background: white; padding: 1.2rem 1.5rem;"> <div style="display: flex; gap: 0.8rem; align-items: flex-start; margin-bottom: 0.5rem;"> <span style="color: #4872c6; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">Q</span> <strong style="color: #0f1f3d; font-size: 0.97rem;">個人品牌官網要花多少錢?</strong> </div> <div style="display: flex; gap: 0.8rem; align-items: flex-start;"> <span style="color: #16a34a; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">A</span> <span style="color: #374151; font-size: 0.92rem; line-height: 1.75;">Shopto 形象預訂版 NT$9,900/年,30 分鐘上線,SEO 架構內建,是個人品牌入門最低成本的選擇。自架 WordPress 年費約 NT$15,000–30,000(含隱藏成本);委託設計師客製初期 NT$80,000 起。</span> </div> </div> </div> <div style="border-radius: 10px; border: 1px solid #e8edf5; margin-bottom: 0.8rem; overflow: hidden;"> <div style="background: #f8faff; padding: 1.2rem 1.5rem;"> <div style="display: flex; gap: 0.8rem; align-items: flex-start; margin-bottom: 0.5rem;"> <span style="color: #4872c6; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">Q</span> <strong style="color: #0f1f3d; font-size: 0.97rem;">個人品牌官網應該用 .com 還是 .tw 的網域?</strong> </div> <div style="display: flex; gap: 0.8rem; align-items: flex-start;"> <span style="color: #16a34a; font-weight: 800; flex-shrink: 0; font-size: 0.9rem;">A</span> <span style="color: #374151; font-size: 0.92rem; line-height: 1.75;">在台灣服務的個人品牌建議優先選 .tw,有助於 Google 在台灣搜尋結果中優先顯示你的網站。若計畫服務海外客戶或品牌名稱容易被誤拼,可同時註冊 .com 並 301 導向主站。</span> </div> </div> </div> </div><!-- /article-body --> <!-- CTA --> <div style="background: linear-gradient(135deg, #0f1f3d, #1a3a6e); border-radius: 16px; padding: 3rem 2rem; margin-top: 4rem; text-align: center; color: white;"> <p style="font-size: 0.75rem; letter-spacing: 2px; text-transform: uppercase; opacity: 0.5; margin-bottom: 0.5rem;">現在開始,還不晚</p> <h3 style="color: white; font-size: 1.55rem; margin-bottom: 0.8rem;"> 30 分鐘建站,SEO 架構一步到位。<br><span style="color: #ffd166;">今天設定,明天 Google 就找得到你。</span> </h3> <div style="display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; margin-bottom: 1.2rem;"> <div style="background: rgba(255,215,102,0.15); border: 1px solid rgba(255,215,102,0.35); border-radius: 8px; padding: 0.6rem 1.4rem;"> <span style="color: #ffd166; font-weight: 800; font-size: 0.95rem;">形象預訂版</span> <span style="color: rgba(255,255,255,0.6); font-size: 0.85rem; margin-left: 0.5rem;">NT$9,900 / 年</span> </div> <div style="background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.2); border-radius: 8px; padding: 0.6rem 1.4rem;"> <span style="color: white; font-weight: 800; font-size: 0.95rem;">內容獲客版</span> <span style="color: rgba(255,255,255,0.6); font-size: 0.85rem; margin-left: 0.5rem;">NT$18,800 / 年 含部落格</span> </div> </div> <p style="opacity: 0.8; max-width: 480px; margin: 0 auto 2rem; font-size: 0.95rem; line-height: 1.8;"> 14 天免費試用,不需要信用卡,隨時取消。<br>不確定哪個方案適合你?顧問免費幫你評估。 </p> <div style="display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap;"> <a href="apply.php?plan=1" class="btn" style="background: white; color: #1a3a6e; font-weight: 700;"> <i class="fas fa-rocket"></i> 免費試用形象預訂版 </a> <a href="apply.php?plan=2" class="btn" style="background: transparent; border: 2px solid rgba(255,255,255,0.4);"> <i class="fas fa-pen-nib"></i> 試用內容獲客版 </a> </div> </div> <div style="text-align: center; margin-top: 2.5rem;"> <a href="blog_list.php" style="color: #4872c6; text-decoration: none; font-size: 0.9rem;"> <i class="fas fa-arrow-left"></i> 回到電商知識庫 </a> </div> </div> </section> <style> .ft-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 3rem; padding-bottom: 3rem; border-bottom: 1px solid rgba(255,255,255,0.07); } .ft-col-label { font-size: 0.72rem; font-weight: 700; letter-spacing: 1.8px; text-transform: uppercase; color: #fff; margin-bottom: 1.1rem; } .ft-links { list-style: none; padding: 0; margin: 0; } .ft-links li { margin-bottom: 0.65rem; } .ft-links a { color: #94a3b8; text-decoration: none; font-size: 0.88rem; transition: color 0.2s; } .ft-links a:hover { color: #e2e8f0; } .ft-contact-row { display: flex; gap: 0.6rem; align-items: flex-start; margin-bottom: 0.6rem; font-size: 0.82rem; color: #64748b; } .ft-contact-row i { color: #ffd166; width: 14px; margin-top: 2px; flex-shrink: 0; } @media (max-width: 900px) { .ft-grid { grid-template-columns: 1fr 1fr; } } @media (max-width: 560px) { .ft-grid { grid-template-columns: 1fr; gap: 2rem; } } </style> <footer style="background: #0a1628; color: #94a3b8; padding: 4.5rem 5% 0;"> <div style="max-width: 1200px; margin: 0 auto;"> <div class="ft-grid"> <!-- Brand --> <div> <img src="images/shopto_logo.png" alt="Shopto" style="width: 110px; filter: brightness(0) invert(1); opacity: 0.9; margin-bottom: 1rem;"> <p style="font-size: 0.88rem; line-height: 1.85; color: #64748b; max-width: 270px; margin-bottom: 1.6rem;"> 台灣第一個 SEO+AEO 雙引擎開店平台。<br>廣告費貴?讓 Google 與 AI 主動幫你賣。 </p> <div> <div class="ft-contact-row"><i class="fas fa-map-marker-alt"></i><span>台中市市政北七路 186 號(新光三越旁)</span></div> <div class="ft-contact-row"><i class="fas fa-phone-alt"></i><span>04-2254-5886</span></div> <div class="ft-contact-row"><i class="fas fa-clock"></i><span>週一至週五 09:00–18:00</span></div> <div class="ft-contact-row"><i class="fas fa-envelope"></i><span><a href="mailto:shopto.service.tw@gmail.com" style = 'color:#64748b;'>shopto.service.tw@gmail.com</a></span></div> </div> </div> <!-- 平台功能 --> <div> <div class="ft-col-label">平台功能</div> <ul class="ft-links"> <li><a href="products.php">特色介紹</a></li> <li><a href="solutions_own.php">產品方案</a></li> <li><a href="solutions.php">政府採購</a></li> <li><a href="contact.php">預約諮詢</a></li> <li style="margin-top: 1rem;"><a href="solutions_own.php#solutions_top" style="color: #ffd166; font-weight: 700; font-size: 0.88rem;">免費試用 14 天 →</a></li> </ul> </div> <!-- 開店資源 --> <div> <div class="ft-col-label">開店資源</div> <ul class="ft-links"> <li><a href="blog_list.php">電商知識庫</a></li> <li> <a href="tutorial.php">教學專區 <span style="display:inline-block; background:#ffd166; color:#0a1628; font-size:0.58rem; font-weight:800; padding:1px 5px; border-radius:3px; vertical-align:middle; letter-spacing:0.5px;">近期開放</span></a> </li> <li><a href="contact.php">諮詢顧問</a></li> </ul> </div> <!-- 服務與權益 --> <div> <div class="ft-col-label">服務與權益</div> <ul class="ft-links"> <li><a href="consumer-rights.php">消費者權益</a></li> <li><a href="terms.php">服務條款</a></li> <li><a href="privacy.php">隱私權政策</a></li> <li><a href="refund.php">退款政策</a></li> </ul> </div> </div> <!-- Newsletter --> <div style="border-top: 1px solid rgba(255,255,255,0.07); padding: 2.2rem 0; display: flex; align-items: center; gap: 2.5rem; flex-wrap: wrap; justify-content: space-between;"> <div style="flex-shrink: 0;"> <div class="ft-col-label" style="margin-bottom: 0.3rem;">訂閱電子報</div> <p style="font-size: 0.88rem; color: #64748b; margin: 0;">獲取最新電商趨勢與 Shopto 優惠資訊</p> </div> <form action="subscribe.php" method="post" style="display: flex; gap: 0.6rem; flex-wrap: wrap; flex: 1; min-width: 260px; max-width: 480px;"> <input type="email" name="email" placeholder="您的 Email" required style="flex: 1; min-width: 180px; padding: 0.7rem 1rem; border-radius: 8px; border: 1px solid rgba(255,255,255,0.1); background: rgba(255,255,255,0.05); color: white; font-size: 0.88rem; outline: none;"> <button type="submit" style="padding: 0.7rem 1.4rem; background: #ffd166; color: #0a1628; border: none; border-radius: 8px; font-weight: 700; cursor: pointer; font-size: 0.88rem; white-space: nowrap;">訂閱</button> </form> </div> <!-- Bottom bar --> <div style="display: flex; justify-content: space-between; align-items: center; padding: 1.4rem 0; flex-wrap: wrap; gap: 0.5rem;"> <div style="font-size: 0.78rem; color: #334155;"> © 2026 Shopto. All Rights Reserved.  |  騏璣資訊科技股份有限公司   統一編號:28782764 </div> <div style="display: flex; gap: 1.2rem;"> <a href="privacy.php" style="color: #334155; text-decoration: none; font-size: 0.78rem; transition: color 0.2s;">隱私政策</a> <a href="terms.php" style="color: #334155; text-decoration: none; font-size: 0.78rem; transition: color 0.2s;">服務條款</a> <a href="sitemap.xml" style="color: #334155; text-decoration: none; font-size: 0.78rem; transition: color 0.2s;">Sitemap</a> </div> </div> </div> </footer> <!-- Article TOC (knowledge pages only) --> <style> /* ══════════════════════════════════════════════ Desktop TOC:fixed 包裝層,讓目錄浮在文章左側 不被 header 遮住、不用遮罩 ══════════════════════════════════════════════ 原理:#kbtoc-wrap 用 left:50% 固定在畫面正中間(寬度為 0), #kbtoc 再用 right: calc(文章半寬 + gap) 往左定位, TOC 永遠貼在文章容器左側,不管視窗寬度如何縮放。 */ #kbtoc-wrap { position: fixed; left: 50%; top: 0; bottom: 0; width: 0; pointer-events: none; z-index: 150; } #kbtoc { position: absolute; /* 文章 max-width:800px → 半寬 400px + 間距 24px */ right: calc(400px + 24px); top: 90px; /* JS 動態依 header 高度覆寫 */ width: 210px; background: #fff; border-radius: 12px; box-shadow: 0 4px 24px rgba(0,0,0,0.09); border: 1px solid #e5e7eb; display: flex; flex-direction: column; font-size: 0.81rem; overflow: hidden; pointer-events: auto; opacity: 0; transform: translateX(-8px); transition: opacity 0.28s ease, transform 0.28s ease; } #kbtoc.toc-visible { opacity: 1; transform: translateX(0); } #kbtoc-hd { display: flex; justify-content: space-between; align-items: center; padding: 0.6rem 0.9rem; background: #0f1f3d; color: #fff; border-radius: 12px 12px 0 0; font-weight: 700; font-size: 0.74rem; letter-spacing: 0.8px; flex-shrink: 0; } #kbtoc.collapsed #kbtoc-hd { border-radius: 12px; } #kbtoc-toggle-btn { background: rgba(255,255,255,0.15); border: none; color: #fff; width: 20px; height: 20px; border-radius: 4px; cursor: pointer; font-size: 0.95rem; line-height: 1; display: flex; align-items: center; justify-content: center; padding: 0; } #kbtoc-list { list-style: none; margin: 0; padding: 0.35rem 0; overflow-y: auto; flex: 1; max-height: calc(100vh - 160px); } #kbtoc.collapsed #kbtoc-list { display: none; } #kbtoc-list li { margin: 0; } #kbtoc-list a { display: block; padding: 0.42rem 0.9rem; color: #6b7280; text-decoration: none; line-height: 1.5; border-left: 3px solid transparent; transition: color 0.18s, background 0.18s, border-color 0.18s; word-break: break-all; font-size: 0.8rem; } #kbtoc-list a:hover { color: #1a3a6e; background: #f0f4ff; border-left-color: #9db3e0; } #kbtoc-list a.kbtoc-active { color: #1a3a6e; background: #eef2fb; border-left-color: #4872c6; font-weight: 600; } /* ══════════════════════════════════════════════ Mobile TOC:嵌入文章頂端的折疊式區塊,不用遮罩 ══════════════════════════════════════════════ */ #kbtoc-inline { display: none; background: #fff; border: 1px solid #e5e7eb; border-radius: 10px; margin-bottom: 2rem; overflow: hidden; box-shadow: 0 2px 10px rgba(0,0,0,0.06); } #kbtoc-inline-hd { display: flex; justify-content: space-between; align-items: center; padding: 0.75rem 1.1rem; background: #0f1f3d; color: #fff; font-weight: 700; font-size: 0.82rem; letter-spacing: 0.6px; cursor: pointer; user-select: none; } #kbtoc-inline-toggle { background: rgba(255,255,255,0.15); border: none; color: #fff; width: 22px; height: 22px; border-radius: 4px; cursor: pointer; font-size: 1rem; line-height: 1; display: flex; align-items: center; justify-content: center; padding: 0; } #kbtoc-inline-list { list-style: none; margin: 0; padding: 0.4rem 0; } #kbtoc-inline.collapsed #kbtoc-inline-list { display: none; } #kbtoc-inline-list li { margin: 0; } #kbtoc-inline-list a { display: block; padding: 0.55rem 1.2rem; color: #374151; text-decoration: none; border-left: 3px solid transparent; font-size: 0.88rem; line-height: 1.5; transition: all 0.18s; } #kbtoc-inline-list a:hover, #kbtoc-inline-list a.kbtoc-active { background: #f0f4ff; border-left-color: #4872c6; color: #1a3a6e; font-weight: 600; } /* ── Responsive ── */ @media (max-width: 1279px) { #kbtoc-wrap { display: none !important; } #kbtoc-inline { display: block !important; } } @media (min-width: 1280px) { #kbtoc-inline { display: none !important; } } </style> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script> /* Article TOC — auto-inject on knowledge_*.php pages Desktop : #kbtoc-wrap (left:50%, width:0) + #kbtoc (right:calc(400px+24px)) → TOC 永遠浮在文章容器左側,不被 header 遮住 Mobile : 文章頂端嵌入折疊式 #kbtoc-inline,無遮罩無 FAB 兩者共用同一個 scroll spy,滾到對應段落自動 highlight */ (function() { var pageName = window.location.pathname.replace(/.*\//, ''); if (pageName.indexOf('knowledge_') !== 0) return; var h2s = document.querySelectorAll('section h2'); if (h2s.length < 2) return; /* ── Auto-assign IDs ── */ var h2arr = []; for (var i = 0; i < h2s.length; i++) { var h = h2s[i]; if (!h.id) { h.id = 'kbtoc-h' + i; } h2arr.push(h); } /* ── Build <li> HTML ── */ function buildItems(linkClass) { var html = ''; for (var j = 0; j < h2arr.length; j++) { var txt = h2arr[j].textContent.trim(); html += '<li><a href="#' + h2arr[j].id + '" class="' + linkClass + '">' + txt + '</a></li>'; } return html; } /* ════════════════════════════════ Desktop:fixed wrap + 側邊 TOC ════════════════════════════════ */ var wrap = document.createElement('div'); wrap.id = 'kbtoc-wrap'; var toc = document.createElement('div'); toc.id = 'kbtoc'; toc.innerHTML = '<div id="kbtoc-hd">' + '<span><i class="fas fa-list-ul" style="margin-right:5px;opacity:.7"></i>文章目錄</span>' + '<button id="kbtoc-toggle-btn" title="收合目錄">−</button>' + '</div>' + '<ul id="kbtoc-list">' + buildItems('kbtoc-dlink') + '</ul>'; wrap.appendChild(toc); document.body.appendChild(wrap); document.getElementById('kbtoc-toggle-btn').onclick = function() { var collapsed = toc.classList.toggle('collapsed'); this.textContent = collapsed ? '+' : '−'; }; /* ════════════════════════════════ Mobile:inline 折疊 TOC,插入文章頂端 ════════════════════════════════ */ var articleSection = (h2arr[0].closest ? h2arr[0].closest('section') : null) || h2arr[0].parentElement; var articleContainer = articleSection ? articleSection.querySelector('div') : null; var inlineToc = document.createElement('div'); inlineToc.id = 'kbtoc-inline'; inlineToc.innerHTML = '<div id="kbtoc-inline-hd">' + '<span><i class="fas fa-list-ul" style="margin-right:6px;opacity:.8"></i>文章目錄</span>' + '<button id="kbtoc-inline-toggle" title="展開/收合">−</button>' + '</div>' + '<ul id="kbtoc-inline-list">' + buildItems('kbtoc-mlink') + '</ul>'; if (articleContainer) { articleContainer.insertBefore(inlineToc, articleContainer.firstChild); } else if (articleSection) { articleSection.insertBefore(inlineToc, articleSection.firstChild); } document.getElementById('kbtoc-inline-hd').onclick = function() { var collapsed = inlineToc.classList.toggle('collapsed'); document.getElementById('kbtoc-inline-toggle').textContent = collapsed ? '+' : '−'; }; /* ════════════════════════════════ 共用:位置計算 & Scroll Spy ════════════════════════════════ */ function getAbsTop(el) { var t = 0; while (el) { t += el.offsetTop; el = el.offsetParent; } return t; } function updateTocTop() { var hdr = document.querySelector('header'); var hh = hdr ? hdr.offsetHeight : 70; toc.style.top = (hh + 16) + 'px'; } updateTocTop(); var ctaSection = articleSection ? articleSection.nextElementSibling : null; while (ctaSection && !ctaSection.offsetHeight) { ctaSection = ctaSection.nextElementSibling; } if (!ctaSection) { ctaSection = document.querySelector('footer'); } var h2Tops = [], artTop = 0, ctaTop = 999999; function calcPositions() { h2Tops = []; for (var ci = 0; ci < h2arr.length; ci++) { h2Tops.push(getAbsTop(h2arr[ci])); } artTop = articleSection ? getAbsTop(articleSection) : 300; ctaTop = ctaSection ? getAbsTop(ctaSection) : 999999; } calcPositions(); window.addEventListener('resize', function() { updateTocTop(); calcPositions(); }, { passive: true }); var dlinks = document.querySelectorAll('.kbtoc-dlink'); var mlinks = document.querySelectorAll('.kbtoc-mlink'); function onScroll() { var scrollY = window.pageYOffset; var hh = (document.querySelector('header') || { offsetHeight: 70 }).offsetHeight; var shouldShow = scrollY >= (artTop - hh - 60) && scrollY < (ctaTop - hh - 80); toc.classList.toggle('toc-visible', shouldShow); var pos = scrollY + hh + 40; var activeId = null; for (var s = 0; s < h2Tops.length; s++) { if (h2Tops[s] <= pos) { activeId = h2arr[s].id; } } for (var d = 0; d < dlinks.length; d++) { dlinks[d].classList.toggle('kbtoc-active', dlinks[d].getAttribute('href') === '#' + activeId); } for (var m = 0; m < mlinks.length; m++) { mlinks[m].classList.toggle('kbtoc-active', mlinks[m].getAttribute('href') === '#' + activeId); } } window.addEventListener('scroll', onScroll, { passive: true }); onScroll(); })(); </script> <script src="js/script.js"></script> <script src="js/tracker.js"></script> <!-- SweetAlert2 for Pro Modals --> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <!-- Marquee CSS --> <style> /* Marquee CSS - Fade Style */ .marquee-container { position: fixed; top: auto; bottom: 20px; left: 50%; transform: translateX(-50%); width: 90%; max-width: 800px; background: rgba(0, 0, 0, 0.7); color: white; padding: 10px 25px; border-radius: 50px; overflow: hidden; white-space: nowrap; z-index: 9998; box-shadow: 0 4px 15px rgba(0,0,0,0.2); display: flex; justify-content: center; align-items: center; backdrop-filter: blur(5px); } .marquee-content { display: inline-block; transition: opacity 0.5s ease-in-out, transform 0.5s ease; opacity: 0; transform: translateY(10px); } .marquee-content.active { opacity: 1; transform: translateY(0); } /* Chat Widget Styles */ #chat-widget { transition: all 0.3s; z-index: 9999; } .chat-box-transition { transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); transform-origin: bottom right; opacity: 0; transform: scale(0.9) translateY(20px); pointer-events: none; } .chat-box-transition.open { opacity: 1; transform: scale(1) translateY(0); pointer-events: all; } /* Auto Popup Bubble */ .chat-promo-bubble { position: absolute; right: 70px; bottom: 15px; background: white; padding: 12px 18px; border-radius: 20px 20px 0 20px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); font-size: 0.95rem; color: #333; opacity: 0; transform: translateX(10px); transition: all 0.4s ease; pointer-events: none; white-space: nowrap; border: 1px solid #f0f0f0; font-weight: 500; } .chat-promo-bubble.show { opacity: 1; transform: translateX(0); pointer-events: auto; } .chat-promo-bubble .close-bubble { position: absolute; top: -8px; right: -8px; background: #eee; color: #666; border-radius: 50%; width: 20px; height: 20px; font-size: 12px; display: flex; align-items: center; justify-content: center; cursor: pointer; border: 2px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.1); } /* Sticker Grid */ #frontend-stickers { display: none; position: absolute; bottom: 60px; left: 10px; right: 10px; background: white; padding: 10px; border-radius: 12px; box-shadow: 0 5px 20px rgba(0,0,0,0.15); grid-template-columns: repeat(4, 1fr); gap: 10px; z-index: 1000; max-height: 200px; overflow-y: auto; } #frontend-stickers.active { display: grid; } </style> <!-- Chat Widget HTML --> <div id="chat-widget" style="position: fixed; bottom: 40px; right: 30px;"> <!-- Auto Popup Message --> <div id="chat-promo" class="chat-promo-bubble"> 👋 需要幫忙嗎?歡迎線上諮詢! <div class="close-bubble" onclick="closePromo()">×</div> </div> <!-- Toggle Button --> <button id="chat-toggle-btn" onclick="toggleChat()" style="width: 60px; height: 60px; border-radius: 50%; background: var(--primary-color); color: white; border: none; box-shadow: 0 4px 15px rgba(0,0,0,0.2); cursor: pointer; font-size: 1.5rem; transition: transform 0.3s; display: flex; align-items: center; justify-content: center;"> <i class="fas fa-comment-dots"></i> </button> <!-- Chat Box --> <div id="chat-box" class="chat-box-transition" style="position: absolute; bottom: 80px; right: 0; width: 350px; height: 500px; background: white; border-radius: 12px; box-shadow: 0 5px 30px rgba(0,0,0,0.15); overflow: hidden; display: flex; flex-direction: column;"> <!-- Header --> <div style="background: var(--primary-color); color: white; padding: 15px; font-weight: bold; display: flex; justify-content: space-between; align-items: center;"> <span>線上客服</span> <span onclick="toggleChat()" style="cursor: pointer; font-size: 1.2rem;">×</span> </div> <!-- Pre-chat Form --> <div id="pre-chat-form" style="padding: 20px; flex: 1; display: flex; flex-direction: column; justify-content: center;"> <p style="margin-bottom: 20px; color: #666; text-align: center;">請填寫以下資訊,以便我們為您服務。</p> <input type="text" id="chat-name" placeholder="您的稱呼" style="padding: 12px; margin-bottom: 10px; border: 1px solid #ddd; border-radius: 8px;"> <input type="text" id="chat-email" placeholder="Email" style="padding: 12px; margin-bottom: 10px; border: 1px solid #ddd; border-radius: 8px;"> <input type="text" id="chat-phone" placeholder="聯絡電話" style="padding: 12px; margin-bottom: 20px; border: 1px solid #ddd; border-radius: 8px;"> <button onclick="startChat()" class="btn" style="width: 100%; justify-content: center; padding: 12px; background: var(--primary-color); color: white; border: none; border-radius: 8px; font-weight: bold; cursor: pointer;">開始對話</button> </div> <!-- Chat Area --> <div id="chat-area" style="display: none; flex: 1; flex-direction: column; position: relative;"> <div id="chat-messages" style="flex: 1; padding: 15px; overflow-y: auto; background: #f9f9f9;"> <div style="margin-bottom: 10px; text-align: left;"> <div style="display: inline-block; padding: 8px 12px; background: #eef2f7; border-radius: 10px; font-size: 0.9rem;"> 您好!請問有什麼可以幫您的嗎? </div> </div> </div> <!-- Stickers --> <div id="frontend-stickers"> <!-- JS will populate --> </div> <!-- Input Area (Line Style) --> <div style="padding: 10px; border-top: 1px solid #eee; display: flex; gap: 8px; align-items: center; background: white;"> <!-- Sticker Button --> <button onclick="toggleFrontendStickers()" style="background: none; border: none; color: #666; font-size: 1.4rem; cursor: pointer; padding: 5px; transition: color 0.2s;"> <i class="far fa-smile"></i> </button> <!-- Input (ContentEditable for Images) --> <div id="chat-input-div" contenteditable="true" style="flex: 1; padding: 10px 15px; border: 1px solid #ddd; border-radius: 20px; outline: none; background: #f0f2f5; max-height: 100px; overflow-y: auto; font-size: 0.95rem; line-height: 1.4;"></div> <!-- Send Button --> <button onclick="sendMsg()" style="background: var(--primary-color); color: white; border: none; width: 36px; height: 36px; border-radius: 50%; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: transform 0.2s;"> <i class="fas fa-paper-plane" style="font-size: 0.9rem;"></i> </button> </div> </div> </div> </div> <script> // --- IIFE to prevent global scope pollution --- (function() { let chatInterval = null; let chatSessionId = localStorage.getItem('chat_session_id') || null; const stickers = [ "https://cdn-icons-png.flaticon.com/512/4712/4712109.png", "https://cdn-icons-png.flaticon.com/512/4712/4712009.png", "https://cdn-icons-png.flaticon.com/512/4712/4712139.png", "https://cdn-icons-png.flaticon.com/512/4712/4712038.png", "https://cdn-icons-png.flaticon.com/512/166/166548.png", "https://cdn-icons-png.flaticon.com/512/166/166538.png" ]; // --- Marquee Logic (One-by-One Fade) --- function initMarquee() { fetch('sys/api/marquee_data_v3.php') .then(r => r.json()) .then(events => { if(events && events.length > 0) { const marqueeContent = document.getElementById('marquee-text'); if(marqueeContent) { let index = 0; document.getElementById('site-marquee').style.display = 'flex'; const showEvent = () => { marqueeContent.classList.remove('active'); setTimeout(() => { marqueeContent.innerHTML = events[index]; marqueeContent.classList.add('active'); index = (index + 1) % events.length; }, 500); // Wait for fade out }; showEvent(); // First run setInterval(showEvent, 5000); // Loop } } }) .catch(e => console.error("Marquee Error", e)); } initMarquee(); // --- Chat Init --- const stickerContainer = document.getElementById('frontend-stickers'); if(stickerContainer && stickerContainer.children.length === 0) { stickers.forEach(src => { const img = document.createElement('img'); img.src = src; img.style.width = '100%'; img.style.cursor = 'pointer'; img.onclick = () => selectFrontendSticker(src); stickerContainer.appendChild(img); }); } // Auto Popup Logic (1 min) setTimeout(() => { const hasShownForever = localStorage.getItem('chat_promo_forever'); if(!hasShownForever && !document.getElementById('chat-box').classList.contains('open')) { document.getElementById('chat-promo').classList.add('show'); localStorage.setItem('chat_promo_forever', 'true'); } }, 60000); // 60 seconds // --- Global Helpers --- window.closePromo = function() { document.getElementById('chat-promo').classList.remove('show'); }; window.toggleChat = function() { window.closePromo(); const box = document.getElementById('chat-box'); const btn = document.getElementById('chat-toggle-btn'); if (box.classList.contains('open')) { box.classList.remove('open'); btn.style.transform = 'scale(1)'; } else { box.classList.add('open'); btn.style.transform = 'scale(0)'; checkChatState(); } }; window.toggleFrontendStickers = function() { document.getElementById('frontend-stickers').classList.toggle('active'); }; window.selectFrontendSticker = function(url) { const inputDiv = document.getElementById('chat-input-div'); // Insert Image at cursor inputDiv.focus(); const img = `<img src="${url}" style="width:50px; vertical-align:middle; margin: 0 4px;">`; document.execCommand('insertHTML', false, img); window.toggleFrontendStickers(); }; window.startChat = function() { const name = document.getElementById('chat-name').value; const email = document.getElementById('chat-email').value; const phone = document.getElementById('chat-phone').value; if(!name || !email) { Swal.fire({ icon: 'warning', title: '資料不完整', text: '請填寫稱呼與 Email', confirmButtonColor: '#6b8de3' }); return; } const formData = new FormData(); formData.append('action', 'start_session'); formData.append('name', name); formData.append('email', email); formData.append('phone', phone); fetch('sys/chat_api.php', { method: 'POST', body: formData }) .then(r => r.json()) .then(data => { if(data.session_id) { chatSessionId = data.session_id; localStorage.setItem('chat_session_id', chatSessionId); localStorage.setItem('chat_user', JSON.stringify({name: name, email: email})); checkChatState(); } }); }; window.sendMsg = function() { const inputDiv = document.getElementById('chat-input-div'); let msg = inputDiv.innerHTML.trim(); // Allow images if(!msg || msg === '<br>') return; if(!chatSessionId) return; // Optimistic UI appendMessage('user', msg); inputDiv.innerHTML = ''; const formData = new FormData(); formData.append('action', 'send_message'); formData.append('session_id', chatSessionId); formData.append('message', msg); // Sending HTML (safe for this system) fetch('sys/chat_api.php', { method: 'POST', body: formData }); }; // ... (checkChatState, fetchMessages, appendMessage remain mostly the same) ... // Enter Key for ContentEditable const inputDiv = document.getElementById('chat-input-div'); if(inputDiv) { inputDiv.addEventListener('keydown', (e) => { if(e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); window.sendMsg(); } }); } }) (); </script> </body> </html>