Communitygithub.com

本地商家建站:能让电话响起来的静态网站

为本地商家搭建、审核并上线生产级静态网站(HTML、CSS、原生 JS):以打电话转化为核心,事实驱动脚手架,本地 SEO 和 JSON-LD,先征得同意再加载 GA4,CSP 安全,外加零依赖审核脚本。

本地商家建站:能让电话响起来的静态网站 是什么?

本地商家建站配方第 2 步(搭建、审核、上线),来自 PongoDogo/local-business-site-builder(2026-10-06 发布,MIT 协议,资料核对日期 2026-10-05)。它针对托管在 Hostinger 的希腊水管工、诊所、餐厅和小店,用希腊语和店主沟通,但方法可以照搬:绝不编造事实(电话、营业时间、价格、评价只能来自店主,没有就不写);只维护一个 site-facts.json,用 scaffold.mjs derive 重新生成 JSON-LD、sitemap、robots、manifest 和 vCard;先写 docs/DESIGN.md 并选定一个方向再写代码;全程符合 CSP;征得同意前不加载任何第三方;只有 audit_site.mjs 零错误、verify_live.mjs 在线上域名通过才算完成。附带完整示例站、多宽度溢出探针、OG 图渲染和图标生成脚本。不适用于电商或 WordPress。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/PongoDogo/local-business-site-builder/tree/HEAD/skills/local-business-site-builder

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Local business site builder (Greece)

Distilled from a real site (Αποφράξεις Τσαβάρης) that took dozens of prompts because the invisible plumbing went wrong again and again: server config, consent, SEO files, inconsistent facts. Goal: get it right the first time. Talk to the user in Greek.

Paths below are relative to this skill's folder. Resolve them to absolute paths before running scripts; run scripts with deno run -A scripts/<name>.mjs (or node). If neither exists, tell the user (install: winget install DenoLand.Deno, ask first) and use the manual checklists.

Portable execution

Check the host capabilities before running helpers: terminal and file access, Node 18+ or Deno, browser tooling, optional FFmpeg and network permissions. Never assume installation supplies these tools. Use available equivalent image/browser tools or manual reference checklists; report any automated checks you could not execute. Resolve every supporting path against this installed skill directory. Never assume a Windows user path or install software without authorization.

Rules that never bend (each cost real time or money)

  1. Never invent facts. Phone, email, address, ΑΦΜ, ΓΕΜΗ, hours, prices, reviews, ratings, years in business, licences, guarantees, arrival times come from the owner. Missing → ask, or leave out; [ΧΡΕΙΑΖΕΤΑΙ: …] markers block go-live. Regulated professions (doctor, dentist, lawyer, pharmacist): no reviews, no success claims (references/01 §4).
  2. One source of truth: site-facts.json (outside the deploy folder). Derived files (JSON-LD, sitemap, llms.txt, robots, manifest, vCard) are regenerated with scaffold.mjs derive, never hand-edited.
  3. Design is decided per client, never copied from a previous site: write docs/DESIGN.md, get the user's pick of ONE direction, then code (references/02).
  4. CSP-clean from line one: no inline script/style/handlers; every third party added to the CSP in the same change; one enforced CSP.
  5. No third-party request before consent or a click. GA4 loads only after "Αποδοχή"; Accept/Reject equal; map on click; fonts self-hosted with verified Greek glyphs (many popular fonts, e.g. Poppins/Montserrat, have none).
  6. Fix root causes, not per-width patches. Mobile-first; test the width matrix with scripts/overflow_probe.js.
  7. Never trust a server directive. Hostinger/LiteSpeed ignores <IfModule>, silently ignores unsupported directives and forces HTTPS at the edge: verify live with verify_live.mjs.
  8. SEO files are deliverables: canonical, robots (Allow: / + Sitemap), sitemap, JSON-LD (LocalBusiness subtype), OG 1200×630, icons incl. maskable.
  9. Bump ?v= on every page after any CSS/JS change (bump_version.mjs) and purge Hostinger caches.
  10. Verify, don't assume. Say "done" only after the audit shows 0 errors on the final files, browser QA is done, and you report honestly what is unverified.

Gotchas (obsolete or false beliefs that look right)

  • FAQPage/HowTo markup brings nothing: FAQ rich results were retired on 7 May 2026. llms.txt has no proven effect (Google says it does not use it): optional.
  • Never add aggregateRating/review JSON-LD for the business itself; sameAs only for real, populated profiles (never an empty second domain).
  • A staging Disallow: / or noindex left in production deindexes the site (audit SEO-001/023).
  • Hostinger preview domain *.hostingersite.com duplicates the site: 301 it and remove it.
  • htaccess without the dot is ignored; with a dot it must be uploaded explicitly (hidden file). Docs/facts/.md must not sit in public_html.
  • Google Fonts CDN links break privacy and CSP; frontend design advice that names Poppins/DM Sans/Playfair etc. fails on Greek.
  • A link that differs from a file only by letter case works on Windows and 404s on the server.
  • Anchors built inside JS (cookie banner → /privacy.html#cookies) must exist too.
  • The edge bot challenge after ~60 quick requests is not a site failure: wait, don't bypass.

Workflow (load the reference named in each step before doing it)

  1. Triage: new site · rework · audit-only (jump to 6) · small change (jump to 5). Check which tools exist (deno/node, browser tool, ffmpeg, Edge/Chrome for render_png).
  2. Intake → read references/01-intake-and-facts.md. Ask everything in one Greek message (if nobody can answer, use only the facts given, never invent, write QUESTIONS.md); write site-facts.json from assets/site-facts.example.json; scaffold.mjs check --facts site-facts.json.
  3. Design brief → references/02-design-direction.md; fill docs/DESIGN.md, propose 2-3 directions, get a choice.
  4. Scaffold: scaffold.mjs init --facts site-facts.json --out public --docs docs [--logo logo.svg] (creates pages, base CSS, JS, .htaccess with CSP from the features, robots, sitemap, llms.txt, manifest, vCard, Greek handoff docs, AGENTS.md/CLAUDE.md for the project).
  5. Build → references/03-build-and-code.md, 04-conversion-and-content.md, 05-seo-schema-geo.md: tokens + THEME in style.css, sections in index.html (replace the [ΧΡΕΙΑΖΕΤΑΙ…] marker), assets via make_icons.mjs, render_png.mjs (OG image from an HTML page), images.mjs, font_greek_check.mjs --download. For consent, privacy text, footer identity, prices or reviews also read 06-privacy-consent-legal.md. A finished fictional example of the quality bar is in assets/example-site/ (study structure and copy tone, never its look).
  6. After any fact change: facts → scaffold.mjs derive → visible text → bump_version.mjs.
  7. Audit: audit_site.mjs public --facts site-facts.json → fix every ERROR, read WARN, give the owner the VERIFY list. Unclear finding → references/mistake-registry.md.
  8. QA and launch → references/08-qa-and-launch.md (width matrix, consent test, content QA); deploy and server details in references/07-server-htaccess-deploy.md.
  9. Post-deploy: verify_live.mjs https://DOMAIN --local public --preview-domain X.hostingersite.com; hand the owner docs/. Forms, booking, more pages, CMS, e-shop, other languages, ads pixels → references/09-beyond-the-basics.md and agree scope first.

Scripts (scripts/)

audit_site.mjs pre-launch audit (ERROR/WARN/VERIFY/INFO; --json, --strict; exit 1 on errors) · verify_live.mjs live check (redirects, headers, 404, exposed files, byte-identity; throttled) · scaffold.mjs init/derive/check · bump_version.mjs · render_png.mjs · make_icons.mjs · images.mjs (ffmpeg) · contrast.mjs · font_greek_check.mjs · overflow_probe.js (run inside the page). All print --help-style usage when called without arguments. They write only inside the folders you pass.

Reference index

01 intake/facts/regulated professions · 02 design directions, Greek fonts · 03 build, performance, accessibility, widths · 04 conversion and copy · 05 SEO/schema/GBP/AI search · 06 privacy and Greek law pointers · 07 Hostinger server and deploy · 08 QA/launch · 09 beyond the basics · mistake-registry. Research date: 2026-10-05; laws and Google policies change: re-verify before relying on them, and say when something is unverified.

相关技能