Community寫作與編輯github.com

erberkk/網站存在與SEO

用於建立、檢查或部署行動應用程式商店列表和發佈所需的網站頁面,包括隱私政策、條款、支援和帳戶刪除頁面,以及主機應用連結、邀請頁面、登陸頁面、社交分享圖片和技術SEO。

網站存在與SEO 是什麼?

此技能專注於建立一個快速、靜態的網站,以滿足Apple App Store和Google Play商店提交所需的URL要求(如隱私政策、支援頁面、帳戶刪除頁面),並透過搜尋引擎優化使網站易於被發現。它包含為Apple和Android應用連結託管`.well-known`檔案(`apple-app-site-association`和`assetlinks.json`),以及用於程式碼邀請頁面(`/i/<code>`)的動態渲染,該頁面可智能地引導用戶從網站開啟應用或跳轉至商店。此外,它還支援登陸頁面建置(含誠實的按國家/地區價格填充)、Open Graph社交分享圖片、技術SEO(hreflang、canonical、sitemap、robots.txt、JSON-LD結構化資料)、以及對AI爬蟲策略的管理。該技能包含了由Cloudflare Worker驅動的部署流程,並包含一個生產環境審批閘門,以確保變更在推送前獲得正確授權。它還附帶一個網站檢查器腳本和一個IndexNow ping腳本,以協助在Bing及其他搜尋引擎中進行內容發現。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/erberkk/mobile-app-launch-skills/tree/HEAD/skills/web-presence-and-seo

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

網站存在與SEO 是做什麼的?

目的

兩個商店在允許提交前都會要求提供URL:隱私政策、支援頁面、帳戶刪除,以及用於應用連結的 .well-known 檔案。此技能建立一個小型、快速的靜態網站,首先滿足這些表單要求,然後使其可被發現(搜尋引擎、連結預覽、AI助手),無需追蹤器、暗黑模式或應用無法支持的數字。

請在商店列表和隱私表單(listing-and-aso, privacy-and-declarations)之前執行此操作:它們需要可用的URL。

先決條件

  • 您控制的一個網域,具有DNS存取權限(範例中使用Cloudflare;任何能設定標頭並提供檔案而無重定向的主機均可)。
  • 來自 identity-and-signing 的應用最終識別碼和簽署資料(Team ID、Bundle ID、Package Name、Play app signing SHA-256)。
  • 來自程式碼/SDK掃描的隱私政策文本(privacy-and-declarations)和應用中實際存在的刪除流程。
  • 從商店讀回的價格(subscriptions-and-payments),切勿憑記憶輸入。
  • Node.js 18+ 用於 scripts/ 中的腳本。

1. 商店要求的頁面

包含每個商店欄位 → URL的檢查清單:references/store-url-checklist.md

頁面路徑(建議)規則
隱私政策/privacy公開,無需登入,無地理封鎖,HTML(非PDF),包含應用名稱,與商店隱私回答一致
條款/terms如果您銷售訂閱(Apple的標準EULA或您自己的;在應用和列表中連結它)則需要
支援 / 聯絡/support真實的聯絡方式(電子郵件或表單),不僅僅是常見問題
帳戶刪除(網頁)/delete-accountGoogle Play 需要此URL。包含列表中應用名稱,讓用戶從頁面請求刪除,說明什麼被刪除、什麼被保留以及保留多久,並說明商店訂閱必須單獨取消
  • Apple 要求刪除必須在應用內開始(準則 5.1.1(v));網頁不能取代此要求。Play 要求應用內路徑和網頁URL兩者。文件:Apple 帳戶刪除, Play 帳戶刪除, Play 隱私政策URL規則。
  • 已登出且穩定。 無Cookie牆、無需登入、無需JavaScript即可閱讀文本。提交後請勿重新命名路徑;如果必須,請保留舊路徑的301重定向。
  • 每種語言。 每種語言一個URL(/privacy, /de/privacy)搭配 hreflang;App Store Connect 讓您為每個在地化設定隱私URL。如果某頁面未翻譯,則連結預設語言頁面,而非404。
  • 在法律頁面上顯示「最後更新」日期,並在版本控制中保留舊版本。

2. 應用連結託管

檔案本身的模板位於 identity-and-signing/templates/。此部分關於如何提供它們。

  • https://<domain>/.well-known/apple-app-site-association 和 /.well-known/assetlinks.json:HTTP 200,Content-Type: application/json,無重定向(不是 http→https,不是 apex→www,不是尾斜線),無身份驗證,無機器人驗證頁面。
  • 決定 apex 還是 www,保持一致。在權利/意圖過濾器中列出的每個主機上提供檔案;僅對頁面重定向其他主機,絕不對 /.well-known/ 重定向。
  • 靜態主機通常將無副檔名的AASA提供為 application/octet-stream。透過Worker路由 /.well-known/*(請參閱模板)或明確設定標頭,然後使用 scripts/check-site.mjs 進行檢查。
  • 在聲明網域的應用建置之前部署 .well-known 檔案。Apple透過其CDN取得AASA,因此變更可能需要一些時間才能生效。

邀請 / 推薦頁面 (/i/<code>)

  • Worker 根據後端發出的確切字母表和長度驗證代碼,然後填充模板。URL中的其他任何內容都不會到達HTML。
  • 如果應用已安裝,通用連結 / 應用連結將直接開啟它(路徑必須在AASA components 和 Android 意圖過濾器中)。如果未安裝,頁面會顯示兩個商店按鈕和一個「複製代碼」按鈕作為手動備用方案。
  • Android:將代碼附加到 Play URL 作為 &referrer=<url-encoded key=value>,並在應用中使用 Play Install Referrer API 讀取。iOS 沒有安裝推薦來源;請用戶粘貼代碼,或僅在明確點擊後從剪貼簿預先填入。
  • 標頭:X-Robots-Tag: noindex,Cache-Control: private, no-store,Referrer-Policy: no-referrer。將 /i/ 排除在網站地圖之外。不要禁止它在 robots.txt 中:無法取得頁面的爬蟲永遠看不到 noindex。

3. 登陸頁面

  • 與商店截圖相同的視覺語言(顏色、字體、相同的真實UI卡片)。從網站到達的訪客應該能認出商店頁面。
  • 商店徽章僅使用官方素材,未經修改,具有所需的間距和措辭;直接連結到列表。規則:Apple 行銷指南, Google Play 徽章。
  • 發佈前:一行「即將在 App Store 和 Google Play 上架」,而不是三個停用的徽章。發佈時(發佈上線後):交換為真實徽章連結,添加 Smart App Banner meta(文件),更新 llms.txt 和 JSON-LD。保持這在單一配置標誌中以便一次性更改。切換前需要批准。
  • 誠實的價格。 價格來自從商店回讀生成的單一檔案。頁面包含佔位符(%%PRICE_MONTHLY%%);Worker 根據訪客的國家(request.cf.country)填充它們,並對表格以外的國家顯示「商店將以您的貨幣顯示確切價格」。頁面語言永遠不決定貨幣。無劃掉的「原價」、無偽造倒計時、無任何預先勾選的選項。
  • 快速且可存取。 文本在HTML中(非JS渲染)、一個CSS檔案、很少或無JS、自託管字體搭配 font-display: swap、主圖調整大小並設定 fetchpriority="high"。目標:LCP < 2.5 秒,CLS < 0.1,INP < 200 毫秒(Web Vitals)。對比度和焦點狀態遵循 WCAG 2.2;尊重 prefers-reduced-motion。
  • 分析。 建議無或伺服器端/無Cookie計數(邊緣日誌、無標識符的隱私友好分析)。如果您不設定Cookie且不載入第三方腳本,則無需Cookie橫幅;請不要「以防萬一」顯示一個。如果您添加任何追蹤器,同意橫幅、隱私政策和商店隱私回答必須一起更改。

4. 社交分享圖片

  • 每種語言一張Open Graph圖片:1200×630 PNG/JPG,小於約1 MB,文字大得足以在縮圖大小下閱讀。og:image 和 twitter:image 中的絕對 https:// URL,加上 og:image:width/height/alt,og:title,og:description,og:url,twitter:card=summary_large_image。規範:ogp.me,Meta 分享指南。
  • 訊息應用程式會積極快取預覽。更改圖片後,請為其指定一個新檔案名稱(或 ?v=2),然後在 Sharing Debugger 中重新擷取(「再次擷取」)。WhatsApp 和其他即時通訊應用會保留自己的快取,沒有公開的重新整理工具,因此新的圖片URL是可靠的解決方案;透過在新聊天中發送連結進行測試。

5. 技術SEO

  • 標題(約50–60個字元,品牌名稱 + 功能)和 meta 描述(約150–160個字元)每個頁面和語言獨一無二。標題連結,摘要。
  • hreflang:每個語言版本列出所有版本包括自身,加上 x-default;配對必須是互相的。在地化版本。
  • Canonical:自我參照、絕對、且在最終(無重定向)URL上。正規化。
  • 網站地圖 僅包含 200、可索引、正規的 URL 和真正的 <lastmod>(內容更改的日期,例如來自 git,而不是建置時間)。模板,文件。
  • robots.txt:模板,介紹。robots.txt 控制爬蟲,而非索引;對必須排除在結果之外的頁面使用 noindex。
  • 結構化資料(JSON-LD):Organization,WebSite,MobileApplication;FAQPage 僅用於頁面上可見的常見問題。範例和規則:references/structured-data.md。
  • 非生產環境主機(預覽、*.workers.dev)發送 X-Robots-Tag: noindex。

6. 發現

  1. Google Search Console:添加一個 Domain 屬性,在 apex 添加 google-site-verification TXT 記錄,驗證,提交網站地圖,請求首頁索引。驗證所有權。
  2. Bing Webmaster Tools:從 Search Console 匯入,或使用 Bing 提供的 DNS 記錄(CNAME)驗證,然後提交網站地圖。添加和驗證。
  3. IndexNow(Bing、Yandex、Seznam、Naver 等;不包括 Google):主機 <key>.txt 包含金鑰,部署,然後執行 node scripts/indexnow-ping.mjs(試執行)和 --send。腳本首先檢查金鑰檔案是否已上線。協定。
  4. AI 爬蟲和 llms.txt:根據每個機器人決定是否允許搜尋/回答機器人和訓練機器人(擁有者的決定,需要批准)。機器人列表、用途和官方連結:references/ai-crawlers.md。添加一個簡短的 llms.txt,包含產品摘要和關鍵URL,不包含價格。

DNS 記錄是共享基礎設施:添加新記錄;切勿編輯或刪除現有的 TXT/SPF/MX 記錄。任何 DNS 更改前需要批准。

7. 部署(Cloudflare Worker 範例)

模板:templates/worker.example.js。它以正確的類型提供 .well-known 檔案且無重定向,填充按國家/地區的價格佔位符,渲染 /i/<code>,添加安全標頭並在非生產主機上添加 noindex。

兩種儲存選項:

  • Workers Static Assets(最簡單):在 wrangler.jsonc 中設定 "assets": { "directory": "./dist", "binding": "ASSETS", "run_worker_first": true };Worker 呼叫 env.ASSETS.fetch()。文件。
  • KV(內容定址):建置將檔案寫入其雜湊下以及 manifest.js(路徑 → 雜湊,類型);使用 wrangler kv bulk put 在部署 Worker 之前上傳,以便新的清單永遠不會指向缺少的檔案。KV 命令。

步驟:

  1. node build.mjs → dist/(如果缺少任何翻譯鍵或未填充的佔位符(價格佔位符除外),則失敗)。
  2. 單元測試(node --test):對子資源執行 Worker 的 fetch。涵蓋:AASA/assetlinks 200 + application/json + 無重定向;www/http 僅對頁面重定向;/i/<bad> → 404,/i/<good> → noindex + no-store;每個價格區域填充每個佔位符(無剩餘 %%);格式錯誤的百分比編碼 → 404,而非 500。
  3. 預覽:npx wrangler deploy --dry-run,或部署到預覽主機並執行 node scripts/check-site.mjs https://<preview-host>。
  4. 批准 — 生產部署(npx wrangler deploy)。在 wrangler.jsonc 中固定 account_id、name 和路由,以便命令無法針對共享帳戶上的另一個專案。
  5. 部署後:node scripts/check-site.mjs https://example.com --invite <sample code>,然後是 IndexNow ping。

需要人類批准的決策點

  • 生產部署和 DNS 更改。
  • 法律頁面(隱私、條款、刪除)的措辭;擁有者需簽署任何更改。
  • AI 訓練爬蟲允許/拒絕。
  • 「即將推出」→「下載」切換以及網站上顯示的任何價格。
  • 添加分析、等待列表表單或任何收集個人資料的內容。

驗證

  • node scripts/check-site.mjs https://example.com --paths /privacy,/terms,/support,/delete-account 退出碼 0:所需頁面在登出狀態下返回 200,AASA/assetlinks JSON 無重定向,OG 標籤具有可達的絕對圖片,互相的 hreflang,網站地圖 URL 全部 200。
  • 商店URL檢查清單中的每個URL在手機的私密視窗中開啟。
  • Rich Results Test 和 Schema Markup Validator 顯示無錯誤;PageSpeed Insights 行動 LCP < 2.5 秒。
  • Search Console:網站地圖「成功」;Bing:IndexNow 提交可見。

常見陷阱

  • 隱私URL重定向到登入頁面、PDF 或從不提及應用名稱的通用公司政策。
  • 刪除頁面僅說「在應用中刪除」(Play 需要在頁面上有一個請求路徑)或忘記提及取消商店訂閱。
  • AASA 透過 apex→www 重定向、作為 text/html 或位於機器人驗證頁面後面提供。
  • robots.txt 中的 Disallow: /i/ 與 noindex 標頭一起使用,而爬蟲隨後永遠看不到後者。
  • 按語言硬編碼的價格(對於瑞士訪客的德語頁面顯示歐元)或在商店價格變更後成為過時數字。
  • 為新應用捏造的 aggregateRating,或價格僅在一個國家成立的 offers。
  • OG 圖片

[出於翻譯目的而截斷]

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

erberkk/privacy-and-declarations

Use when filling in or auditing App Store privacy and compliance answers and Google Play App content declarations - Apple App Privacy labels, Play Data safety (CSV import), Health apps declaration and Health Connect permissions, advertising ID, PrivacyInfo.xcprivacy and required-reason APIs, export compliance (ITSAppUsesNonExemptEncryption), age rating, account deletion (in-app, web URL, re-authentication), consent and disclosure for AI features, and rules for health data. Derives every answer from a code and SDK scan so the forms, the privacy policy and the in-app text say the same thing.

erberkk/review-readiness

Use before submitting an app version or a first subscription for App Store or Google Play review, or after receiving a rejection. Runs a go/no-go checklist and writes a report - demo account that signs in with a password (no email one-time code), filled with data and premium unlocked; review notes; in-app purchases visible and purchasable (guideline 2.1(b)); iPad compatibility mode for iPhone-only apps; no placeholders or "coming soon"; metadata matching the app; live privacy URLs; crash-free cold start - and gives a playbook for replying in Resolution Center and deciding when to appeal.

erberkk/social-publishing

Use when setting up scheduled publishing of an app's marketing content to Instagram (Reels, carousels, Stories), Threads, X and TikTok through official APIs - self-hosting Postiz in Docker behind a Cloudflare Tunnel, creating the Meta app with the newer use-case flow (business portfolio, Facebook Page linked to the Instagram professional account, Threads tester invite), X developer pay-per-use credits and spend cap, TikTok and YouTube audit limits, safe OAuth account selection when one browser holds personal and brand accounts, resource limits, and phasing a posting calendar around real launch events.

erberkk/store-screenshots

Use when producing or updating App Store and Google Play screenshots and the Play feature graphic - planning a connected "panorama" story across frames, capturing real in-app screens with the app's own test/screenshot harness at each device's logical size and pixel ratio, covering the full device matrix (iPhone 6.9", the required medium Dynamic Island slot, iPhone Duo outer and inner displays, iPad 13" if the app runs on iPad, Play phone, 7" and 10" tablets, 1024x500 feature graphic), checking for alpha channels and wrong sizes, and uploading in order via the App Store Connect and Google Play APIs.

相關技能