Spaces:
Sleeping
Sleeping
File size: 6,745 Bytes
e327f0d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | # SEO Checklist — Hasarİ (arac-hasar-v2)
Last updated: 2026-05-16
Default locale: **tr** (Turkish) — Secondary: **en** (English)
Site URL env var: `NEXT_PUBLIC_SITE_URL` (fallback `https://hasari.app`)
---
## 1. IMPLEMENTED (in repo)
### Meta tags & Metadata API (Next.js 15 App Router)
- [x] Root `metadata` in `apps/web/app/layout.tsx`
- title template (`%s · Hasarİ`), default TR title
- description (TR, 150-160 chars)
- keywords array (TR-priority: "araç hasar tespit", "yapay zeka oto ekspertiz", "hasar fiyat hesaplama", "fotoğrafla hasar", "kasko hasar tahmin", "tampon çizik tamir fiyatı", "göçük tamir maliyeti", + EN secondary)
- authors, creator, publisher, applicationName, category
- canonical + hreflang (`tr-TR`, `en-US`, `x-default`)
- robots directives (index/follow, googleBot max-image-preview=large)
- icons (favicon, apple-touch-icon)
- formatDetection disabled (email/telephone/address)
- [x] Per-page metadata:
- `app/page.tsx` — Home (Server Component, direct export)
- `app/inspect/layout.tsx` — Inspect page (wrapper for client child)
- `app/(auth)/login/layout.tsx` — Login
- `app/(auth)/register/layout.tsx` — Register
### Open Graph + Twitter Card
- [x] OG configured in root layout: type=website, siteName, locale=tr_TR, alternateLocale=en_US
- [x] Twitter card: `summary_large_image`, creator=@hasari_app
- [x] OG image generated at edge via `app/opengraph-image.tsx` (1200×630, PNG)
- Brand mark "H" + "Hasarİ" wordmark + tagline
- Headline: "Araç hasarını fotoğraftan tespit et."
- Feature chips: 20+ parça, 6 hasar sınıfı, < 8 sn analiz, Türkiye fiyat tabanı
- Gradient background (#0b3aa8 → #4c9fff)
- [x] `app/twitter-image.tsx` re-exports the OG image
### Sitemap & robots
- [x] `app/sitemap.ts` (dynamic) — `/`, `/inspect`, `/login`, `/register` with hreflang alternates
- [x] `app/robots.ts` (dynamic) — Allow `/`, Disallow `/api/`, `/dashboard`, `/admin`, `/inspections/`, `/settings`, `/_next/`, references sitemap, declares host
- [x] Optional block for LLM scraper bots (commented; enable if desired)
### Structured data (JSON-LD)
- [x] `WebApplication` + `Organization` + `WebSite` `@graph` in root layout
- [x] `inLanguage: ['tr-TR', 'en-US']` for bilingual signal
- [x] Offer price 0 TRY (free MVP), applicationCategory: BusinessApplication
### i18n SEO
- [x] hreflang alternates declared (tr, en, x-default)
- [x] `<html lang>` set from runtime locale
- [x] Cookie-based locale switching preserves canonical URL (no per-language URL prefix needed)
---
## 2. MANUAL STEPS (do BEFORE launch / after deploy)
### Required assets — drop into `apps/web/public/`
- [ ] `favicon.ico` (32×32 + 16×16 multi-resolution)
- [ ] `icon.png` (512×512 for schema.org Organization.logo)
- [ ] `apple-touch-icon.png` (180×180)
- [ ] `manifest.webmanifest` if PWA later
### Environment variables (production)
- [ ] Set `NEXT_PUBLIC_SITE_URL=https://hasari.app` (or final domain) in Vercel / hosting
- [ ] Verify `metadataBase` resolves to HTTPS production URL
### Google Search Console
- [ ] Create property at https://search.google.com/search-console (Domain property preferred — covers all subdomains)
- [ ] Verify via DNS TXT record (preferred) or HTML tag (paste verification code into `metadata.verification.google` in `layout.tsx`)
- [ ] Submit sitemap: `https://hasari.app/sitemap.xml`
- [ ] Enable email alerts (Manual Actions, Core Web Vitals regressions)
- [ ] Check Index Coverage report 48h after submit
- [ ] Validate hreflang via "International Targeting" report
### Bing Webmaster Tools
- [ ] Register at https://www.bing.com/webmasters
- [ ] Import from Search Console (one-click) OR verify via meta tag (paste into `metadata.verification.other['msvalidate.01']`)
- [ ] Submit sitemap
### Yandex Webmaster (Turkish market secondary)
- [ ] https://webmaster.yandex.com — register + verify (TR audience uses Yandex marginally)
### Analytics & tag setup
- [ ] Install GA4 (or Plausible/Umami for privacy-first) — track organic landing pages
- [ ] Link GA4 ↔ Search Console for unified reporting
- [ ] Set up GTM if planning multiple tags
### Social & profile setup (E-E-A-T signals)
- [ ] Twitter/X account `@hasari_app` (or update handle in `metadata.twitter.creator`)
- [ ] LinkedIn company page
- [ ] Add real `sameAs` URLs to `Organization` JSON-LD in `layout.tsx`
- [ ] Author entity pages with credentials (when blog launches)
### Performance & Core Web Vitals
- [ ] Run Lighthouse on production URL — target SEO ≥ 95, Performance ≥ 90
- [ ] Validate LCP < 2.5s, INP < 200ms, CLS < 0.1 (mobile + desktop)
- [ ] Audit images: ensure `next/image` everywhere, AVIF/WebP enabled
- [ ] Preconnect to API origin if used above the fold
### Rich Results Test (validation)
- [ ] https://search.google.com/test/rich-results — paste prod URL
- [ ] Confirm WebApplication + Organization + WebSite parsed without errors
- [ ] https://validator.schema.org for structural validation
- [ ] Twitter Card Validator (X): https://cards-dev.twitter.com/validator
### Content roadmap (post-launch — weeks 2-12)
- [ ] Blog/Knowledge base under `/rehber` or `/blog` for topical authority
- Target clusters: "tampon çizik tamir fiyatı", "kasko hasar süreci", "göçük çıkartma yöntemleri", "ön cam değişim fiyatı"
- [ ] FAQ schema on home + inspect page (use existing copy)
- [ ] HowTo schema on inspect page ("Aracını nasıl çekersin?" steps)
- [ ] Original data study: "2026 Türkiye'de tampon onarım fiyatları" — linkable asset for digital PR
### Penalties / risks to watch
- [ ] Avoid duplicate content if `/dashboard` thin pages get accidentally indexed (robots.ts blocks them but add `noindex` meta on those pages too)
- [ ] Monitor Search Console "Soft 404" and "Crawled — currently not indexed" buckets monthly
---
## 3. NICE-TO-HAVE (not blocking launch)
- [ ] PWA `manifest.webmanifest` + service worker for re-engagement
- [ ] BreadcrumbList schema once `/blog/[slug]` and `/inspections/[id]` exist publicly
- [ ] VideoObject schema if product demo video added to home hero
- [ ] Speakable schema for FAQ (voice search readiness)
- [ ] hreflang verified via Merkle hreflang tester
- [ ] IndexNow integration for Bing/Yandex instant indexing of new pages
---
## 4. FILE INVENTORY (created/edited in this pass)
Edited:
- `apps/web/app/layout.tsx`
- `apps/web/app/page.tsx`
Created:
- `apps/web/app/sitemap.ts`
- `apps/web/app/robots.ts`
- `apps/web/app/opengraph-image.tsx`
- `apps/web/app/twitter-image.tsx`
- `apps/web/app/inspect/layout.tsx`
- `apps/web/app/(auth)/login/layout.tsx`
- `apps/web/app/(auth)/register/layout.tsx`
- `docs/SEO_CHECKLIST.md` (this file)
|