E-Ticaret Yazılımı: İşletmeniz İçin Kapsamlı 2026 Rehberi

E-Ticaret Yazılımı: 2026 Kapsamlı Rehber
Dijital ekonominin hızla büyüdüğü günümüzde, işletmelerin online varlıklarını güçlendirmeleri için doğru e-ticaret altyapısına sahip olmaları hayati önem taşıyor. İzmir merkezli Noves Digital olarak, 150'den fazla projede edindiğimiz deneyimle bu kapsamlı rehberi hazırladık.
1. E-Ticaret Yazılımının Önemi
Dijital ticaretin temel taşı olan yazılım altyapısı, işletmelerin sadece ürün satmasını değil, aynı zamanda marka değerini inşa etmesini sağlar. Modern e-ticaret platformları, 7/24 açık bir mağaza işlevi görerek küresel pazarlara erişim imkanı sunar. Doğru yazılım ajansı ile çalışmak, rekabet avantajı elde etmenin ilk adımıdır.
Teknik altyapısı güçlü e-ticaret siteleri müşteri sadakatini %60 artırabiliyor. Hızlı ödeme süreçleri, kişiselleştirilmiş ürün önerileri ve sorunsuz kullanıcı deneyimi, dönüşüm oranlarını doğrudan etkileyen faktörlerdir. Özellikle mobil kullanımın arttığı günümüzde, responsive tasarım ve performans optimizasyonu kritik öneme sahiptir. İzmir yazılım ajansı ekosistemindeki uzmanlığımız, yerel işletmelerin uluslararası standartlarda dijital çözümler üretmesini sağlıyor.
2. Hazır Yazılım vs. Özel Geliştirme
E-ticaret yolculuğuna başlarken işletmeler karşılaştığı ilk kritik karar, hazır platformları mı yoksa özel yazılım çözümlerini mi tercih edeceğidir. Shopify, WooCommerce gibi paket çözümler hızlı başlangıç ve düşük ilk maliyet sunar. Ancak işletme büyüdükçe özelleştirme sınırlamaları ve yüksek işlem ücretleri dezavantaj haline gelir.
Özel yazılım geliştirme ise başlangıçta daha yüksek yatırım gerektirse de uzun vadede tam esneklik ve maliyet kontrolü sağlar. Noves Digital olarak React ve Node.js ile geliştirdiğimiz headless commerce çözümleri, işletmelere özgün marka deneyimi sunma imkanı tanır. Özellikle karmaşık entegrasyon gereksinimleri olan B2B firmaları ve büyük ölçekli perakendeciler için özel geliştirme stratejik bir tercih olmalıdır. Doğru yazılım ajansı seçimi, bu kararın başarısını belirleyen en önemli faktördür.
2.1. Headless Commerce Mimarisi
Headless commerce, ön yüz (frontend) ve arka yüz (backend) katmanlarının birbirinden bağımsız çalıştığı modern bir yaklaşımdır. Bu mimari, işletmelere çok kanallı deneyim sunma esnekliği sağlar.
// Next.js ile basit bir headless commerce API entegrasyonu
import { useEffect, useState } from 'react';
export default function ProductList() {
const [products, setProducts] = useState([]);
useEffect(() => {
async function fetchProducts() {
const response = await fetch('https://api.shopify.com/products.json', {
headers: {
'X-Shopify-Access-Token': process.env.SHOPIFY_TOKEN
}
});
const data = await response.json();
setProducts(data.products);
}
fetchProducts();
}, []);
return (
<div className="product-grid">
{products.map(product => (
<div key={product.id} className="product-card">
<img src={product.images[0]?.src} alt={product.title} />
<h3>{product.title}</h3>
<p>{product.variants[0]?.price} TL</p>
</div>
))}
</div>
);
}
2.2. Özel Geliştirme Maliyet Analizi
Özel e-ticaret yazılımı geliştirme maliyetleri proje kapsamına göre değişir. Küçük ölçekli bir MVP (Minimum Viable Product) 50.000-100.000 TL aralığında başlayabilirken, kurumsal düzeyde çözümler 500.000 TL ve üzeri yatırım gerektirebilir. Ancak uzun vadede işlem ücreti maliyetleri düşünüldüğünde, büyük hacimli satış yapan işletmeler için özel geliştirme daha ekonomik olabilir.
3. Temel Özellikler ve Modüller
Başarılı bir e-ticaret platformunun temelini sağlam modüller oluşturur. Ürün yönetimi sistemi, çoklu varyasyon desteği, stok takibi ve otomatik kategori güncellemeleri ile operasyonel verimliliği artırır. Gelişmiş filtreleme ve arama fonksiyonları, kullanıcıların istedikleri ürüne hızla ulaşmasını sağlar.
Sipariş ve ödeme sistemleri entegrasyonunda güvenlik ve çeşitlilik kritiktir. Kredi kartı, havale, kapıda ödeme ve dijital cüzdan seçenekleri sunmak, müşteri kaybını önler. İzmir yazılım ajansı Noves Digital olarak, iyzico ve Stripe entegrasyonlarında uzmanlaştık. Kargo ve lojistik entegrasyonu ise sipariş sonrası müşteri memnuniyetini belirleyen unsurdur. Otomatik kargo etiketi oluşturma, anlık takip ve çoklu kargo firması desteği ile lojistik süreçler optimize edilebilir.
3.1. Ürün Yönetim Sistemi
Modern ürün yönetim sistemleri, çoklu varyasyon, stok takibi ve otomatik fiyatlandırma gibi özellikleri içermelidir. Aşağıda Node.js ile basit bir ürün CRUD API örneği bulunmaktadır:
// Express.js ile ürün yönetimi API'si
const express = require('express');
const mongoose = require('mongoose');
const app = express();
app.use(express.json());
// Ürün şeması
const productSchema = new mongoose.Schema({
name: { type: String, required: true },
description: String,
price: { type: Number, required: true },
stock: { type: Number, default: 0 },
variants: [{
size: String,
color: String,
sku: String,
stock: Number
}],
categories: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Category' }],
images: [String],
isActive: { type: Boolean, default: true }
});
const Product = mongoose.model('Product', productSchema);
// Ürün oluşturma
app.post('/api/products', async (req, res) => {
try {
const product = new Product(req.body);
await product.save();
res.status(201).json(product);
} catch (error) {
res.status(400).json({ error: error.message });
}
});
// Ürün listeleme (filtreleme ve sayfalama ile)
app.get('/api/products', async (req, res) => {
const { page = 1, limit = 20, category, minPrice, maxPrice, search } = req.query;
const filter = { isActive: true };
if (category) filter.categories = category;
if (minPrice || maxPrice) {
filter.price = {};
if (minPrice) filter.price.$gte = Number(minPrice);
if (maxPrice) filter.price.$lte = Number(maxPrice);
}
if (search) {
filter.$or = [
{ name: { $regex: search, $options: 'i' } },
{ description: { $regex: search, $options: 'i' } }
];
}
const products = await Product.find(filter)
.populate('categories')
.limit(limit * 1)
.skip((page - 1) * limit);
const count = await Product.countDocuments(filter);
res.json({
products,
totalPages: Math.ceil(count / limit),
currentPage: page,
total: count
});
});
// Stok güncelleme
app.patch('/api/products/:id/stock', async (req, res) => {
const { quantity, operation } = req.body; // operation: 'add' | 'subtract'
const product = await Product.findById(req.params.id);
if (!product) return res.status(404).json({ error: 'Ürün bulunamadı' });
const variant = product.variants.id(req.body.variantId);
if (variant) {
variant.stock += operation === 'add' ? quantity : -quantity;
} else {
product.stock += operation === 'add' ? quantity : -quantity;
}
await product.save();
res.json(product);
});
3.2. Sepet ve Ödeme Entegrasyonu
Sepet yönetimi ve ödeme süreçleri, e-ticaretin en kritik teknik bileşenlerindendir. Redis ile sepet yönetimi ve Stripe ile ödeme entegrasyonu örneği:
// Redis ile sepet yönetimi
const redis = require('redis');
const client = redis.createClient();
class CartService {
async addToCart(userId, productId, quantity, variantId = null) {
const cartKey = `cart:${userId}`;
const itemKey = variantId ? `${productId}:${variantId}` : productId;
// Mevcut miktarı kontrol et
const currentQty = await client.hGet(cartKey, itemKey);
const newQty = (parseInt(currentQty) || 0) + quantity;
await client.hSet(cartKey, itemKey, newQty.toString());
await client.expire(cartKey, 2592000); // 30 gün TTL
return this.getCart(userId);
}
async getCart(userId) {
const cartKey = `cart:${userId}`;
const items = await client.hGetAll(cartKey);
// Ürün detaylarını veritabanından çek
const cartItems = await Promise.all(
Object.entries(items).map(async ([key, qty]) => {
const [productId, variantId] = key.split(':');
const product = await Product.findById(productId);
return {
product,
quantity: parseInt(qty),
variantId
};
})
);
return cartItems;
}
async clearCart(userId) {
await client.del(`cart:${userId}`);
}
}
// Stripe ödeme entegrasyonu
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
app.post('/api/checkout', async (req, res) => {
try {
const { items, customerEmail, shippingAddress } = req.body;
// Sepet toplamını hesapla
const lineItems = items.map(item => ({
price_data: {
currency: 'try',
product_data: {
name: item.product.name,
images: item.product.images
},
unit_amount: item.product.price * 100 // kuruş cinsinden
},
quantity: item.quantity
}));
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: lineItems,
mode: 'payment',
success_url: `${process.env.FRONTEND_URL}/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${process.env.FRONTEND_URL}/cart`,
customer_email: customerEmail,
metadata: {
userId: req.user.id,
shippingAddress: JSON.stringify(shippingAddress)
}
});
res.json({ sessionId: session.id, url: session.url });
} catch (error) {
res.status(500).json({ error: 'Ödeme başlatılamadı' });
}
});
3.3. Kargo Entegrasyonu
Otomatik kargo süreçleri, müşteri memnuniyetini doğrudan etkiler. Aşağıda basit bir kargo API entegrasyonu örneği verilmiştir:
// Kargo firması entegrasyonu (örnek: Yurtiçi Kargo)
class CargoService {
constructor(apiKey, apiSecret) {
this.apiKey = apiKey;
this.apiSecret = apiSecret;
this.baseURL = 'https://webservices.yurticikargo.com/api';
}
async createShipment(orderData) {
const payload = {
cargoKey: orderData.orderId,
invoiceKey: orderData.invoiceNumber,
receiverCustName: orderData.customerName,
receiverAddress: orderData.address,
receiverPhone1: orderData.phone,
cityName: orderData.city,
townName: orderData.district,
weight: orderData.weight,
cargoCount: orderData.pieceCount,
description: orderData.note
};
const response = await fetch(`${this.baseURL}/createShipment`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${this.getToken()}`
},
body: JSON.stringify(payload)
});
return response.json();
}
async trackShipment(trackingNumber) {
const response = await fetch(
`${this.baseURL}/tracking?trackingNumber=${trackingNumber}`,
{ headers: { 'Authorization': `Bearer ${this.getToken()}` } }
);
return response.json();
}
async printLabel(trackingNumber) {
const response = await fetch(
`${this.baseURL}/printLabel?trackingNumber=${trackingNumber}`,
{ headers: { 'Authorization': `Bearer ${this.getToken()}` } }
);
return response.blob();
}
}
4. Kullanıcı Deneyimi ve Arayüz Tasarımı
E-ticaret sitenizin yüzü olan kullanıcı arayüzü, satış dönüşümünü doğrudan etkiler. Mobil uyumluluk artık lüks değil zorunluluktur; trafiğin %70'inden fazlasının mobil cihazlardan geldiği göz önüne alındığında, mobile-first tasarım yaklaşımı benimsenmelidir. Touch-friendly navigasyon, kolay erişilebilir butonlar ve optimize edilmiş görseller temel gereksinimlerdir.
Hız ve performans optimizasyonu, kullanıcı deneyiminin teknik boyutunu oluşturur. Core Web Vitals metriklerine uygun geliştirme, sayfa yükleme sürelerinin 3 saniyenin altında tutulmasını sağlar. Noves Digital olarak Next.js ile sunduğumuz SSR ve SSG çözümleri, hem SEO performansını hem de kullanıcı memnuniyetini maksimize eder. Lazy loading, görsel optimizasyon ve CDN kullanımı ile global erişimde bile yüksek performans garanti edilir. Profesyonel bir yazılım ajansı ile çalışmak, bu teknik detayların eksiksiz uygulanmasını sağlar.
4.1. Responsive Tasarım İlkeleri
Modern e-ticaret siteleri için responsive tasarım standartları:
/* Modern CSS Grid ile ürün kartı düzeni */
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1.5rem;
padding: 2rem;
}
.product-card {
display: flex;
flex-direction: column;
background: #fff;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
transition: transform 0.2s, box-shadow 0.2s;
}
.product-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0,0,0,0.15);
}
.product-image {
width: 100%;
aspect-ratio: 1 / 1;
object-fit: cover;
}
.product-info {
padding: 1rem;
flex: 1;
display: flex;
flex-direction: column;
}
/* Mobil optimizasyon */
@media (max-width: 768px) {
.product-grid {
grid-template-columns: repeat(2, 1fr);
gap: 0.75rem;
padding: 1rem;
}
.product-card h3 {
font-size: 0.875rem;
}
.add-to-cart-btn {
width: 100%;
padding: 0.75rem;
}
}
4.2. Performans Optimizasyonu
Core Web Vitals metriklerini optimize etmek için uygulanan teknikler:
// Next.js ile görsel optimizasyonu
import Image from 'next/image';
export default function OptimizedProductCard({ product }) {
return (
<div className="product-card">
<Image
src={product.image}
alt={product.name}
width={400}
height={400}
priority={product.featured} // Önemli görseller için öncelikli yükleme
placeholder="blur"
blurDataURL={product.blurDataUrl}
sizes="(max-width: 768px) 50vw, (max-width: 1200px) 33vw, 25vw"
/>
<h3>{product.name}</h3>
</div>
);
}
// Lazy loading ile bileşen yükleme
import { lazy, Suspense } from 'react';
const ProductReviews = lazy(() => import('./ProductReviews'));
const RelatedProducts = lazy(() => import('./RelatedProducts'));
export default function ProductPage() {
return (
<div>
<ProductDetails />
<Suspense fallback={<Skeleton height={200} />}>
<ProductReviews />
</Suspense>
<Suspense fallback={<Skeleton height={300} />}>
<RelatedProducts />
</Suspense>
</div>
);
}
// Service Worker ile offline desteği
// sw.js
const CACHE_NAME = 'ecommerce-v1';
const urlsToCache = [
'/',
'/styles.css',
'/app.js',
'/api/categories'
];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(urlsToCache))
);
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(response => {
if (response) return response;
return fetch(event.request);
})
);
});
5. Güvenlik ve Veri Koruma
E-ticaret platformlarında güvenlik, müşteri güveninin temelini oluşturur. SSL sertifikası, tüm veri iletişiminin şifrelenmesini sağlayarak ortadaki adam saldırılarını önler. AES-256 şifreleme, güvenlik duvarları ve DDoS koruması gibi protokoller, platformunuzu tehditlere karşı korur. Ödeme verilerinin PCI DSS standartlarına uygun işlenmesi yasal zorunluluktur.
Veri koruma regülasyonlarına uyum ise sadece yasal bir gereklilik değil, marka itibarı için de kritiktir. KVKK ve GDPR kapsamında kullanıcıların veri işleme izinlerinin yönetimi, unutma hakkının sağlanması ve veri ihlali bildirim prosedürlerinin oluşturulması gerekir. Noves Digital olarak geliştirdiğimiz tüm e-ticaret çözümlerinde privacy-by-design prensibini benimsiyor, veri güvenliğini mimarinin merkezine yerleştiriyoruz. İzmir yazılım ajansı uzmanlığımızla, yerel işletmelerin uluslararası güvenlik standartlarına uyumunu sağlıyoruz.
5.1. Kimlik Doğrulama ve Yetkilendirme
Güvenli kullanıcı yönetimi için JWT tabanlı kimlik doğrulama:
// JWT kimlik doğrulama middleware'i
const jwt = require('jsonwebtoken');
const bcrypt = require('bcrypt');
class AuthService {
async register(userData) {
const hashedPassword = await bcrypt.hash(userData.password, 12);
const user = new User({
email: userData.email,
password: hashedPassword,
name: userData.name,
consent: {
marketing: userData.marketingConsent,
terms: userData.termsAccepted,
date: new Date()
}
});
await user.save();
return this.generateTokens(user);
}
async login(email, password) {
const user = await User.findOne({ email }).select('+password');
if (!user) throw new Error('Geçersiz kimlik bilgileri');
const isValid = await bcrypt.compare(password, user.password);
if (!isValid) throw new Error('Geçersiz kimlik bilgileri');
// Başarısız giriş denemelerini sıfırla
user.failedLogins = 0;
await user.save();
return this.generateTokens(user);
}
generateTokens(user) {
const accessToken = jwt.sign(
{ userId: user._id, role: user.role },
process.env.JWT_SECRET,
{ expiresIn: '15m' }
);
const refreshToken = jwt.sign(
{ userId: user._id, type: 'refresh' },
process.env.JWT_REFRESH_SECRET,
{ expiresIn: '7d' }
);
return { accessToken, refreshToken };
}
}
// Korunan route middleware'i
const authenticate = (req, res, next) => {
const token = req.headers.authorization?.split(' ')[1];
if (!token) {
return res.status(401).json({ error: 'Yetkilendirme gerekli' });
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
next();
} catch (error) {
res.status(401).json({ error: 'Geçersiz veya süresi dolmuş token' });
}
};
// Rol bazlı yetkilendirme
const authorize = (...roles) => {
return (req, res, next) => {
if (!roles.includes(req.user.role)) {
return res.status(403).json({ error: 'Bu işlem için yetkiniz yok' });
}
next();
};
};
// Kullanım örneği
app.delete('/api/products/:id', authenticate, authorize('admin'), async (req, res) => {
await Product.findByIdAndDelete(req.params.id);
res.json({ message: 'Ürün silindi' });
});
5.2. Veri Şifreleme ve Güvenlik
Hassas verilerin şifrelenmesi ve güvenli saklanması:
const crypto = require('crypto');
class EncryptionService {
constructor(key) {
this.algorithm = 'aes-256-gcm';
this.key = crypto.scryptSync(key, 'salt', 32);
}
encrypt(text) {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv(this.algorithm, this.key, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
const authTag = cipher.getAuthTag();
return {
encrypted,
iv: iv.toString('hex'),
authTag: authTag.toString('hex')
};
}
decrypt(encryptedData) {
const decipher = crypto.createDecipheriv(
this.algorithm,
this.key,
Buffer.from(encryptedData.iv, 'hex')
);
decipher.setAuthTag(Buffer.from(encryptedData.authTag, 'hex'));
let decrypted = decipher.update(encryptedData.encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
}
// KVKK uyumlu veri anonimleştirme
function anonymizeUserData(user) {
return {
...user.toObject(),
email: `anon_${user._id}@deleted.com`,
name: 'Silinmiş Kullanıcı',
phone: null,
address: null,
deletedAt: new Date(),
isAnonymized: true
};
}
6. SEO ve Dijital Pazarlama Entegrasyonu
E-ticaret sitenizin görünürlüğü, organik trafik ve satışların temel kaynağıdır. Arama motoru optimizasyonu teknik altyapıdan başlar; schema.org markup'ları, XML sitemap'ler, canonical tag'ler ve meta description yönetimi entegre edilmelidir. URL yapısı, breadcrumbs ve site içi linkleme stratejisi SEO'nun mimari boyutunu oluşturur.
Sosyal medya ve reklam entegrasyonu, pazarlama otomasyonunun kalbidir. Facebook Pixel, Google Ads conversion tracking ve remarketing kodlarının sorunsuz çalışması, kampanya verimliliğini artırır. Noves Digital olarak geliştirdiğimiz admin panellerinde, pazarlama tag'lerinin kod bilgisi gerektirmeden yönetilmesini sağlıyoruz. E-posta pazarlama entegrasyonları, terk edilmiş sepet bildirimleri ve kişiselleştirilmiş kampanyalar ile müşteri yaşam boyu değerini artırıyoruz. Doğru yazılım ajansı seçimi, dijital pazarlama stratejinizin teknik altyapıyla uyumunu garanti eder.
6.1. Teknik SEO Uygulamaları
Next.js ile Teknik SEO dostu sayfa yapısı:
// Next.js SEO bileşeni
import Head from 'next/head';
export default function ProductSEO({ product }) {
const structuredData = {
"@context": "https://schema.org",
"@type": "Product",
"name": product.name,
"image": product.images,
"description": product.description,
"sku": product.sku,
"brand": {
"@type": "Brand",
"name": product.brand
},
"offers": {
"@type": "Offer",
"url": `https://site.com/urun/${product.slug}`,
"priceCurrency": "TRY",
"price": product.price,
"availability": product.stock > 0
? "https://schema.org/InStock"
: "https://schema.org/OutOfStock"
},
"aggregateRating": product.reviews ? {
"@type": "AggregateRating",
"ratingValue": product.averageRating,
"reviewCount": product.reviewCount
} : undefined
};
return (
<Head>
<title>{`${product.name} | Marka Adı`}</title>
<meta name="description" content={product.metaDescription || product.description.substring(0, 160)} />
<meta name="robots" content="index, follow" />
<link rel="canonical" href={`https://site.com/urun/${product.slug}`} />
{/* Open Graph */}
<meta property="og:title" content={product.name} />
<meta property="og:description" content={product.description} />
<meta property="og:image" content={product.images[0]} />
<meta property="og:type" content="product" />
<meta property="og:price:amount" content={product.price} />
<meta property="og:price:currency" content="TRY" />
{/* Twitter Card */}
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={product.name} />
<meta name="twitter:image" content={product.images[0]} />
{/* Structured Data */}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}
/>
</Head>
);
}
// Dinamik XML Sitemap
export async function getServerSideProps({ res }) {
const products = await Product.find({ isActive: true });
const categories = await Category.find();
const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://site.com</loc>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
${categories.map(cat => `
<url>
<loc>https://site.com/kategori/${cat.slug}</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
`).join('')}
${products.map(prod => `
<url>
<loc>https://site.com/urun/${prod.slug}</loc>
<lastmod>${prod.updatedAt.toISOString()}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
`).join('')}
</urlset>`;
res.setHeader('Content-Type', 'text/xml');
res.write(sitemap);
res.end();
return { props: {} };
}
6.2. Analitik ve Dönüşüm Takibi
Google Analytics 4 ve reklam piksel entegrasyonu:
// Google Analytics 4 event tracking
class AnalyticsService {
constructor(trackingId) {
this.trackingId = trackingId;
this.initGA();
}
initGA() {
// GA4 initialization
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', this.trackingId, {
send_page_view: false // Manuel kontrol
});
}
trackPageView(path, title) {
gtag('event', 'page_view', {
page_location: window.location.href,
page_path: path,
page_title: title
});
}
trackEvent(eventName, params = {}) {
gtag('event', eventName, params);
}
trackEcommerce(eventName, items, transactionData = {}) {
gtag('event', eventName, {
currency: 'TRY',
value: transactionData.value,
transaction_id: transactionData.id,
items: items.map(item => ({
item_id: item.sku,
item_name: item.name,
item_category: item.category,
price: item.price,
quantity: item.quantity
}))
});
}
trackAddToCart(product, quantity) {
this.trackEcommerce('add_to_cart', [{
...product,
quantity
}]);
}
trackPurchase(order) {
this.trackEcommerce('purchase', order.items, {
id: order.id,
value: order.total,
tax: order.tax,
shipping: order.shipping
});
}
}
// Facebook Pixel entegrasyonu
class FacebookPixel {
constructor(pixelId) {
this.pixelId = pixelId;
this.init();
}
init() {
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window,document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', this.pixelId);
fbq('track', 'PageView');
}
track(event, data = {}) {
fbq('track', event, {
...data,
currency: 'TRY'
});
}
}
7. Ölçeklenebilirlik ve Entegrasyonlar
İşletmeniz büyüdükçe e-ticaret platformunuzun da büyümesi gerekir. ERP, CRM ve muhasebe sistemleri entegrasyonu, operasyonel verimliliği artırır ve manuel hataları azaltır. SAP, Microsoft Dynamics, Salesforce gibi kurumsal sistemlerle iki yönlü veri akışı, stok senkronizasyonu ve müşteri verilerinin merkezi yönetimini sağlar.
API kullanımı ve üçüncü taraf entegrasyonlar, modern e-ticaret ekosisteminin yapı taşıdır. RESTful API ve GraphQL çözümleri ile pazaryeri entegrasyonları (Trendyol, Amazon, Hepsiburada), dropshipping sistemleri ve özel iş ortağı çözümleri hayata geçirilebilir. Noves Digital olarak Node.js ve Python ile geliştirdiğimiz mikroservis mimarileri, yüksek trafikli dönemlerde bile %99.9 uptime garantisi sunar. İzmir yazılım ajansı ekibimiz, ölçeklenebilir altyapı tasarımında yerel işletmelere global standartlarda çözümler üretiyor.
7.1. Mikroservis Mimarisi
Ölçeklenebilir e-ticaret altyapısı için mikroservis örneği:
// API Gateway (Express.js)
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
const services = {
products: 'http://product-service:3001',
orders: 'http://order-service:3002',
users: 'http://user-service:3003',
payments: 'http://payment-service:3004',
notifications: 'http://notification-service:3005'
};
// Rate limiting
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 dakika
max: 100 // her IP için 100 istek
});
app.use(limiter);
// Service routing
Object.entries(services).forEach(([path, target]) => {
app.use(`/api/${path}`, createProxyMiddleware({
target,
changeOrigin: true,
pathRewrite: { [`^/api/${path}`]: '' }
}));
});
// Health check
app.get('/health', async (req, res) => {
const checks = await Promise.all(
Object.entries(services).map(async ([name, url]) => {
try {
await fetch(`${url}/health`);
return { name, status: 'healthy' };
} catch {
return { name, status: 'unhealthy' };
}
})
);
const allHealthy = checks.every(c => c.status === 'healthy');
res.status(allHealthy ? 200 : 503).json({ services: checks });
});
// Order Service (örnek mikroservis)
const amqp = require('amqplib');
class OrderService {
constructor() {
this.channel = null;
this.initQueue();
}
async initQueue() {
const connection = await amqp.connect(process.env.RABBITMQ_URL);
this.channel = await connection.createChannel();
await this.channel.assertQueue('order_created', { durable: true });
await this.channel.assertQueue('payment_processed', { durable: true });
}
async createOrder(orderData) {
const order = await Order.create(orderData);
// Stok kontrolü
await this.checkStock(order.items);
// Event yayınla
this.channel.sendToQueue('order_created',
Buffer.from(JSON.stringify({
orderId: order._id,
userId: order.userId,
items: order.items,
total: order.total
})),
{ persistent: true }
);
return order;
}
async processPayment(orderId, paymentData) {
// Ödeme işlemi...
this.channel.sendToQueue('payment_processed',
Buffer.from(JSON.stringify({
orderId,
status: 'success',
transactionId: paymentData.transactionId
}))
);
}
}
// Notification Consumer
async function startNotificationConsumer() {
const connection = await amqp.connect(process.env.RABBITMQ_URL);
const channel = await connection.createChannel();
await channel.consume('order_created', async (msg) => {
const data = JSON.parse(msg.content.toString());
// E-posta bildirimi gönder
await sendEmail(data.userId, 'Siparişiniz Alındı',
`Sipariş #${data.orderId} başarıyla oluşturuldu.`);
// SMS bildirimi
await sendSMS(data.userId, `Siparişiniz alındı: #${data.orderId}`);
channel.ack(msg);
});
}
7.2. Pazaryeri Entegrasyonu
Trendyol ve benzeri pazaryerleri için entegrasyon örneği:
class TrendyolIntegration {
constructor(apiKey, apiSecret, supplierId) {
this.apiKey = apiKey;
this.apiSecret = apiSecret;
this.supplierId = supplierId;
this.baseURL = 'https://api.trendyol.com/sapigw';
}
getAuthHeader() {
const auth = Buffer.from(`${this.apiKey}:${this.apiSecret}`).toString('base64');
return `Basic ${auth}`;
}
async syncProducts(products) {
const payload = {
items: products.map(p => ({
barcode: p.barcode,
title: p.name,
productMainId: p.sku,
brandId: p.brandId,
categoryId: p.categoryId,
stockQuantity: p.stock,
dimensionalWeight: p.weight,
description: p.description,
currencyType: 'TRY',
listPrice: p.price,
salePrice: p.discountedPrice || p.price,
vatRate: p.vatRate,
images: p.images,
attributes: p.attributes
}))
};
const response = await fetch(
`${this.baseURL}/suppliers/${this.supplierId}/products`, {
method: 'POST',
headers: {
'Authorization': this.getAuthHeader(),
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
}
);
return response.json();
}
async getOrders(startDate, endDate) {
const params = new URLSearchParams({
startDate: startDate.toISOString(),
endDate: endDate.toISOString(),
size: '200'
});
const response = await fetch(
`${this.baseURL}/suppliers/${this.supplierId}/orders?${params}`, {
headers: { 'Authorization': this.getAuthHeader() }
}
);
return response.json();
}
async updateTracking(orderNumber, trackingNumber, cargoProvider) {
const payload = {
lines: [{
lineId: orderNumber,
quantity: 1
}],
params: {
trackingNumber,
cargoProviderName: cargoProvider
}
};
return fetch(
`${this.baseURL}/suppliers/${this.supplierId}/shipment-packages`, {
method: 'PUT',
headers: {
'Authorization': this.getAuthHeader(),
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
}
);
}
}
8. Gelecek Trendleri
E-ticaretin geleceği yapay zeka ve kişiselleştirme teknolojileri şekillendiriyor. Yapay zeka destekli alışveriş deneyimi, kullanıcı davranışlarını analiz ederek dinamik fiyatlandırma, stok optimizasyonu ve talep tahmini sunar. Görsel arama ve sesli komut entegrasyonları, alışverişi daha doğal hale getiriyor.
Chatbotlar ve kişiselleştirilmiş öneriler, müşteri hizmetlerini 24/7 erişilebilir kılıyor. NLP tabanlı chatbot'lar sipariş takibi, iade süreçleri ve ürün önerilerinde insan müdahalesini minimize eder. Omnichannel çözümler ise fiziksel mağaza, web ve mobil deneyimlerin bütünleşik yönetimini sağlar. Noves Digital olarak TensorFlow ve PyTorch ile geliştirdiğimiz AI modelleri, işletmelere bu gelecek teknolojilerini bugünden sunuyoruz. Yazılım ajansı olarak misyonumuz, müşterilerimizi teknolojinin ön saflarında tutmaktır.
8.1. Yapay Zeka ile Kişiselleştirme
Kullanıcı davranışlarına göre dinamik ürün önerileri:
# Python ile basit öneri sistemi (collaborative filtering)
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
class RecommendationEngine:
def __init__(self):
self.user_item_matrix = None
self.user_similarity = None
self.item_similarity = None
def fit(self, interactions_df):
"""
interactions_df: user_id, product_id, rating şeklinde DataFrame
"""
# User-Item matrisi oluştur
self.user_item_matrix = interactions_df.pivot_table(
index='user_id',
columns='product_id',
values='rating',
fill_value=0
)
# Kullanıcı benzerliği
self.user_similarity = cosine_similarity(self.user_item_matrix)
# Ürün benzerliği
self.item_similarity = cosine_similarity(self.user_item_matrix.T)
def get_user_recommendations(self, user_id, n=10):
user_idx = self.user_item_matrix.index.get_loc(user_id)
# Benzer kullanıcıları bul
similar_users = self.user_similarity[user_idx].argsort()[::-1][1:11]
# Benzer kullanıcıların beğendiği ürünleri ağırlıklı ortalama ile hesapla
recommendations = {}
for similar_user in similar_users:
similarity_score = self.user_similarity[user_idx][similar_user]
user_ratings = self.user_item_matrix.iloc[similar_user]
for product_id, rating in user_ratings.items():
if rating > 0 and self.user_item_matrix.iloc[user_idx][product_id] == 0:
if product_id not in recommendations:
recommendations[product_id] = 0
recommendations[product_id] += similarity_score * rating
# En yüksek skorlu ürünleri döndür
sorted_recs = sorted(recommendations.items(), key=lambda x: x[1], reverse=True)
return [product_id for product_id, _ in sorted_recs[:n]]
def get_similar_products(self, product_id, n=5):
product_idx = self.user_item_matrix.columns.get_loc(product_id)
similar_items = self.item_similarity[product_idx].argsort()[::-1][1:n+1]
return self.user_item_matrix.columns[similar_items].tolist()
# Kullanım
# engine = RecommendationEngine()
# engine.fit(purchase_history_df)
# recommendations = engine.get_user_recommendations(user_id=123)
8.2. Chatbot Entegrasyonu
NLP tabanlı müşteri hizmetleri chatbotu:
// Dialogflow veya benzeri NLP servisi ile chatbot
class EcommerceChatbot {
constructor(nlpClient, productService, orderService) {
this.nlp = nlpClient;
this.products = productService;
this.orders = orderService;
}
async processMessage(userId, message) {
const intent = await this.nlp.detectIntent(message);
switch (intent.name) {
case 'search_product':
return this.handleProductSearch(intent.parameters);
case 'track_order':
return this.handleOrderTracking(userId, intent.parameters);
case 'get_recommendations':
return this.handleRecommendations(userId);
case 'faq_shipping':
return this.handleShippingFAQ(intent.parameters);
default:
return {
type: 'text',
content: 'Size nasıl yardımcı olabilirim? Ürün arama, sipariş takibi veya öneriler için yardım edebilirim.'
};
}
}
async handleProductSearch(parameters) {
const { product_type, color, size, price_range } = parameters;
const filters = {};
if (color) filters.color = color;
if (size) filters.size = size;
if (price_range) {
filters.price = {
$gte: price_range.min,
$lte: price_range.max
};
}
const results = await this.products.search(product_type, filters);
return {
type: 'carousel',
content: results.slice(0, 5).map(product => ({
title: product.name,
image: product.images[0],
price: `${product.price} TL`,
button: {
text: 'Sepete Ekle',
action: `add_to_cart:${product._id}`
}
}))
};
}
async handleOrderTracking(userId, parameters) {
const orderNumber = parameters.order_number;
const order = orderNumber
? await this.orders.findByNumber(orderNumber)
: await this.orders.findLatest(userId);
if (!order) {
return {
type: 'text',
content: 'Sipariş bulunamadı. Lütfen sipariş numaranızı kontrol edin.'
};
}
return {
type: 'order_status',
content: {
orderNumber: order.number,
status: order.status,
estimatedDelivery: order.estimatedDelivery,
trackingNumber: order.trackingNumber,
items: order.items.map(i => ({
name: i.productName,
quantity: i.quantity
}))
}
};
}
}
Sonuç
E-ticaret yazılımı seçimi, işletmenizin dijital geleceğini belirleyen stratejik bir karardır. Doğru teknoloji partneri, sadece kod yazan değil, iş hedeflerinizi anlayan ve ona göre çözüm üreten bir ajans olmalıdır. Noves Digital olarak, İzmir'den tüm Türkiye'ye ve global pazarlara uzanan deneyimimizle yanınızdayız. 360° yazılım çözümlerimizle e-ticaret platformunuzu hayata geçirmek için bizimle iletişime geçin.