Spaces:
Starting
Starting
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)
- Root
metadatainapps/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)
- title template (
- 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— Loginapp/(auth)/register/layout.tsx— Register
Open Graph + Twitter Card
- OG configured in root layout: type=website, siteName, locale=tr_TR, alternateLocale=en_US
- Twitter card:
summary_large_image, creator=@hasari_app - 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)
-
app/twitter-image.tsxre-exports the OG image
Sitemap & robots
-
app/sitemap.ts(dynamic) —/,/inspect,/login,/registerwith hreflang alternates -
app/robots.ts(dynamic) — Allow/, Disallow/api/,/dashboard,/admin,/inspections/,/settings,/_next/, references sitemap, declares host - Optional block for LLM scraper bots (commented; enable if desired)
Structured data (JSON-LD)
-
WebApplication+Organization+WebSite@graphin root layout -
inLanguage: ['tr-TR', 'en-US']for bilingual signal - Offer price 0 TRY (free MVP), applicationCategory: BusinessApplication
i18n SEO
- hreflang alternates declared (tr, en, x-default)
-
<html lang>set from runtime locale - 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.webmanifestif PWA later
Environment variables (production)
- Set
NEXT_PUBLIC_SITE_URL=https://hasari.app(or final domain) in Vercel / hosting - Verify
metadataBaseresolves 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.googleinlayout.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 inmetadata.twitter.creator) - LinkedIn company page
- Add real
sameAsURLs toOrganizationJSON-LD inlayout.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/imageeverywhere, 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
/rehberor/blogfor 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
/dashboardthin pages get accidentally indexed (robots.ts blocks them but addnoindexmeta 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.tsxapps/web/app/page.tsx
Created:
apps/web/app/sitemap.tsapps/web/app/robots.tsapps/web/app/opengraph-image.tsxapps/web/app/twitter-image.tsxapps/web/app/inspect/layout.tsxapps/web/app/(auth)/login/layout.tsxapps/web/app/(auth)/register/layout.tsxdocs/SEO_CHECKLIST.md(this file)