Tanıtım sitesi, SEO ve AI SEO: pushizo.com yayın adımları
Pushizo'nun tanıtım sitesi (apps/web, https://pushizo.com), geliştirici dokümantasyonu (apps/docs-site, https://docs.pushizo.com) ve müşteri paneli (apps/dashboard, https://app.pushizo.com; API https://api.pushizo.com)…
Pushizo'nun tanıtım sitesi (apps/web, https://pushizo.com), geliştirici dokümantasyonu (apps/docs-site,
https://docs.pushizo.com) ve müşteri paneli (apps/dashboard, https://app.pushizo.com; API https://api.pushizo.com)
arama motorları ve yapay zekâ asistanları için hazırdır. SITE_URL / DOCS_SITE_URL verilmeden yapılan derlemeler
noindex üretilir. Bu rehber, pushizo.com'u yayına almak için gereken adımları sırasıyla listeler.
Tasarım kararları: ADR-0034.
1. Yüzeyler ve ortam değişkenleri
| Yüzey | Örnek alan adı | Değişken | Ne zaman okunur |
|---|---|---|---|
Tanıtım sitesi (apps/web, port 3200) | pushizo.com | SITE_URL | Derleme (imaj build argümanı) |
Dokümantasyon (apps/docs-site, port 3300) | docs.pushizo.com | DOCS_SITE_URL | Derleme (imaj build argümanı) |
Müşteri paneli (apps/dashboard, port 3100) | app.pushizo.com | APP_URL | Çalışma anı |
Tanıtım sitesinin diğer değişkenleri (hepsi derleme anında):
| Değişken | Varsayılan | Açıklama |
|---|---|---|
WEB_DASHBOARD_URL | APP_URL, yoksa http://localhost:3100 | "Ücretsiz başla" ve "Giriş yap" bağlantılarının kökü (/register, /login). |
WEB_DOCS_URL | DOCS_SITE_URL, yoksa http://localhost:3300 | Dokümantasyon bağlantılarının kökü. |
WEB_CONTACT_EMAIL | boş | Hakkında sayfasında ve Organization JSON-LD'de iletişim e-postası. Boşsa e-posta yayınlanmaz. |
WEB_BILLING_ENABLED | false | true: ödeme sağlayıcısı devrede; ücretli planlar kayda yönlenir ve SoftwareApplication JSON-LD offers yayınlanır. false: ücretli planlarda "Satış ekibiyle iletişime geçin" (mailto: WEB_CONTACT_EMAIL, boşsa support@pushizo.com), offers yok. |
WEB_COMPANY_NAME, WEB_COMPANY_ADDRESS, WEB_COMPANY_TAX_ID, WEB_COMPANY_MERSIS | boş | Şirket künyesi: alt bilgide ve /legal/imprint sayfasında. Unvan boşsa künye yayınlanmaz ve sayfa 404 döner; MERSİS 16 hanelidir. |
WEB_AI_SEARCH_CRAWLERS | allow | Yanıt/arama yapay zekâ ajanları (OAI-SearchBot, ChatGPT-User, Claude-SearchBot, PerplexityBot…). |
WEB_AI_TRAINING_CRAWLERS | allow | Model eğitimi tarayıcıları (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, CCBot…). |
INDEXNOW_KEY | boş | IndexNow anahtarı (8–128 harf/rakam/tire). Doluysa /indexnow-key.txt yayınlanır. |
SITE_URL boşken derleme şu uyarıyı yazar ve site noindex, nofollow + robots.txt'de Disallow: / ile üretilir:
[web] UYARI: SITE_URL tanımlı değil…. Aynı kural DOCS_SITE_URL için dokümantasyonda, APP_URL https değilken
dashboard'da geçerlidir.
2. DNS ve TLS
- Tanıtım sitesi için kök alan adı (
A/AAAAveya sağlayıcınınALIAS/ANAMEkaydı),docs.veapp.içinA/CNAMEkayıtları oluşturun.www.kullanılacaksa kökten birine kalıcı (301/308) yönlendirme yapın; iki adresin de içerik sunması kopya içerik oluşturur.SITE_URLseçilen tek adres olmalıdır. - Compose (tek sunucu):
.env.prodiçindeWEB_HOST,DOCS_HOST,APP_HOSTdeğerlerini girin; ilk sertifikalar için./infra/scripts/certbot-init.sh(WEB_HOST dahil tüm alan adları), ardındandocker compose --env-file .env.prod -f infra/compose/docker-compose.prod.yml up -d web docs nginx. - Kubernetes (Helm):
web.enabled=trueveingress.hosts.web=<alan-adı>verin; sertifika cert-manager ile ingress TLS'ine eklenir.values.yamliçindekiwebbölümü kaynak ve sağlık denetimi ayarlarını içerir.
3. Yayın derlemesi
Release iş akışı (.github/workflows/release.yml) imajları GitHub depo değişkenleriyle derler. Şu değişkenleri
Settings → Secrets and variables → Actions → Variables altında tanımlayın:
| Depo değişkeni | Değer |
|---|---|
PROD_SITE_URL | https://pushizo.com |
PROD_DOCS_URL | https://docs.pushizo.com |
PROD_APP_URL | https://app.pushizo.com (zaten tanımlı olabilir) |
PROD_INDEXNOW_KEY | isteğe bağlı IndexNow anahtarı |
Elle derleme örneği:
docker build -f infra/docker/web.Dockerfile \
--build-arg SITE_URL=https://pushizo.com \
--build-arg WEB_DASHBOARD_URL=https://app.pushizo.com \
--build-arg WEB_DOCS_URL=https://docs.pushizo.com \
-t ghcr.io/exec0de/pushizo-web:local .
docker build -f infra/docker/docs-site.Dockerfile \
--build-arg DOCS_SITE_URL=https://docs.pushizo.com \
--build-arg SITE_URL=https://pushizo.com \
-t ghcr.io/exec0de/pushizo-docs-site:local .
```text
**Staging:** release imajı staging ve üretimde aynıdır; staging alan adında tarayıcıları uç katmanda engelleyin
(nginx sunucu bloğuna `add_header X-Robots-Tag "noindex, nofollow" always;` veya temel kimlik doğrulama). Canonical
adresler üretim alan adını gösterdiği için staging sayfaları kopya olarak dizine girmez, ancak taranmamaları önerilir.
## 4. Yayın sonrası doğrulama
```bash
curl -s https://pushizo.com/robots.txt # Allow + Sitemap satırı, yapay zekâ tarayıcı grupları
curl -s https://pushizo.com/sitemap.xml | head # mutlak https adresleri, xhtml:link alternatifleri
curl -sI https://pushizo.com/ | grep -i x-robots-tag # çıktı OLMAMALI (noindex kalkmış olmalı)
curl -s https://pushizo.com/llms.txt | head
curl -s https://docs.pushizo.com/llms.txt | head
curl -s https://app.pushizo.com/robots.txt # yalnızca /login ve /register izinli
```text
- Google **Rich Results Test** ve **Schema Markup Validator** ile ana sayfa (Organization, WebSite,
SoftwareApplication), `/faq` (FAQPage) ve bir dokümantasyon sayfasını (TechArticle) doğrulayın.
- **PageSpeed Insights / Lighthouse** ile mobil ve masaüstünde performans, erişilebilirlik ve SEO puanlarının
≥ 95 olduğunu kontrol edin.
- Paylaşım kartları: `https://<alan-adı>/og/tr/home` görselinin açıldığını ve LinkedIn Post Inspector / X kart
önizlemesinde başlığın doğru göründüğünü kontrol edin.
## 5. Google Search Console
1. **Alan adı mülkü** ekleyin (DNS TXT doğrulaması; tüm alt alan adlarını ve http/https sürümlerini kapsar).
2. **Site haritaları:** `https://pushizo.com/sitemap.xml` ve `https://docs.pushizo.com/sitemap.xml`
gönderin.
3. **URL denetimi** ile ana sayfa, `/en`, `/pricing` ve `/features/push` için "Dizine eklenmesini iste".
4. Birkaç gün sonra **Sayfalar** raporunda "noindex nedeniyle hariç tutuldu" görünmemeli (görünüyorsa imaj
`SITE_URL` olmadan derlenmiştir). **Uluslararası hedefleme** için ayrı ayar gerekmez; hreflang etiketleri sayfada.
5. Dashboard'da yalnızca `/login` ve `/register` dizine girer; diğer panel adresleri "robots.txt tarafından
engellendi" olarak görünür, bu beklenen durumdur.
## 6. Bing Webmaster Tools ve IndexNow
1. Bing Webmaster Tools'ta **Google Search Console'dan içe aktar** seçeneğiyle mülkü ve site haritalarını alın
(veya DNS/XML dosyası ile doğrulayıp site haritalarını elle gönderin).
2. **IndexNow:** rastgele bir anahtar üretin (`openssl rand -hex 16`), `PROD_INDEXNOW_KEY` olarak tanımlayıp siteyi
yeniden derleyin; `https://pushizo.com/indexnow-key.txt` anahtarı döndürmelidir. Her yayından sonra:
```bash
SITE_URL=https://pushizo.com INDEXNOW_KEY=<anahtar> npm run indexnow --workspace @pushizo/website
```text
Betik sitemap'teki tüm URL'leri `api.indexnow.org`'a bildirir (Bing, Yandex ve diğer IndexNow ortakları).
## 7. Yasal metinler
Gizlilik Politikası, Kullanım Şartları, KVKK Aydınlatma Metni, Çerez Politikası, Veri İşleme Sözleşmesi (`dpa`), Alt
İşleyenler (`subprocessors`) ve Kabul Edilebilir Kullanım Politikası (`aup`) sayfaları metin dosyaları gelene kadar
yayınlanmaz. Hukuk ekibinin metinleri şu dosyalara eklenir (iki dil de zorunlu; biri eksikse sayfa üretilmez):
```text
apps/web/content/legal/privacy.tr.md apps/web/content/legal/privacy.en.md
apps/web/content/legal/terms.tr.md apps/web/content/legal/terms.en.md
apps/web/content/legal/kvkk.tr.md apps/web/content/legal/kvkk.en.md
apps/web/content/legal/cookies.tr.md apps/web/content/legal/cookies.en.md
apps/web/content/legal/dpa.tr.md apps/web/content/legal/dpa.en.md
apps/web/content/legal/subprocessors.tr.md apps/web/content/legal/subprocessors.en.md
apps/web/content/legal/aup.tr.md apps/web/content/legal/aup.en.md
```text
Eksik dosyalar `npm run check:legal --workspace @pushizo/website` ile listelenir (yalnızca uyarı verir, derlemeyi
durdurmaz).
İsteğe bağlı ön bilgi `---\nupdated: 2026-10-16\n---` sayfada "Son güncelleme" olarak gösterilir. Dosyalar eklenince
sayfalar `/legal/<ad>` ve `/en/legal/<ad>` adreslerinde üretilir, sitemap'e, alt bilgiye ve llms.txt'ye otomatik
girer. Site çerez kullanmadığından (tema tercihi tarayıcı depolamasında) çerez onay bandı yoktur; analitik aracı
eklenirse çerez politikası ve onay mekanizması yeniden değerlendirilmelidir.
Güvenlik açığı bildirimi için `/.well-known/security.txt` (RFC 9116; `Contact: mailto:security@pushizo.com`,
`Expires` derleme anından bir yıl sonra) derleme sırasında üretilir: süre dolmadan site yeniden derlenip
yayınlanmalıdır. Kötüye kullanım bildirimi adresi (`abuse@pushizo.com`) Hakkında sayfasında yayınlanır.
## 8. Yapay zekâ görünürlüğü (AI SEO)
- `llms.txt` / `llms-full.txt` tanıtım sitesinde ve dokümantasyonda yayınlanır; içerik site metinlerinden ve plan
matrisinden üretildiği için ayrıca bakım gerektirmez.
- Yapay zekâ tarayıcıları varsayılan olarak izinlidir. Model eğitimi tarayıcılarını kapatmak için
`WEB_AI_TRAINING_CRAWLERS=disallow`, yanıt/arama ajanlarını kapatmak için `WEB_AI_SEARCH_CRAWLERS=disallow` ile
yeniden derleyin.
- Metin güncellerken tanım cümlelerini kısa, olgusal ve tek başına anlamlı tutun; fiyat ve limitleri metne yazmayın
(yer tutucular plan matrisinden doldurulur).
## 9. Yerel geliştirme
```bash
npm run dev --workspace @pushizo/website # http://localhost:3200 (Türkçe /, İngilizce /en)
npx turbo run build --filter=@pushizo/website # SITE_URL olmadan: noindex uyarısı beklenir
npx playwright test tests/e2e/web-site.spec.ts # sayfalar, tr/en geçişi, SEO etiketleri, axe
```textDMARC ve TLS-RPT izleme
Platform alan adının DMARC toplu raporlarını ve TLS-RPT raporlarını alma (Postal HTTP endpoint ya da IMAP), ayrıştırma, yetkisiz kaynak uyarıları, politika önerisi ve Cloudflare ile tek tıkla p= değişimi.
Runbook: Olay yönetimi ve status page
Kaynaklar: Alertmanager (#pushizo-alerts, #pushizo-oncall, e-posta), Grafana panoları (infra/monitoring/grafana/dashboards), Loki logları (request_id ile izleme), Sentry. Status page: https://status.<alan adı> →…