{"id":31647,"date":"2025-10-12T08:41:05","date_gmt":"2025-10-12T05:41:05","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31647"},"modified":"2025-10-12T08:41:05","modified_gmt":"2025-10-12T05:41:05","slug":"gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/","title":{"rendered":"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur?"},"content":{"rendered":"<p><body><\/p>\n<h2>Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur?<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>Dijital \u00e7a\u011fda, her i\u015fletmenin \u00e7evrimi\u00e7i bir varl\u0131\u011fa sahip olmas\u0131 hayati \u00f6nem ta\u015f\u0131maktad\u0131r. Kitap\u00e7\u0131lar da bu kural\u0131n bir istisnas\u0131 de\u011fildir. Yeni bir kitap\u00e7\u0131n\u0131n lansman\u0131, \u00f6zel bir kampanya duyurusu veya yazar etkinli\u011fi gibi durumlar i\u00e7in etkili bir a\u00e7\u0131l\u0131\u015f sayfas\u0131 (landing page), potansiyel m\u00fc\u015fterilere ula\u015fman\u0131n ve onlar\u0131 etkile\u015fime te\u015fvik etmenin en g\u00fc\u00e7l\u00fc yollar\u0131ndan biridir. Bu makalede, modern web geli\u015ftirme d\u00fcnyas\u0131n\u0131n \u00f6nde gelen teknolojilerinden Gatsby ve TypeScript kullanarak, y\u00fcksek performansl\u0131, SEO dostu ve bak\u0131m\u0131 kolay bir kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfas\u0131 olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<p>Gatsby, React tabanl\u0131 statik site olu\u015fturucu (Static Site Generator &#8211; SSG) olarak, h\u0131z, g\u00fcvenlik ve \u00f6l\u00e7eklenebilirlik gibi avantajlar sunarken, TypeScript ise JavaScript&#8217;e tip g\u00fcvenli\u011fi ekleyerek daha sa\u011flam, okunabilir ve s\u00fcrd\u00fcr\u00fclebilir kod yazmam\u0131z\u0131 sa\u011flar. Bu kombinasyon, \u00f6zellikle b\u00fcy\u00fck ekiplerle \u00e7al\u0131\u015f\u0131rken veya uzun vadeli projelerde hata oran\u0131n\u0131 azaltmada ve geli\u015ftirici deneyimini iyile\u015ftirmede \u00f6nemli faydalar sunar. Bir kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfas\u0131, genellikle yeni \u00e7\u0131kan kitaplar\u0131, \u00f6ne \u00e7\u0131kan yazarlar\u0131, \u00f6zel indirimleri veya etkinlikleri sergileyen, tek odakl\u0131 bir pazarlama arac\u0131d\u0131r. Bu t\u00fcr bir sayfa, kullan\u0131c\u0131lar\u0131 belirli bir eyleme (\u00f6rne\u011fin, b\u00fcltene abone olma, yeni kitaplara g\u00f6z atma veya bir etkinli\u011fe kaydolma) y\u00f6nlendirmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bu rehberde, bu hedeflere ula\u015fmak i\u00e7in gerekli t\u00fcm teknik ad\u0131mlar\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>Gatsby ve TypeScript Neden Tercih Edilmeli?<\/h3>\n<p>Bir kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfas\u0131 gibi pazarlama odakl\u0131 bir proje i\u00e7in Gatsby ve TypeScript se\u00e7imi, bir\u00e7ok stratejik avantaj\u0131 beraberinde getirir. Bu b\u00f6l\u00fcmde, bu teknolojilerin sundu\u011fu temel faydalar\u0131 detayland\u0131raca\u011f\u0131z.<\/p>\n<h4>Gatsby&#8217;nin Avantajlar\u0131<\/h4>\n<p>Gatsby, modern web siteleri olu\u015fturmak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r ve \u00f6zellikle a\u00e7\u0131l\u0131\u015f sayfalar\u0131 i\u00e7in idealdir:<\/p>\n<ul>\n<li><strong>\u00dcst\u00fcn Performans:<\/strong> Gatsby, \u00f6nceden olu\u015fturulmu\u015f (pre-built) statik HTML dosyalar\u0131 sunarak sayfa y\u00fckleme s\u00fcrelerini minimuma indirir. Bu, kullan\u0131c\u0131 deneyimini iyile\u015ftirir ve arama motoru s\u0131ralamalar\u0131n\u0131 olumlu etkiler. Resim optimizasyonu, kod b\u00f6lme (code splitting) ve lazy loading gibi yerle\u015fik optimizasyonlar sayesinde siteler, Lighthouse gibi performans testlerinde y\u00fcksek puanlar al\u0131r. Bir kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfas\u0131nda g\u00f6rsellerin (kitap kapaklar\u0131 vb.) yo\u011fun kullan\u0131ld\u0131\u011f\u0131 d\u00fc\u015f\u00fcn\u00fcld\u00fc\u011f\u00fcnde, bu \u00f6zellik kritik \u00f6neme sahiptir.<\/li>\n<li><strong>Geli\u015fmi\u015f SEO:<\/strong> Statik HTML, arama motorlar\u0131n\u0131n sitenizi daha kolay ve verimli bir \u015fekilde taramas\u0131na olanak tan\u0131r. H\u0131zl\u0131 y\u00fckleme s\u00fcreleri ve optimize edilmi\u015f i\u00e7erik yap\u0131s\u0131, anahtar kelime s\u0131ralamalar\u0131nda avantaj sa\u011flar. Gatsby&#8217;nin meta etiket y\u00f6netimi i\u00e7in sundu\u011fu eklentilerle, her sayfa i\u00e7in \u00f6zelle\u015ftirilmi\u015f SEO ba\u015fl\u0131klar\u0131, a\u00e7\u0131klamalar\u0131 ve sosyal medya payla\u015f\u0131mlar\u0131 (Open Graph) kolayca yap\u0131land\u0131r\u0131labilir.<\/li>\n<li><strong>Geli\u015ftirici Deneyimi:<\/strong> React ekosistemine dayanmas\u0131 sayesinde, React geli\u015ftiricileri Gatsby ile h\u0131zl\u0131ca adapte olabilir. GraphQL tabanl\u0131 veri katman\u0131, farkl\u0131 kaynaklardan (yerel dosyalar, CMS&#8217;ler, API&#8217;ler) verileri tek bir yerden \u00e7ekmeyi ve y\u00f6netmeyi son derece kolayla\u015ft\u0131r\u0131r. Zengin eklenti ekosistemi, \u00e7e\u015fitli i\u015flevsellikleri (resim i\u015fleme, veri kaynaklar\u0131, stil y\u00f6netimi) projeye entegre etmeyi basitle\u015ftirir.<\/li>\n<li><strong>G\u00fcvenlik:<\/strong> Statik siteler, sunucu taraf\u0131nda herhangi bir dinamik i\u015flem veya veritaban\u0131 ba\u011flant\u0131s\u0131 gerektirmedi\u011fi i\u00e7in geleneksel dinamik sitelere g\u00f6re \u00e7ok daha g\u00fcvenlidir. Bu, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azalt\u0131r.<\/li>\n<li><strong>Maliyet Etkinli\u011fi:<\/strong> Statik siteler, genellikle CDN&#8217;ler (Content Delivery Network) veya uygun maliyetli statik hosting servisleri (Netlify, Vercel, GitHub Pages) \u00fczerinden da\u011f\u0131t\u0131labilir. Bu, sunucu maliyetlerini \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcr\u00fcr.<\/li>\n<\/ul>\n<h4>TypeScript&#8217;in Avantajlar\u0131<\/h4>\n<p>TypeScript, JavaScript&#8217;in s\u00fcper k\u00fcmesi olarak, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde geli\u015ftirme s\u00fcrecine de\u011fer katan bir dizi avantaj sunar:<\/p>\n<ul>\n<li><strong>Tip G\u00fcvenli\u011fi:<\/strong> TypeScript&#8217;in en b\u00fcy\u00fck avantaj\u0131, kodunuzu derleme zaman\u0131nda tip hatalar\u0131na kar\u015f\u0131 kontrol etmesidir. Bu, \u00e7al\u0131\u015fma zaman\u0131nda ortaya \u00e7\u0131kabilecek bir\u00e7ok hatay\u0131 \u00f6nceden yakalaman\u0131z\u0131 sa\u011flar. Bir kitap\u00e7\u0131n\u0131n a\u00e7\u0131l\u0131\u015f sayfas\u0131nda, kitap verileri (ba\u015fl\u0131k, yazar, fiyat) veya kullan\u0131c\u0131 etkile\u015fimleri (form verileri) gibi yap\u0131land\u0131r\u0131lm\u0131\u015f verilerle \u00e7al\u0131\u015f\u0131rken tip g\u00fcvenli\u011fi, veri tutarl\u0131l\u0131\u011f\u0131n\u0131 ve uygulaman\u0131n kararl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>Kod Kalitesi ve Okunabilirlik:<\/strong> A\u00e7\u0131k\u00e7a tan\u0131mlanm\u0131\u015f tipler, kodun ne bekledi\u011fini ve ne d\u00f6nd\u00fcrd\u00fc\u011f\u00fcn\u00fc netle\u015ftirir. Bu, \u00f6zellikle ekip i\u00e7inde \u00e7al\u0131\u015f\u0131rken veya projeye yeni geli\u015ftiricilerin dahil olmas\u0131 durumunda kodun daha anla\u015f\u0131l\u0131r ve bak\u0131m\u0131 kolay olmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Geli\u015ftirici Verimlili\u011fi:<\/strong> Entegre geli\u015ftirme ortamlar\u0131 (IDE&#8217;ler) TypeScript ile m\u00fckemmel bir \u015fekilde entegre olur. Bu, otomatik tamamlama, an\u0131nda hata tespiti, kod gezinme ve yeniden d\u00fczenleme (refactoring) gibi \u00f6zelliklerle geli\u015ftirici verimlili\u011fini art\u0131r\u0131r. Bu sayede, daha h\u0131zl\u0131 ve daha az hatayla kod yazabilirsiniz.<\/li>\n<li><strong>\u00d6l\u00e7eklenebilirlik:<\/strong> TypeScript, b\u00fcy\u00fck ve karma\u015f\u0131k projelerin y\u00f6netimini kolayla\u015ft\u0131r\u0131r. Kod taban\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, tip sistemi sayesinde kodun farkl\u0131 b\u00f6l\u00fcmleri aras\u0131ndaki etkile\u015fimleri anlamak ve y\u00f6netmek daha kolay hale gelir. Bu, gelecekte a\u00e7\u0131l\u0131\u015f sayfas\u0131n\u0131 bir e-ticaret sitesine veya daha kapsaml\u0131 bir platforma d\u00f6n\u00fc\u015ft\u00fcrmeyi d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczde \u00f6nemli bir avantajd\u0131r.<\/li>\n<\/ul>\n<h3>Proje Yap\u0131land\u0131rmas\u0131 ve Temel Kurulum<\/h3>\n<p>Gatsby ve TypeScript ile bir kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfas\u0131 olu\u015fturmaya ba\u015flamadan \u00f6nce, gerekli ara\u00e7lar\u0131 kurmal\u0131 ve proje yap\u0131s\u0131n\u0131 olu\u015fturmal\u0131y\u0131z.<\/p>\n<h4>\u00d6n Ko\u015fullar<\/h4>\n<p>Ba\u015flamadan \u00f6nce sisteminizde a\u015fa\u011f\u0131daki yaz\u0131l\u0131mlar\u0131n kurulu oldu\u011fundan emin olun:<\/p>\n<ul>\n<li><strong>Node.js:<\/strong> JavaScript \u00e7al\u0131\u015fma zaman\u0131 ortam\u0131. LTS (Uzun S\u00fcreli Destek) s\u00fcr\u00fcm\u00fcn\u00fc kullanman\u0131z \u00f6nerilir.<\/li>\n<li><strong>npm veya Yarn:<\/strong> Node.js paket y\u00f6neticisi. Node.js ile birlikte gelir.<\/li>\n<li><strong>Git:<\/strong> Versiyon kontrol sistemi.<\/li>\n<\/ul>\n<h4>Gatsby CLI Kurulumu<\/h4>\n<p>Gatsby projelerini h\u0131zl\u0131ca olu\u015fturmak ve y\u00f6netmek i\u00e7in Gatsby Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc&#8217;n\u00fc (CLI) global olarak kurman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">npm install -g gatsby-cli<\/code><\/pre>\n<p>veya Yarn kullan\u0131yorsan\u0131z:<\/p>\n<pre><code class=\"language-bash\">yarn global add gatsby-cli<\/code><\/pre>\n<h4>Yeni Gatsby Projesi Olu\u015fturma<\/h4>\n<p>\u015eimdi, <code>gatsby new<\/code> komutunu kullanarak yeni bir Gatsby projesi olu\u015ftural\u0131m. <code>gatsby-starter-default<\/code> \u015fablonu, TypeScript entegrasyonu i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">gatsby new bookstore-landing-page https:\/\/github.com\/gatsbyjs\/gatsby-starter-default<\/code><\/pre>\n<p>Bu komut, <code>bookstore-landing-page<\/code> ad\u0131nda yeni bir dizin olu\u015fturacak ve i\u00e7ine temel Gatsby projesini kuracakt\u0131r. Proje dizinine ge\u00e7i\u015f yap\u0131n:<\/p>\n<pre><code class=\"language-bash\">cd bookstore-landing-page<\/code><\/pre>\n<h4>TypeScript Entegrasyonu<\/h4>\n<p>Gatsby v4 ve sonras\u0131 s\u00fcr\u00fcmler, TypeScript&#8217;i kutudan \u00e7\u0131kar \u00e7\u0131kmaz (out-of-the-box) destekler, yani ekstra bir <code>gatsby-plugin-typescript<\/code> kurman\u0131za gerek kalmaz. Sadece gerekli TypeScript ve tip tan\u0131mlama paketlerini projenize eklemeniz yeterlidir:<\/p>\n<pre><code class=\"language-bash\">npm install --save-dev typescript @types\/react @types\/react-dom @types\/node<\/code><\/pre>\n<p>veya Yarn ile:<\/p>\n<pre><code class=\"language-bash\">yarn add --dev typescript @types\/react @types\/react-dom @types\/node<\/code><\/pre>\n<p>Ard\u0131ndan, TypeScript derleyicisi i\u00e7in yap\u0131land\u0131rma dosyas\u0131 olan <code>tsconfig.json<\/code>&#8216;\u0131 projenizin k\u00f6k dizininde olu\u015fturman\u0131z gerekir. Bu dosya, TypeScript&#8217;in kodunuzu nas\u0131l derlemesi gerekti\u011fini belirtir. A\u015fa\u011f\u0131daki temel yap\u0131land\u0131rma \u00e7o\u011fu proje i\u00e7in yeterli olacakt\u0131r:<\/p>\n<pre><code class=\"language-json\">\/\/ tsconfig.json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"jsx\": \"react\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"baseUrl\": \"src\"\n  },\n  \"include\": [\".\/src\/<em><\/em>\/*\", \".\/gatsby-node.ts\", \".\/gatsby-config.ts\"]\n}\n<\/code><\/pre>\n<p>Bu <code>tsconfig.json<\/code> dosyas\u0131, modern JavaScript \u00f6zelliklerini kullanman\u0131za, React JSX&#8217;i desteklemenize ve kat\u0131 tip denetimi yapman\u0131za olanak tan\u0131r. <code>include<\/code> alan\u0131, TypeScript&#8217;in hangi dosyalar\u0131 derlemesi gerekti\u011fini belirtir.<\/p>\n<p>Son olarak, Gatsby&#8217;nin yap\u0131land\u0131rma dosyalar\u0131n\u0131 da TypeScript ile yazabilirsiniz. <code>gatsby-config.js<\/code> ve <code>gatsby-node.js<\/code> dosyalar\u0131n\u0131 s\u0131ras\u0131yla <code>gatsby-config.ts<\/code> ve <code>gatsby-node.ts<\/code> olarak yeniden adland\u0131r\u0131n. \u0130\u00e7eriklerini uygun TypeScript s\u00f6zdizimine g\u00f6re g\u00fcncelleyin. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-typescript\">\/\/ gatsby-config.ts\nimport type { GatsbyConfig } from \"gatsby\";\n\nconst config: GatsbyConfig = {\n  siteMetadata: {\n    title: <code>Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131<\/code>,\n    description: <code>Yeni \u00e7\u0131kan kitaplar\u0131 ve \u00f6zel kampanyalar\u0131 ke\u015ffedin.<\/code>,\n    author: <code>@gatsbyjs<\/code>,\n    siteUrl: <code>https:\/\/www.yourbookstore.com<\/code>,\n  },\n  plugins: [\n    <code>gatsby-plugin-image<\/code>,\n    <code>gatsby-plugin-sharp<\/code>,\n    <code>gatsby-transformer-sharp<\/code>,\n    {\n      resolve: <code>gatsby-source-filesystem<\/code>,\n      options: {\n        name: <code>images<\/code>,\n        path: <code>${__dirname}\/src\/images<\/code>,\n      },\n    },\n    \/\/ Di\u011fer eklentiler buraya eklenecek\n  ],\n};\n\nexport default config;\n<\/code><\/pre>\n<p>Art\u0131k projeniz hem Gatsby&#8217;nin g\u00fcc\u00fcnden hem de TypeScript&#8217;in tip g\u00fcvenli\u011finden yararlanmaya haz\u0131r. <code>npm run develop<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak geli\u015ftirme sunucusunu ba\u015flatabilir ve her \u015feyin do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olabilirsiniz.<\/p>\n<h3>Veri Y\u00f6netimi: GraphQL ve Statik Veriler<\/h3>\n<p>Bir a\u00e7\u0131l\u0131\u015f sayfas\u0131n\u0131n kalbi, sundu\u011fu i\u00e7eriktir. Kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfam\u0131z i\u00e7in kitap listeleri, kampanyalar, ileti\u015fim bilgileri gibi statik veya yar\u0131-statik verilere ihtiyac\u0131m\u0131z olacak. Gatsby, bu verileri GraphQL arac\u0131l\u0131\u011f\u0131yla \u00e7ekmek i\u00e7in g\u00fc\u00e7l\u00fc bir sistem sunar.<\/p>\n<h4>Landing Page \u0130\u00e7in Veri \u0130htiya\u00e7lar\u0131<\/h4>\n<p>Tipik bir kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfas\u0131 i\u00e7in a\u015fa\u011f\u0131daki veri t\u00fcrlerine ihtiya\u00e7 duyabiliriz:<\/p>\n<ul>\n<li><strong>Kitap Listesi:<\/strong> Her bir kitap i\u00e7in ba\u015fl\u0131k, yazar, a\u00e7\u0131klama, kapak resmi URL&#8217;si, fiyat, kategori vb.<\/li>\n<li><strong>Kampanyalar\/\u00d6ne \u00c7\u0131kanlar:<\/strong> \u00d6zel indirimler veya yeni \u00e7\u0131kanlar hakk\u0131nda bilgiler.<\/li>\n<li><strong>Hakk\u0131m\u0131zda\/\u0130leti\u015fim Bilgileri:<\/strong> Kitap\u00e7\u0131n\u0131n adresi, telefon numaras\u0131, e-posta, sosyal medya linkleri.<\/li>\n<li><strong>Hero B\u00f6l\u00fcm\u00fc \u0130\u00e7eri\u011fi:<\/strong> B\u00fcy\u00fck ba\u015fl\u0131k, slogan, \u00e7a\u011fr\u0131-eylem (Call-to-Action) butonu metni ve linki.<\/li>\n<\/ul>\n<h4>GraphQL&#8217;e Giri\u015f<\/h4>\n<p>Gatsby, uygulaman\u0131z\u0131n veri katman\u0131n\u0131 olu\u015fturmak i\u00e7in GraphQL kullan\u0131r. Bu, farkl\u0131 kaynaklardan gelen verileri tek bir tutarl\u0131 API arac\u0131l\u0131\u011f\u0131yla sorgulaman\u0131za olanak tan\u0131r. Gatsby&#8217;nin yerle\u015fik GraphQL aray\u00fcz\u00fc (http:\/\/localhost:8000\/___graphql adresinde bulunur), veri \u015feman\u0131z\u0131 ke\u015ffetmenize ve sorgular\u0131n\u0131z\u0131 test etmenize yard\u0131mc\u0131 olur.<\/p>\n<h4>Veri Kaynaklar\u0131<\/h4>\n<p>Bir a\u00e7\u0131l\u0131\u015f sayfas\u0131 i\u00e7in genellikle iki ana veri kayna\u011f\u0131 t\u00fcr\u00fc kullan\u0131l\u0131r:<\/p>\n<ol>\n<li><strong>Yerel Markdown\/JSON Dosyalar\u0131:<\/strong> Daha k\u00fc\u00e7\u00fck, statik veya nadiren de\u011fi\u015fen i\u00e7erikler i\u00e7in idealdir. Kitap listeleri, sabit metinler ve ileti\u015fim bilgileri gibi veriler i\u00e7in JSON dosyalar\u0131 veya Markdown dosyalar\u0131 kullan\u0131labilir. Bu y\u00f6ntem, harici bir veritaban\u0131 veya CMS&#8217;ye ihtiya\u00e7 duymadan h\u0131zl\u0131ca i\u00e7erik eklemenizi sa\u011flar.<\/li>\n<li><strong>CMS (Content Management System):<\/strong> \u0130\u00e7eri\u011fin s\u0131k s\u0131k g\u00fcncellenmesi veya daha karma\u015f\u0131k bir yap\u0131ya sahip olmas\u0131 durumunda Contentful, Sanity, Strapi gibi ba\u015fs\u0131z (headless) CMS&#8217;ler tercih edilebilir. Gatsby, bu CMS&#8217;ler i\u00e7in zengin eklenti deste\u011fi sunar. Bu makalede, basitlik ad\u0131na yerel JSON dosyalar\u0131n\u0131 kullanmaya odaklanaca\u011f\u0131z, ancak CMS entegrasyonunun nas\u0131l yap\u0131labilece\u011fine dair k\u0131sa bir bilgi verece\u011fiz.<\/li>\n<\/ol>\n<h4>\u00d6rnek Veri Yap\u0131s\u0131 (JSON)<\/h4>\n<p><code>src\/data<\/code> ad\u0131nda yeni bir dizin olu\u015ftural\u0131m ve i\u00e7ine <code>books.json<\/code> ad\u0131nda bir dosya ekleyelim. Bu dosya, kitaplar\u0131m\u0131z\u0131n verilerini i\u00e7erecek:<\/p>\n<pre><code class=\"language-json\">\/\/ src\/data\/books.json\n[\n  {\n    \"id\": \"1\",\n    \"title\": \"Bilinmeyen Bir Kad\u0131n\u0131n Mektubu\",\n    \"author\": \"Stefan Zweig\",\n    \"description\": \"Tutkulu bir a\u015fk\u0131n, tek tarafl\u0131 bir tutkunun derinliklerini ke\u015ffedin.\",\n    \"image\": \"\/images\/book1.jpg\",\n    \"price\": \"25.00 TL\",\n    \"category\": \"Roman\"\n  },\n  {\n    \"id\": \"2\",\n    \"title\": \"Hayvan \u00c7iftli\u011fi\",\n    \"author\": \"George Orwell\",\n    \"description\": \"Hayvanlar\u0131n isyan\u0131n\u0131 ve iktidar\u0131n yozla\u015fmas\u0131n\u0131 anlatan alegorik bir ba\u015fyap\u0131t.\",\n    \"image\": \"\/images\/book2.jpg\",\n    \"price\": \"30.00 TL\",\n    \"category\": \"Distopya\"\n  },\n  {\n    \"id\": \"3\",\n    \"title\": \"K\u00fc\u00e7\u00fck Prens\",\n    \"author\": \"Antoine de Saint-Exup\u00e9ry\",\n    \"description\": \"Yeti\u015fkinlere \u00e7ocuklu\u011fun ve insanl\u0131\u011f\u0131n anlam\u0131n\u0131 hat\u0131rlatan evrensel bir hikaye.\",\n    \"image\": \"\/images\/book3.jpg\",\n    \"price\": \"20.00 TL\",\n    \"category\": \"Masal\"\n  }\n]\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>image<\/code> alan\u0131 \u015fimdilik sadece bir yol belirtiyor. Gatsby Image eklentisi ile bu resimleri optimize edece\u011fiz.<\/p>\n<h4><code>gatsby-config.ts<\/code>&#8216;de Veri Kaynaklar\u0131n\u0131 Yap\u0131land\u0131rma<\/h4>\n<p>Gatsby&#8217;nin bu JSON dosyas\u0131n\u0131 okuyabilmesi i\u00e7in <code>gatsby-source-filesystem<\/code> ve <code>gatsby-transformer-json<\/code> eklentilerini <code>gatsby-config.ts<\/code> dosyan\u0131za eklemeniz gerekir:<\/p>\n<pre><code class=\"language-typescript\">\/\/ gatsby-config.ts i\u00e7indeki plugins dizisine ekleyin\nplugins: [\n  \/\/ ... di\u011fer eklentiler\n  {\n    resolve: <code>gatsby-source-filesystem<\/code>,\n    options: {\n      name: <code>data<\/code>,\n      path: <code>${__dirname}\/src\/data\/<\/code>, \/\/ JSON dosyalar\u0131n\u0131n bulundu\u011fu dizin\n    },\n  },\n  <code>gatsby-transformer-json<\/code>, \/\/ JSON dosyalar\u0131n\u0131 GraphQL \u015femas\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcr\n  {\n    resolve: <code>gatsby-source-filesystem<\/code>,\n    options: {\n      name: <code>images<\/code>,\n      path: <code>${__dirname}\/src\/images<\/code>, \/\/ Resim dosyalar\u0131n\u0131n bulundu\u011fu dizin\n    },\n  },\n  <code>gatsby-plugin-image<\/code>,\n  <code>gatsby-plugin-sharp<\/code>,\n  <code>gatsby-transformer-sharp<\/code>,\n],\n<\/code><\/pre>\n<p><code>src\/images<\/code> dizinini olu\u015fturmay\u0131 ve \u00f6rnek kitap resimlerini i\u00e7ine yerle\u015ftirmeyi unutmay\u0131n.<\/p>\n<h4>GraphQL Sorgular\u0131<\/h4>\n<p>Verileri React bile\u015fenlerinizde kullanmak i\u00e7in GraphQL sorgular\u0131 yazman\u0131z gerekir. Gatsby&#8217;de iki ana sorgu t\u00fcr\u00fc vard\u0131r:<\/p>\n<ol>\n<li><strong>Sayfa Sorgular\u0131 (Page Queries):<\/strong> Yaln\u0131zca sayfa bile\u015fenlerinde (\u00f6rne\u011fin <code>src\/pages\/index.tsx<\/code>) kullan\u0131labilen sorgulard\u0131r. Veriler, sayfa bile\u015fenine <code>props<\/code> olarak iletilir.<\/li>\n<li><strong><code>useStaticQuery<\/code> Hook&#8217;u:<\/strong> Herhangi bir bile\u015fende (sayfa olmayan bile\u015fenler dahil) kullan\u0131labilen bir React Hook&#8217;udur. K\u00fc\u00e7\u00fck ve statik verileri \u00e7ekmek i\u00e7in idealdir.<\/li>\n<\/ol>\n<p>Kitap listemizi \u00e7ekmek i\u00e7in <code>useStaticQuery<\/code> kullanaca\u011f\u0131z. \u00d6rnek bir sorgu \u015f\u00f6yle g\u00f6r\u00fcnecektir:<\/p>\n<pre><code class=\"language-graphql\">query {\n  allBooksJson {\n    nodes {\n      id\n      title\n      author\n      description\n      image { \/\/ Gatsby Image ile optimize edilmi\u015f resimler i\u00e7in\n        childImageSharp {\n          gatsbyImageData(width: 300, placeholder: BLURRED, formats: [AUTO, WEBP, AVIF])\n        }\n      }\n      price\n      category\n    }\n  }\n}\n<\/code><\/pre>\n<p>Yukar\u0131daki sorguda, <code>image<\/code> alan\u0131 i\u00e7in <code>gatsbyImageData<\/code>&#8216;y\u0131 kullanabilmek i\u00e7in <code>gatsby-plugin-image<\/code>, <code>gatsby-plugin-sharp<\/code> ve <code>gatsby-transformer-sharp<\/code> eklentilerinin d\u00fczg\u00fcn yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olun. <code>books.json<\/code> dosyas\u0131ndaki <code>image<\/code> alan\u0131n\u0131 <code>\/images\/book1.jpg<\/code> gibi bir yolla g\u00fcncellemeniz ve <code>src\/images<\/code> dizininde ilgili resim dosyalar\u0131n\u0131n bulunmas\u0131 gerekir. Gatsby, bu yollar\u0131 otomatik olarak i\u015fleyerek optimize edilmi\u015f resimler olu\u015fturacakt\u0131r.<\/p>\n<h3>Bile\u015fen Olu\u015fturma (React ve TypeScript)<\/h3>\n<p>Gatsby, React \u00fczerine kuruludur, bu da UI&#8217;n\u0131z\u0131 yeniden kullan\u0131labilir bile\u015fenlerle olu\u015fturabilece\u011finiz anlam\u0131na gelir. TypeScript ile bu bile\u015fenleri daha g\u00fcvenli ve bak\u0131m\u0131 kolay hale getirebiliriz.<\/p>\n<h4>Temel Bile\u015fenler<\/h4>\n<p>Bir kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfas\u0131 i\u00e7in a\u015fa\u011f\u0131daki temel bile\u015fenlere ihtiyac\u0131m\u0131z olacak:<\/p>\n<ul>\n<li><strong><code>Layout.tsx<\/code> (src\/components\/Layout.tsx):<\/strong> Sayfan\u0131n genel yap\u0131s\u0131n\u0131 (ba\u015fl\u0131k, alt bilgi, SEO meta etiketleri) tan\u0131mlayan kapsay\u0131c\u0131 bile\u015fen.<\/li>\n<li><strong><code>Header.tsx<\/code> (src\/components\/Header.tsx):<\/strong> Logo, kitap\u00e7\u0131 ad\u0131 ve navigasyon linklerini i\u00e7eren sayfa ba\u015fl\u0131\u011f\u0131.<\/li>\n<li><strong><code>HeroSection.tsx<\/code> (src\/components\/HeroSection.tsx):<\/strong> Sayfan\u0131n en \u00fcst\u00fcnde yer alan, dikkat \u00e7ekici bir ba\u015fl\u0131k, slogan ve \u00e7a\u011fr\u0131-eylem butonu i\u00e7eren b\u00f6l\u00fcm.<\/li>\n<li><strong><code>BookCard.tsx<\/code> (src\/components\/BookCard.tsx):<\/strong> Tek bir kitab\u0131n bilgilerini (resim, ba\u015fl\u0131k, yazar, fiyat) g\u00f6r\u00fcnt\u00fcleyen kart bile\u015feni.<\/li>\n<li><strong><code>BookList.tsx<\/code> (src\/components\/BookList.tsx):<\/strong> <code>BookCard<\/code> bile\u015fenlerini bir liste veya grid d\u00fczeninde sergileyen kapsay\u0131c\u0131 bile\u015fen.<\/li>\n<li><strong><code>CallToAction.tsx<\/code> (src\/components\/CallToAction.tsx):<\/strong> Kullan\u0131c\u0131lar\u0131 belirli bir eyleme (\u00f6rne\u011fin, b\u00fcltene abone olma) te\u015fvik eden bir b\u00f6l\u00fcm.<\/li>\n<li><strong><code>Footer.tsx<\/code> (src\/components\/Footer.tsx):<\/strong> \u0130leti\u015fim bilgileri, sosyal medya linkleri ve telif hakk\u0131 bildirimini i\u00e7eren sayfa alt bilgisi.<\/li>\n<\/ul>\n<h4>TypeScript ile Prop Tan\u0131mlamalar\u0131<\/h4>\n<p>Her React bile\u015feninde, props&#8217;lar\u0131n tiplerini <code>interface<\/code> veya <code>type<\/code> anahtar kelimeleriyle tan\u0131mlayarak tip g\u00fcvenli\u011fini sa\u011flayabiliriz.<\/p>\n<p>\u00d6rnek <code>BookCard.tsx<\/code> bile\u015feni:<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/components\/BookCard.tsx\nimport React from \"react\";\nimport { GatsbyImage, getImage, ImageDataLike } from \"gatsby-plugin-image\";\n\ninterface BookCardProps {\n  id: string;\n  title: string;\n  author: string;\n  description: string;\n  imageData: ImageDataLike; \/\/ Gatsby Image i\u00e7in tip\n  price: string;\n  category: string;\n}\n\nconst BookCard: React.FC<BookCardProps> = ({ title, author, imageData, price }) => {\n  const image = getImage(imageData);\n\n  if (!image) {\n    return null; \/\/ Resim yoksa kart\u0131 g\u00f6sterme\n  }\n\n  return (\n    <div className=\"bg-white rounded-lg shadow-lg overflow-hidden transition-transform transform hover:scale-105\">\n      <GatsbyImage image={image} alt={title} className=\"w-full h-64 object-cover\" \/>\n      <div className=\"p-4\">\n        <h3 className=\"text-xl font-semibold mb-2 text-gray-800\">{title}<\/h3>\n        <p className=\"text-gray-600 text-sm mb-2\">Yazar: {author}<\/p>\n        <p className=\"text-green-600 font-bold text-lg\">{price}<\/p>\n        <button className=\"mt-4 bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded\">\n          \u0130ncele\n        <\/button>\n      <\/div>\n    <\/div>\n  );\n};\n\nexport default BookCard;\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>imageData<\/code> prop&#8217;u i\u00e7in <code>ImageDataLike<\/code> tipini kullanarak Gatsby Image&#8217;\u0131n bekledi\u011fi veri yap\u0131s\u0131n\u0131 belirtiyoruz.<\/p>\n<h4>Styling Se\u00e7enekleri<\/h4>\n<p>Gatsby ile stil eklemek i\u00e7in bir\u00e7ok farkl\u0131 y\u00f6ntem kullanabilirsiniz:<\/p>\n<ul>\n<li><strong>CSS Modules:<\/strong> Bile\u015fenlere \u00f6zg\u00fc stiller olu\u015fturmak i\u00e7in harika bir yoldur. \u00c7ak\u0131\u015fmalar\u0131 \u00f6nler.<\/li>\n<li><strong>Styled Components \/ Emotion:<\/strong> CSS-in-JS k\u00fct\u00fcphaneleri, stilleri do\u011frudan React bile\u015fenlerinizin i\u00e7ine yazman\u0131za olanak tan\u0131r.<\/li>\n<li><strong>Tailwind CSS:<\/strong> Utility-first bir CSS framework&#8217;\u00fcd\u00fcr. H\u0131zl\u0131 prototipleme ve tutarl\u0131 bir tasar\u0131m sistemi olu\u015fturmak i\u00e7in \u00e7ok etkilidir. Bu makaledeki \u00f6rneklerde Tailwind CSS kullan\u0131lm\u0131\u015ft\u0131r. Kurulum i\u00e7in <code>npm install -D tailwindcss postcss autoprefixer<\/code> ve <code>tailwind.config.js<\/code>, <code>postcss.config.js<\/code> dosyalar\u0131n\u0131 yap\u0131land\u0131rman\u0131z gerekir.<\/li>\n<li><strong>Sass\/Less:<\/strong> CSS preprocessor&#8217;lar, daha geli\u015fmi\u015f stil y\u00f6netimi sa\u011flar.<\/li>\n<\/ul>\n<h4>Gatsby Image Optimizasyonu<\/h4>\n<p>Gatsby, g\u00f6rselleri otomatik olarak optimize etmek i\u00e7in <code>gatsby-plugin-image<\/code> eklentisini sunar. Bu eklenti, farkl\u0131 ekran boyutlar\u0131 i\u00e7in duyarl\u0131 g\u00f6rseller olu\u015fturur, lazy loading uygular ve WebP\/AVIF gibi modern formatlar\u0131 destekler.<br \/>\nKullan\u0131m\u0131 i\u00e7in <code>gatsby-config.ts<\/code>&#8216;ye <code>gatsby-plugin-image<\/code>, <code>gatsby-plugin-sharp<\/code> ve <code>gatsby-transformer-sharp<\/code> ekledi\u011finizden emin olun. Ard\u0131ndan, <code>GatsbyImage<\/code> bile\u015fenini kullanabilirsiniz.<br \/>\nYukar\u0131daki <code>BookCard<\/code> \u00f6rne\u011finde, <code>getImage<\/code> ve <code>GatsbyImage<\/code> bile\u015fenlerinin nas\u0131l kullan\u0131ld\u0131\u011f\u0131 g\u00f6sterilmi\u015ftir.<\/p>\n<h3>Sayfa Olu\u015fturma (<code>index.tsx<\/code>)<\/h3>\n<p>A\u00e7\u0131l\u0131\u015f sayfam\u0131z\u0131n ana i\u00e7eri\u011fi <code>src\/pages\/index.tsx<\/code> dosyas\u0131nda yer alacak. Bu dosya, olu\u015fturdu\u011fumuz t\u00fcm bile\u015fenleri bir araya getirerek tam bir sayfa olu\u015fturacak.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/pages\/index.tsx\nimport React from \"react\";\nimport { graphql, useStaticQuery } from \"gatsby\";\nimport { ImageDataLike } from \"gatsby-plugin-image\";\nimport Layout from \"..\/components\/Layout\";\nimport HeroSection from \"..\/components\/HeroSection\";\nimport BookList from \"..\/components\/BookList\";\nimport CallToAction from \"..\/components\/CallToAction\";\nimport Header from \"..\/components\/Header\";\nimport Footer from \"..\/components\/Footer\";\n\n\/\/ Kitap verileri i\u00e7in TypeScript aray\u00fcz\u00fc\ninterface BookNode {\n  id: string;\n  title: string;\n  author: string;\n  description: string;\n  image: {\n    childImageSharp: {\n      gatsbyImageData: ImageDataLike;\n    };\n  };\n  price: string;\n  category: string;\n}\n\n\/\/ GraphQL sorgusundan d\u00f6nen veri yap\u0131s\u0131 i\u00e7in aray\u00fcz\ninterface QueryData {\n  allBooksJson: {\n    nodes: BookNode[];\n  };\n  site: {\n    siteMetadata: {\n      title: string;\n      description: string;\n    };\n  };\n}\n\nconst IndexPage: React.FC = () => {\n  \/\/ useStaticQuery ile GraphQL sorgusunu \u00e7al\u0131\u015ft\u0131r\n  const data = useStaticQuery<QueryData>(graphql<code>\n    query IndexPageQuery {\n      allBooksJson {\n        nodes {\n          id\n          title\n          author\n          description\n          price\n          category\n          image {\n            childImageSharp {\n              gatsbyImageData(width: 300, placeholder: BLURRED, formats: [AUTO, WEBP, AVIF])\n            }\n          }\n        }\n      }\n      site {\n        siteMetadata {\n          title\n          description\n        }\n      }\n    }\n  <\/code>);\n\n  const books = data.allBooksJson.nodes;\n  const siteTitle = data.site.siteMetadata.title;\n  const siteDescription = data.site.siteMetadata.description;\n\n  return (\n    <Layout siteTitle={siteTitle} siteDescription={siteDescription}>\n      <Header siteTitle={siteTitle} \/>\n      <HeroSection\n        title=\"Okuma Tutkunuzu Ke\u015ffedin\"\n        subtitle=\"En Yeni Kitaplar, En \u0130yi Yazarlar Tek Adreste\"\n        buttonText=\"T\u00fcm Kitaplar\u0131 Ke\u015ffet\"\n        buttonLink=\"\/books\" \/\/ Gelecekte bir kitaplar sayfas\u0131 eklenebilir\n      \/>\n      <section className=\"container mx-auto py-12 px-4\">\n        <h2 className=\"text-4xl font-extrabold text-center mb-10 text-gray-800\">\u00d6ne \u00c7\u0131kan Kitaplar<\/h2>\n        {books.length > 0 ? (\n          <BookList books={books} \/>\n        ) : (\n          <p className=\"text-center text-gray-600 text-lg\">\u015eu anda g\u00f6sterilecek kitap bulunmamaktad\u0131r.<\/p>\n        )}\n      <\/section>\n      <CallToAction\n        title=\"B\u00fcltenimize Abone Olun\"\n        description=\"Yeni \u00e7\u0131kan kitaplar, indirimler ve \u00f6zel etkinliklerden ilk siz haberdar olun.\"\n        buttonText=\"Abone Ol\"\n        buttonLink=\"\/subscribe\" \/\/ Bir abone olma sayfas\u0131 veya formuna y\u00f6nlendirebilir\n      \/>\n      <Footer siteTitle={siteTitle} \/>\n    <\/Layout>\n  );\n};\n\nexport default IndexPage;\n<\/code><\/pre>\n<p>Yukar\u0131daki kodda, <code>useStaticQuery<\/code> ile <code>allBooksJson<\/code> verilerini \u00e7ekiyor ve <code>BookList<\/code> bile\u015fenine iletiyoruz. <code>HeroSection<\/code> ve <code>CallToAction<\/code> gibi di\u011fer bile\u015fenler de kendi prop&#8217;lar\u0131 ile dolduruluyor. <code>Layout<\/code>, <code>Header<\/code> ve <code>Footer<\/code> bile\u015fenleri ise sayfan\u0131n genel yap\u0131s\u0131n\u0131 sa\u011fl\u0131yor.<\/p>\n<h3>SEO ve Performans Optimizasyonlar\u0131<\/h3>\n<p>Bir a\u00e7\u0131l\u0131\u015f sayfas\u0131n\u0131n ba\u015far\u0131s\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde arama motoru optimizasyonu (SEO) ve performans\u0131na ba\u011fl\u0131d\u0131r. Gatsby, bu alanlarda do\u011fal avantajlar sunarken, baz\u0131 ek ad\u0131mlar daha iyi sonu\u00e7lar alman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>SEO Optimizasyonlar\u0131<\/h4>\n<ol>\n<li><strong>Meta Etiketler:<\/strong> Gatsby&#8217;de <code>gatsby-plugin-react-helmet<\/code> (veya Gatsby v4+ i\u00e7in yerle\u015fik <code>Head<\/code> API&#8217;si) kullanarak her sayfa i\u00e7in dinamik olarak <code>title<\/code>, <code>description<\/code>, <code>keywords<\/code> gibi meta etiketleri ayarlayabilirsiniz. Bu, arama motorlar\u0131n\u0131n sayfan\u0131z\u0131n i\u00e7eri\u011fini anlamas\u0131na yard\u0131mc\u0131 olur.\n<pre><code class=\"language-typescript\">\/\/ src\/components\/Layout.tsx i\u00e7inde Head bile\u015feni kullan\u0131m\u0131\nimport React from \"react\";\nimport { HeadProps, HeadFC } from \"gatsby\"; \/\/ HeadFC'yi import et\n\ninterface LayoutProps {\n  children: React.ReactNode;\n  siteTitle?: string;\n  siteDescription?: string;\n}\n\nconst Layout: React.FC<LayoutProps> = ({ children }) => {\n  return (\n    <>\n      <main>{children}<\/main>\n    <\/>\n  );\n};\n\nexport default Layout;\n\nexport const Head: HeadFC<any, { siteTitle: string; siteDescription: string }> = ({ data, location }) => {\n  const { siteTitle, siteDescription } = data; \/\/ Bu k\u0131s\u0131m useStaticQuery ile \u00e7ekilmeli veya props olarak gelmeli\n  \/\/ Daha ger\u00e7ek\u00e7i bir senaryo i\u00e7in, siteMetadata'y\u0131 do\u011frudan useStaticQuery ile \u00e7ekelim:\n  const siteData = useStaticQuery(graphql<code>\n    query {\n      site {\n        siteMetadata {\n          title\n          description\n          siteUrl\n        }\n      }\n    }\n  <\/code>);\n  const { title, description, siteUrl } = siteData.site.siteMetadata;\n\n  return (\n    <>\n      <title>{title}<\/title>\n      <meta name=\"description\" content={description} \/>\n      <meta property=\"og:title\" content={title} \/>\n      <meta property=\"og:description\" content={description} \/>\n      <meta property=\"og:url\" content={siteUrl + location.pathname} \/>\n      <meta property=\"og:type\" content=\"website\" \/>\n      {\/<em> Di\u011fer meta etiketleri, \u00f6rne\u011fin og:image, twitter kartlar\u0131 <\/em>\/}\n    <\/>\n  );\n};\n<\/code><\/pre>\n<li><strong>Anlaml\u0131 URL&#8217;ler:<\/strong> Gatsby&#8217;nin dosya tabanl\u0131 y\u00f6nlendirme sistemi, kolayca anlaml\u0131 URL&#8217;ler olu\u015fturman\u0131za olanak tan\u0131r (\u00f6rne\u011fin, <code>\/kitaplar<\/code>, <code>\/hakkimizda<\/code>).<\/li>\n<li><strong>Schema Markup (JSON-LD):<\/strong> Sayfan\u0131z\u0131n i\u00e7eri\u011fini arama motorlar\u0131na daha iyi anlatmak i\u00e7in Schema.org i\u015faretlemesi (\u00f6rne\u011fin <code>Book<\/code>, <code>Product<\/code>, <code>Organization<\/code> \u015femalar\u0131) kullan\u0131n. Bu, zengin sonu\u00e7lar (rich snippets) elde etmenize yard\u0131mc\u0131 olabilir.<\/li>\n<\/ol>\n<h4>Performans Optimizasyonlar\u0131<\/h4>\n<p>Gatsby, varsay\u0131lan olarak bir\u00e7ok performans optimizasyonu uygular, ancak baz\u0131 ek ad\u0131mlar daha da ileri gitmenizi sa\u011flar:<\/p>\n<ol>\n<li><strong>Gatsby Image:<\/strong> Daha \u00f6nce bahsedildi\u011fi gibi, <code>gatsby-plugin-image<\/code> g\u00f6rsellerinizi otomatik olarak optimize eder. Bu, sayfa y\u00fckleme h\u0131z\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/li>\n<li><strong>Code Splitting ve Lazy Loading:<\/strong> Gatsby, her sayfa ve bile\u015fen i\u00e7in kodu otomatik olarak b\u00f6ler ve yaln\u0131zca ihtiya\u00e7 duyuldu\u011funda y\u00fckler. Bu, ba\u015flang\u0131\u00e7 y\u00fckleme boyutunu azalt\u0131r.<\/li>\n<li><strong>Prefetching:<\/strong> Gatsby, kullan\u0131c\u0131n\u0131n t\u0131klayabilece\u011fi ba\u011flant\u0131lar\u0131n kaynaklar\u0131n\u0131 \u00f6nceden getirerek sayfa ge\u00e7i\u015flerini an\u0131nda hissettirir.<\/li>\n<li><strong>Kritik CSS:<\/strong> Gatsby, her sayfa i\u00e7in yaln\u0131zca o sayfan\u0131n g\u00f6r\u00fcn\u00fcm\u00fc i\u00e7in gerekli olan CSS&#8217;i \u00e7\u0131kar\u0131r ve inline olarak ekler. Bu, ilk boyama s\u00fcresini (First Contentful Paint) iyile\u015ftirir.<\/li>\n<li><strong>Font Optimizasyonu:<\/strong> Web fontlar\u0131 kullan\u0131yorsan\u0131z, <code>gatsby-plugin-webfonts<\/code> gibi eklentilerle fontlar\u0131n y\u00fcklenmesini optimize edebilir, FOUT (Flash of Unstyled Text) veya FOIT (Flash of Invisible Text) sorunlar\u0131n\u0131 \u00f6nleyebilirsiniz.<\/li>\n<\/ol>\n<h3>Da\u011f\u0131t\u0131m (Deployment)<\/h3>\n<p>Geli\u015ftirme s\u00fcrecini tamamlad\u0131ktan sonra, a\u00e7\u0131l\u0131\u015f sayfan\u0131z\u0131 yay\u0131nlaman\u0131n zaman\u0131 gelir. Gatsby statik bir site olu\u015fturucu oldu\u011fu i\u00e7in da\u011f\u0131t\u0131m\u0131 olduk\u00e7a basittir.<\/p>\n<h4>\u00dcretim Derlemesi<\/h4>\n<p>\u00d6ncelikle, projenizin \u00fcretim i\u00e7in optimize edilmi\u015f statik dosyalar\u0131n\u0131 olu\u015fturman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">gatsby build<\/code><\/pre>\n<p>Bu komut, projenizin k\u00f6k dizininde <code>public<\/code> ad\u0131nda bir dizin olu\u015fturur. Bu dizin, t\u00fcm optimize edilmi\u015f HTML, CSS, JavaScript ve resim dosyalar\u0131n\u0131 i\u00e7erir. Bu <code>public<\/code> dizini, web sunucunuza y\u00fcklemeniz gereken tek \u015feydir.<\/p>\n<h4>Statik Site Hosting Servisleri<\/h4>\n<p>Gatsby sitelerini bar\u0131nd\u0131rmak i\u00e7in bir\u00e7ok harika ve genellikle \u00fccretsiz se\u00e7enek bulunur:<\/p>\n<ul>\n<li><strong>Netlify:<\/strong> Otomatik da\u011f\u0131t\u0131m, s\u00fcrekli entegrasyon\/s\u00fcrekli teslimat (CI\/CD), global CDN, HTTPS ve form i\u015fleme gibi \u00f6zellikler sunar. GitHub, GitLab veya Bitbucket deponuzu ba\u011flayarak her commit&#8217;te otomatik olarak sitenizi da\u011f\u0131tabilirsiniz.<\/li>\n<li><strong>Vercel:<\/strong> Netlify&#8217;a benzer \u00f6zellikler sunan, geli\u015ftiriciler i\u00e7in optimize edilmi\u015f bir platformdur. React, Next.js ve Gatsby gibi framework&#8217;ler i\u00e7in \u00f6zel destek sa\u011flar.<\/li>\n<li><strong>GitHub Pages:<\/strong> GitHub deponuzdan do\u011frudan statik siteleri bar\u0131nd\u0131rmak i\u00e7in basit bir yoldur. Genellikle daha basit projeler i\u00e7in tercih edilir.<\/li>\n<li><strong>AWS S3 + CloudFront:<\/strong> Daha fazla kontrol ve \u00f6l\u00e7eklenebilirlik isteyenler i\u00e7in Amazon S3&#8217;te statik dosyalar\u0131 bar\u0131nd\u0131r\u0131p CloudFront CDN ile da\u011f\u0131tmak g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/li>\n<li><strong>Firebase Hosting:<\/strong> Google&#8217;\u0131n sundu\u011fu h\u0131zl\u0131 ve g\u00fcvenilir bir hosting \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.<\/li>\n<\/ul>\n<p><strong>Netlify veya Vercel ile Da\u011f\u0131t\u0131m (\u00d6nerilen):<\/strong><br \/>\n1.  <strong>Deponuzu Olu\u015fturun:<\/strong> Projenizi bir Git deposuna (GitHub, GitLab, Bitbucket) y\u00fckleyin.<br \/>\n2.  <strong>Hesap Olu\u015fturun:<\/strong> Netlify veya Vercel&#8217;de bir hesap olu\u015fturun ve Git deponuzla ba\u011flay\u0131n.<br \/>\n3.  <strong>Yeni Site Olu\u015fturun:<\/strong> &#8220;Yeni site olu\u015ftur&#8221; se\u00e7ene\u011fini se\u00e7in ve deponuzu ba\u011flay\u0131n.<br \/>\n4.  <strong>Yap\u0131land\u0131rma Ayarlar\u0131:<\/strong><br \/>\n    *   <strong>Build Command:<\/strong> <code>gatsby build<\/code><br \/>\n    *   <strong>Publish Directory:<\/strong> <code>public\/<\/code><br \/>\n5.  <strong>Da\u011f\u0131t\u0131m\u0131 Ba\u015flat\u0131n:<\/strong> Ayarlar\u0131 onaylad\u0131\u011f\u0131n\u0131zda, Netlify\/Vercel deponuzu klonlayacak, <code>gatsby build<\/code> komutunu \u00e7al\u0131\u015ft\u0131racak ve <code>public<\/code> dizinindeki i\u00e7eri\u011fi canl\u0131ya alacakt\u0131r. Bundan sonra, deponuza her yeni commit g\u00f6nderdi\u011finizde siteniz otomatik olarak yeniden da\u011f\u0131t\u0131lacakt\u0131r.<\/p>\n<p>Bu platformlar, SSL sertifikalar\u0131, \u00f6zel alan adlar\u0131 ve daha fazlas\u0131n\u0131 kolayca yap\u0131land\u0131rman\u0131za olanak tan\u0131r, b\u00f6ylece a\u00e7\u0131l\u0131\u015f sayfan\u0131z profesyonel ve g\u00fcvenli bir \u015fekilde yay\u0131nda olur.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Gatsby ve TypeScript kullanarak modern, y\u00fcksek performansl\u0131 ve SEO dostu bir kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfas\u0131 olu\u015fturman\u0131n t\u00fcm temel ad\u0131mlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. Gatsby&#8217;nin statik site olu\u015fturma yetenekleri sayesinde elde edilen h\u0131z, g\u00fcvenlik ve d\u00fc\u015f\u00fck maliyetli bar\u0131nd\u0131rma avantajlar\u0131, TypeScript&#8217;in sundu\u011fu tip g\u00fcvenli\u011fi ve geli\u015ftirici verimlili\u011fi ile birle\u015fti\u011finde, bu t\u00fcr projeler i\u00e7in son derece g\u00fc\u00e7l\u00fc bir kombinasyon olu\u015fturur.<\/p>\n<p>Ad\u0131m ad\u0131m proje kurulumundan veri y\u00f6netimine (GraphQL ve yerel JSON), yeniden kullan\u0131labilir React bile\u015fenlerinin TypeScript ile nas\u0131l olu\u015fturulaca\u011f\u0131na, SEO ve performans optimizasyonlar\u0131na ve son olarak da\u011f\u0131t\u0131m s\u00fcre\u00e7lerine kadar her \u015feyi ele ald\u0131k. Geli\u015ftirme s\u00fcreci boyunca, kod kalitesini art\u0131ran ve hatalar\u0131 en aza indiren TypeScript&#8217;in faydalar\u0131n\u0131, ayn\u0131 zamanda Gatsby&#8217;nin zengin eklenti ekosistemi ve GraphQL tabanl\u0131 veri katman\u0131n\u0131n esnekli\u011fini deneyimledik.<\/p>\n<p>Olu\u015fturdu\u011fumuz bu a\u00e7\u0131l\u0131\u015f sayfas\u0131, yeni \u00e7\u0131kan kitaplar\u0131 sergilemek, \u00f6zel kampanyalar\u0131 duyurmak veya bir etkinli\u011fi tan\u0131tmak i\u00e7in g\u00fc\u00e7l\u00fc bir pazarlama arac\u0131 olarak hizmet edecektir. Bu temel yap\u0131 \u00fczerine in\u015fa ederek, gelecekte b\u00fclten aboneli\u011fi formlar\u0131, daha detayl\u0131 kitap sayfalar\u0131 veya hatta basit bir e-ticaret entegrasyonu gibi ek \u00f6zellikler ekleyebilirsiniz. Gatsby ve TypeScript&#8217;in bu sinerjisi, hem k\u00fc\u00e7\u00fck pazarlama sayfalar\u0131 hem de b\u00fcy\u00fck \u00f6l\u00e7ekli web uygulamalar\u0131 i\u00e7in sa\u011flam bir temel sunar. Bu rehberin, kendi kitap\u00e7\u0131 a\u00e7\u0131l\u0131\u015f sayfan\u0131z\u0131 olu\u015ftururken size yol g\u00f6stermesini ve modern web geli\u015ftirme d\u00fcnyas\u0131n\u0131n sundu\u011fu imkanlar\u0131 ke\u015ffetmenizi sa\u011flamas\u0131n\u0131 umuyoruz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur?\nGiri\u015f\nDijital \u00e7a\u011fda, her i\u015fletmenin \u00e7evrimi\u00e7i bir va","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-31647","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur?\" \/>\n<meta property=\"og:description\" content=\"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur? Giri\u015f Dijital \u00e7a\u011fda, her i\u015fletmenin \u00e7evrimi\u00e7i bir va\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-12T05:41:05+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur?\",\"datePublished\":\"2025-10-12T05:41:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/\"},\"wordCount\":3310,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/\",\"name\":\"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-12T05:41:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/","og_locale":"tr_TR","og_type":"article","og_title":"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur?","og_description":"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur? Giri\u015f Dijital \u00e7a\u011fda, her i\u015fletmenin \u00e7evrimi\u00e7i bir va","og_url":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-12T05:41:05+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur?","datePublished":"2025-10-12T05:41:05+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/"},"wordCount":3310,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/","url":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/","name":"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-12T05:41:05+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/gatsby-ve-typescript-ile-kitapci-acilis-sayfasi-landing-page-nasil-olusturulur\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Gatsby ve TypeScript ile Kitap\u00e7\u0131 A\u00e7\u0131l\u0131\u015f Sayfas\u0131 (Landing Page) Nas\u0131l Olu\u015fturulur?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31647","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31647"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31647\/revisions"}],"predecessor-version":[{"id":31648,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31647\/revisions\/31648"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}