Smiley face
Foruma dön

yedekparcalarim.com - SEO Analiz | Site SEO Analiz Araçları | Site SEO Puanı Ölçme

Bu sayfa, en son 2026-04-14 14:56:20 tarihinde ve toplamda 1 kez sorgulandı. Güncel verileri görüntülemek için butona tıklayınız.
71%
Çok uzun başlık (title) kullanılmamalı.
<title> etiketi 70 karakterden az olmalıdır. Aksi taktirde arama motorları spam olarak algılayabilir.

Başlık (title): Oto Yedek Parça ve Aksesuar Fiyatları | Yedek Parçalarım

Başlık uzunluğu: 56 karakter

Çok uzun açıklama bilgisi (description) kullanılmamalı.
description meta etiketi 160 karakterden az olmalıdır. Aksi taktirde arama motorları spam olarak algılayabilir.

Açıklama (description): Tüm araç marka ve modelleri için orijinal ve garantili oto yedek parça çeşitleri Yedek Parçalarım&#039;da. En uygun fiyatlar ve hızlı kargo ile güvenle sipariş verin!

Açıklama uzunluğu: 170 karakter

Gereğinden fazla anahtar kelime (keywords) kullanılmamalı.
keywords meta etiketi 260 karakterden az olmalıdır. Aksi taktirde arama motorları spam olarak algılayabilir.

Eğer sadece Google için SEO çalışması yapıyorsanız bu etiketi kullanmayabilirsiniz.

Detaylı bilgi için: https://support.google.com/webmasters/answer/79812?hl=tr

Anahtar kelime (keywords): oto yedek parça, ucuz yedek parça, orijinal yedek parça, otomobil yedek parça, araç parçaları, oto aksesuar

Anahtar kelime uzunluğu: 107 karakter

HX etiketi kriterlerine uyulmalı.
HX etiketleri, arama motorlarının sayfanızdaki içeriklerin hiyerarşik yapısını daha rahat anlayabilmesi için önemlidir. Bir sayfada H2, H3... etiketler birden fazla kullanılabilir, ancak H1 etiketi sadece 1 kere kullanılmalıdır.
<H1> Etiketleri:
  • Aracınıza Uygun Yedek Parçaları Güvenle Bulun • Hızlı Gönderim • Geniş Ürün Yelpazesi
  • Yeni Eklenen Yedek Parçalar
<H2> Etiketleri:
  • Markalar
  • <i class="fas fa-robot text-orange-500"></i> Yapay Zeka ile OEM Kodunuzu Arayın
  • Eşleşen Ürünler
  • {{ title }}
  • Sepetiniz Boş 🛒
<H3> Etiketleri:
  • Öne Çıkan Parçalar
  • Fren Sistemleri
  • Motor Parçaları
  • %100 Güvenli Alışveriş
  • Orijinal & Garantili Ürün
  • Hızlı ve Güvenli Kargo
<H4> Etiketleri:
  • Kurumsal
  • Parça Markaları
  • Araba Markaları
<H5> Etiketleri:
  • 0539 635 05 00
  • Whatsapp Numaralarımız
  • Şubelerimiz
<H6> Etiketleri:
Mümkün olduğunca az sayıda resim kullanılmalı.
Sayfanızdaki resimlerin sayısı çok fazlaysa, sunucuya çok sayıda istek gönderilir ve bu da sayfanın geç açılmasına sebep olur. Bu sebeple resim sayısı mümkün olduğunca az olmalıdır.
Resimler:
  • https://www.yedekparcalarim.com/api/products?new=1&amp;sort=created_at-desc&amp;limit=12&amp;created_at=2026-04-07%2C2026-04-14
  • storage/theme/5/1VADQjHL8NjSRfGBnys2teepuGBujc0aowYsVV1l.webp
  • https://www.yedekparcalarim.com/storage/channel/1/FEnydWxcxhooJNm0FjghfE2HiMA2iRRr45DIoJHg.png
  • https://www.troyodeme.com/upload/cmspagefile/image/anasayfa/TROY-Logo-Tagline.png
  • image.image
  • image.image
  • product.base_image?.original_image_url
  • brand.logo ||
  • src
  • src
  • currentImage
  • product.base_image.medium_image_url
  • https://www.yedekparcalarim.com/storage/channel/1/FEnydWxcxhooJNm0FjghfE2HiMA2iRRr45DIoJHg.png
  • https://www.yedekparcalarim.com/storage/channel/1/FEnydWxcxhooJNm0FjghfE2HiMA2iRRr45DIoJHg.png
  • item.logo_url
  • item.base_image.small_image_url
  • category.logo_url ||
  • child.logo_url ||
Tüm resim (img) etiketlerinizde alt bilgisi olmalı.
alt etiketi resimlerin ne ile ilgili olduğunu göstermeye yarar. Görsel aramalarda çıkmak için resim açıklamalarını mutlaka yazmalısınız.

Örnek: <img src="http://example.com/resim.png" width="80" height="80" alt="örnek resim" />
Alt etiketi olmayan resimler:
  • https://www.yedekparcalarim.com/api/products?new=1&amp;sort=created_at-desc&amp;limit=12&amp;created_at=2026-04-07%2C2026-04-14
  • src
  • src
  • item.logo_url
  • item.base_image.small_image_url
  • category.logo_url ||
  • child.logo_url ||

Alt etiketi olmayan 7 adet resim bulunmaktadır.

Tüm resim (img) etiketlerinizde width ve height bilgisi olmalı.
Görsel aramalar için width ve height etiketlerini yazmalısınız.

Örnek: <img src="http://example.com/resim.png" width="80" height="80" alt="örnek resim" />
Width veya height değeri olmayan resimler:
  • https://www.yedekparcalarim.com/api/products?new=1&amp;sort=created_at-desc&amp;limit=12&amp;created_at=2026-04-07%2C2026-04-14
  • storage/theme/5/1VADQjHL8NjSRfGBnys2teepuGBujc0aowYsVV1l.webp
  • https://www.yedekparcalarim.com/storage/channel/1/FEnydWxcxhooJNm0FjghfE2HiMA2iRRr45DIoJHg.png
  • https://www.troyodeme.com/upload/cmspagefile/image/anasayfa/TROY-Logo-Tagline.png
  • image.image
  • image.image
  • product.base_image?.original_image_url
  • brand.logo ||
  • src
  • src
  • currentImage
  • product.base_image.medium_image_url
  • https://www.yedekparcalarim.com/storage/channel/1/FEnydWxcxhooJNm0FjghfE2HiMA2iRRr45DIoJHg.png
  • https://www.yedekparcalarim.com/storage/channel/1/FEnydWxcxhooJNm0FjghfE2HiMA2iRRr45DIoJHg.png
  • item.logo_url
  • item.base_image.small_image_url
  • category.logo_url ||
  • child.logo_url ||

Width ve height değeri olmayan 20 adet resim bulunmaktadır.

Sayfanızdaki dış linklerinizin sayısı mümkün olduğunca az olmalı.
Dış linklerin normalden fazla olması arama motorları açısından spam olarak algılanabilir.
Dış linkler:
  • https://www.instagram.com/yedekparcalarimofficial
  • https://wa.me/905396350500?text=Merhaba,%20Destek%20alabilir%20miyim%20?
  • https://wa.me/905396350500
  • https://wa.me/905396350500
İç linkler:
  • /markalar
  • https://www.yedekparcalarim.com
  • /cdn-cgi/l/email-protection#7f16131a0b160c16123f061a1b1a140f1e0d1c1e131e0d1612511c1012
  • /kurumsal/hakkimizda
  • /kurumsal/guvenli-alisveris
  • /kurumsal/kargo-teslimat
  • /kurumsal/hesap-bilgilerimiz
  • /kurumsal/iade-degisim
  • /bloglar
  • /kurumsal/iletisim
  • /markalar
  • /marka/aba
  • /marka/aborn
  • /marka/acar
  • /marka/achr
  • /marka/aem
  • /marka/aft
  • /marka/airtex
  • /marka/aisin
  • /marka/akayna
  • /marka/akd
  • /marka/alfa-krank
  • /marka/alkar
  • /araclar
  • /arac/opel
  • /arac/chevrolet
  • /arac/bmw
  • /arac/mercedes-benz
  • /arac/volkswagen
  • /arac/audi
  • /arac/seat
  • /arac/skoda
  • /arac/renault
  • /arac/peugeot
  • /arac/citroen
  • /arac/ford
  • /kurumsal/mesafeli-satis-sozlesmesi
  • /kurumsal/gizlilik-bildirimi-ssl-secure-sockets-layer
  • /kurumsal/gizlilik-politikasi
  • /kurumsal/sartlar-ve-kosullar
  • image.link
  • `${category.slug}`
  • https://www.yedekparcalarim.com/customer/login
  • `/urun/${product.url_key}`
  • navigationLink
  • navigationLink
  • brand.link ||
  • `https://www.yedekparcalarim.com/urun/${product.url_key}`
  • `https://www.yedekparcalarim.com/urun/${product.url_key}`
  • #
  • `https://www.yedekparcalarim.com/urun/${product.url_key}`
  • https://www.yedekparcalarim.com
  • https://www.yedekparcalarim.com/customer/login
  • https://www.yedekparcalarim.com/customer/register
  • https://www.yedekparcalarim.com
  • https://www.yedekparcalarim.com
  • https://www.yedekparcalarim.com/customer/login
  • tel:05396350500
  • tel:05396350500
  • item.url
  • `https://www.yedekparcalarim.com/urun/${item.product_url_key}`
  • `https://www.yedekparcalarim.com/urun/${item.product_url_key}`
  • /
  • https://www.yedekparcalarim.com/checkout/onepage
  • https://www.yedekparcalarim.com/checkout/onepage
  • category.url
  • /araclar
  • child.url

Toplam 4 adet dış link ve 68 adet iç link bulunmaktadır.

Güvenilmeyen sitelere verilen linklerde rel="nofollow" etiketi olmalı.
Güvenmediğiniz veya PR değerinizi paylaşmak istemediğiniz sitelere link verirken mutlaka rel="nofollow" kullanmalısınız.

Detaylı bilgi için: https://support.google.com/webmasters/answer/96569?hl=tr

Örnek: <a href="http://example.com/" rel="nofollow" >Örnek link</a>

Sayfanızda nofollow link bulunmamaktadır.

Vurgulamak istenilen kelimelere biçim etiketleri verilmeli.
Arama motorlarının sayfa içeriğini daha rahat anlayabilmesi için önemli kelimeleri biçim etiketleri (kalın, eğik, altı çizili gibi) kullanarak belirtebilirsiniz.
<strong> Etiketleri:
  • Gerçek stok ve uygun fiyat garantisi.
<b> Etiketleri:
    <em> Etiketleri:
      <i> Etiketleri:

        Toplam 1 adet biçim etiketi bulunmaktadır.

        css ve javascript kodlar, harici bir sayfadan çağırılmalı.
        css veya javascript kodları sayfa içinde kullanıldığında sayfanın boyutu artmaktadır. Bu da performansı olumsuz etkileyecektir.
        Style kodları:
        • .home-offer h1 { display: block; font-weight: 500; text-align: center; font-size: 22px; font-family:&quot;DM Serif Display&quot;; background-color: #ff7a00; /* turuncu */ color: #ffffff; /* yazı rengi */ padding-top: 20px; padding-bottom: 20px; } @media (max-width:768px) { .home-offer h1 { font-size:18px; padding-top: 10px; padding-bottom: 10px; } } @media (max-width:525px) { .home-offer h1 { font-size:14px; padding-top: 6px; padding-bottom: 6px; } }
        • .top-collection-container { padding:0;}.top-collection-grid { display: grid; grid-template-columns: 2fr 1fr; grid-auto-rows: 220px; /* 🔥 sabit yükseklik */ gap: 20px; padding:0;}/* Kart */ .top-collection-card { position: relative; overflow: hidden; border-radius: 12px; height: 100%;}/* Görsel */ .top-collection-card img { width: 100%; height: 100%; object-fit: cover; display: block;}/* Başlık */ .top-collection-card h3 { position: absolute; bottom: 15px; left: 15px; color: white; font-size: 18px; font-weight: 600; z-index: 2;}/* Overlay (daha premium görünüm 🔥) */ .top-collection-card::after { content:&quot;&quot;; position: absolute; inset: 0; background: linear-gradient(to top, rgba(0, 0, 0, 0.6), transparent);}/* Büyük kart */ .top-collection-card.big { grid-row: span 2;}/* 📱 MOBILE */ @media (max-width: 768px) { .top-collection-grid { grid-template-columns: 1fr; grid-auto-rows: 180px; } .top-collection-card.big { grid-row: span 1; /* 🔥 fix */ }}
        • body { position: relative; } [data-blade-path] { outline: 1px solid rgba(255, 0, 0, 0.6); } [data-blade-path]:hover { outline: 2px solid rgba(255, 0, 0, 1); } .blade-path-label { position: fixed !important; bottom: 10px !important; left: 10px !important; background: rgba(0, 0, 0, 0.95) !important; color: #fff !important; padding: 8px 12px !important; font-size: 11px !important; font-family: monospace !important; z-index: 9999999 !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5) !important; border-radius: 4px !important; line-height: 1.4 !important; max-width: 90vw !important; word-break: break-all !important; display: none !important; align-items: center !important; gap: 8px !important; pointer-events: none !important; margin: 0 !important; transform: none !important; top: auto !important; right: auto !important; } .blade-path-label .path-text { flex: 1 !important; pointer-events: none !important; } .blade-path-label .copy-icon { cursor: pointer !important; padding: 4px 8px !important; background: rgba(255, 255, 255, 0.1) !important; border-radius: 3px !important; flex-shrink: 0 !important; font-size: 12px !important; transition: all 0.2s !important; pointer-events: auto !important; user-select: none !important; } .blade-path-label .copy-icon:hover { background: rgba(255, 255, 255, 0.3) !important; } .blade-path-label .copy-icon.copied { background: #4caf50 !important; } .blade-path-label.active { display: flex !important; pointer-events: auto !important; } .main-container-wrapper .product-card .product-image img { max-width: 100%; height: 260px; object-fit: cover; }
        • /* Premium Dot Style */ .premium-pagination .swiper-pagination-bullet { width: 8px; height: 8px; background: rgba(255,255,255,0.5); opacity: 1; border-radius: 999px; transition: all 0.4s ease; } .premium-pagination .swiper-pagination-bullet:hover { background: rgba(255,255,255,0.8); } .premium-pagination .swiper-pagination-bullet-active { width: 28px; height: 8px; background: #f97316; /* turuncumsu premium vurgu */ border-radius: 999px; }
        • /* Premium Dot Style */ .premium-pagination-categories { position: relative !important; margin-top: 10px; /* slider’dan uzaklaştırır */ text-align: center; } .premium-pagination-categories .swiper-pagination-bullet { width: 8px; height: 8px; background: rgba(0,0,0,0.3); opacity: 1; border-radius: 999px; transition: all 0.4s ease; } .premium-pagination-categories .swiper-pagination-bullet-active { width: 26px; height: 8px; background: #f97316; border-radius: 999px; }
        • .premium-pagination { position: relative !important; margin-top: 20px; text-align: center; } .premium-pagination .swiper-pagination-bullet { width: 8px; height: 8px; background: rgba(0,0,0,0.25); opacity: 1; border-radius: 999px; transition: all 0.4s ease; } .premium-pagination .swiper-pagination-bullet-active { width: 26px; height: 8px; background: #f97316; border-radius: 999px; }
        • .premium-pagination .swiper-pagination-bullet { width: 8px; height: 8px; background: #f8af7e; opacity: 1; border-radius: 999px; transition: all 0.4s ease; } .premium-pagination .swiper-pagination-bullet:hover { background: rgba(255, 255, 255, 0.8); } .premium-pagination .swiper-pagination-bullet-active { width: 28px; height: 8px; background: #f97316; border-radius: 999px; }
        • .fade-slide-enter-active, .fade-slide-leave-active { transition: all .2s ease; } .fade-slide-enter-from { opacity: 0; transform: translateY(10px); } .fade-slide-leave-to { opacity: 0; transform: translateY(5px); }
        JavaScript Kodları:
        • [ { "@context": "https://schema.org", "@type": "Organization", "name": "Oto Yedek Parça ve Aksesuar Fiyatları | Yedek Parçalarım", "url": "https://www.yedekparcalarim.com", "logo": "https://www.yedekparcalarim.com/storage/channel/1/JCp8PVakWl9h2TvojQBCpGLfqdzNUVg3uoELSbII.png" }, { "@context": "https://schema.org", "@type": "WebSite", "name": "Oto Yedek Parça ve Aksesuar Fiyatları | Yedek Parçalarım", "url": "https://www.yedekparcalarim.com", "potentialAction": { "@type": "SearchAction", "target": "https://www.yedekparcalarim.com/search?query={search_term_string}", "query-input": "required name=search_term_string" } }, { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Ana Sayfa", "item": "https://www.yedekparcalarim.com" } ] }]
        • window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'AW-18035716374');
        • window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-4ZVCX36QES');
        • {"prerender":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":"/customer/account/*"}},{"not":{"href_matches":"/checkout/*"}}]},"eagerness":"moderate"}]}
        • (function() { if (!document.body) return; /** * Store processed elements to avoid duplicates. */ const processedElements = new WeakSet(); /** * Copy text to clipboard. */ function copyToClipboard(text) { if (navigator.clipboard && navigator.clipboard.writeText) { return navigator.clipboard.writeText(text); } const textarea = document.createElement('textarea'); textarea.value = text; textarea.style.position = 'fixed'; textarea.style.opacity = '0'; document.body.appendChild(textarea); textarea.select(); try { document.execCommand('copy'); document.body.removeChild(textarea); return Promise.resolve(); } catch (err) { document.body.removeChild(textarea); return Promise.reject(err); } } /** * Use event delegation for copy functionality. */ document.addEventListener('click', function(e) { if (e.target.classList.contains('copy-icon')) { e.preventDefault(); e.stopPropagation(); const path = e.target.getAttribute('data-path'); copyToClipboard(path).then(() => { e.target.textContent = '✓ Copied!'; e.target.classList.add('copied'); e.target.style.minWidth = '60px'; e.target.style.textAlign = 'center'; setTimeout(() => { e.target.textContent = '📋'; e.target.classList.remove('copied'); e.target.style.minWidth = ''; e.target.style.textAlign = ''; }, 2000); }).catch(err => { e.target.textContent = '✗ Failed'; setTimeout(() => { e.target.textContent = '📋'; }, 2000); }); } }, true); /** * Store labels separately in a WeakMap for elements that can't have children. */ const labels = new WeakMap(); /** * Create label element. */ function createLabel(path) { const label = document.createElement('div'); label.className = 'blade-path-label'; const pathText = document.createElement('span'); pathText.className = 'path-text'; pathText.textContent = path; const copyIcon = document.createElement('span'); copyIcon.className = 'copy-icon'; copyIcon.textContent = '📋'; copyIcon.title = 'Copy path'; copyIcon.setAttribute('data-path', path); label.appendChild(pathText); label.appendChild(copyIcon); return label; } /** * Check if element can have children. */ function canHaveChildren(element) { const voidElements = ['IMG', 'INPUT', 'BR', 'HR', 'META', 'LINK', 'AREA', 'BASE', 'COL', 'EMBED', 'PARAM', 'SOURCE', 'TRACK', 'WBR']; return !voidElements.includes(element.tagName); } /** * Add label to element if it has data-blade-path attribute. */ function addLabelToElement(element) { if (processedElements.has(element) || !element.hasAttribute('data-blade-path')) { return; } const path = element.getAttribute('data-blade-path'); if (!path) return; processedElements.add(element); if (element.querySelector('.blade-path-label') || labels.has(element)) { return; } const label = createLabel(path); if (canHaveChildren(element)) { try { element.appendChild(label); labels.set(element, label); } catch (e) { document.body.appendChild(label); labels.set(element, label); } } else { document.body.appendChild(label); labels.set(element, label); } } /** * Process all elements with data-blade-path attribute. */ function processAllElements() { const elements = document.querySelectorAll('[data-blade-path]'); elements.forEach(addLabelToElement); } /** * Initial processing. */ processAllElements(); /** * Watch for DOM changes with debounce. */ let debounceTimer; const observer = new MutationObserver(function(mutations) { clearTimeout(debounceTimer); debounceTimer = setTimeout(processAllElements, 100); }); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['data-blade-path'] }); /** * Periodic check for Vue.js rendered content. */ setInterval(processAllElements, 1000); /** * Run on various events. */ if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', processAllElements); } window.addEventListener('load', processAllElements); /** * Handle hover to show only the directly hovered element's label. */ let currentActiveLabel = null; document.addEventListener('mouseover', function(e) { const target = e.target.closest('[data-blade-path]'); if (target) { if (currentActiveLabel) { currentActiveLabel.classList.remove('active'); } let label = target.querySelector(':scope > .blade-path-label'); if (!label) { label = labels.get(target); } if (label) { if (label.parentElement === document.body) { const rect = target.getBoundingClientRect(); label.style.top = (rect.top + window.scrollY) + 'px'; label.style.left = (rect.left + window.scrollX) + 'px'; } label.classList.add('active'); currentActiveLabel = label; } e.stopPropagation(); } }, true); document.addEventListener('mouseout', function(e) { const target = e.target.closest('[data-blade-path]'); if (target) { let label = target.querySelector(':scope > .blade-path-label'); if (!label) { label = labels.get(target); } if (label && currentActiveLabel === label) { label.classList.remove('active'); currentActiveLabel = null; } } }, true); /** * Keyboard shortcut to copy path (Ctrl+Shift+C or Cmd+Shift+C). */ let currentHoveredElement = null; document.addEventListener('mouseover', function(e) { const target = e.target.closest('[data-blade-path]'); if (target) { currentHoveredElement = target; } }, true); document.addEventListener('keydown', function(e) { if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key === 'C') { e.preventDefault(); if (currentHoveredElement) { const path = currentHoveredElement.getAttribute('data-blade-path'); if (path) { copyToClipboard(path).then(() => { showCopyNotification('✓ Path Copied!'); }).catch(err => { showCopyNotification('✗ Copy Failed'); }); } } } }); /** * Show copy notification. */ function showCopyNotification(message) { const existing = document.querySelector('.blade-copy-notification'); if (existing) { existing.remove(); } const notification = document.createElement('div'); notification.className = 'blade-copy-notification'; notification.textContent = message; notification.style.cssText = ` position: fixed; top: 20px; right: 20px; background: #4caf50; color: white; padding: 12px 20px; border-radius: 4px; font-family: monospace; font-size: 14px; z-index: 99999999; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); animation: slideIn 0.3s ease-out; `; document.body.appendChild(notification); setTimeout(() => { notification.style.opacity = '0'; notification.style.transition = 'opacity 0.3s'; setTimeout(() => notification.remove(), 300); }, 2000); } const style = document.createElement('style'); style.textContent = ` @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } `; document.head.appendChild(style); })();
        • localStorage.setItem('categories', JSON.stringify([{"id":12,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":26,"_rgt":27,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/sanziman-ve-debriyaj-sistemleri","name":"\u015eanz\u0131man ve Debriyaj Sistemleri","description":"\u003Cp\u003E\u015eanz\u0131man ve Debriyaj Sistemleri\u003C\/p\u003E","slug":"sanziman-ve-debriyaj-sistemleri","meta_title":"\u015eanz\u0131man ve Debriyaj Sistemleri","meta_description":"\u015eanz\u0131man ve Debriyaj Sistemleri","meta_keywords":"\u015eanz\u0131man ve Debriyaj Sistemleri","translations":[{"id":12,"category_id":12,"name":"\u015eanz\u0131man ve Debriyaj Sistemleri","slug":"sanziman-ve-debriyaj-sistemleri","url_path":"","description":"\u003Cp\u003E\u015eanz\u0131man ve Debriyaj Sistemleri\u003C\/p\u003E","meta_title":"\u015eanz\u0131man ve Debriyaj Sistemleri","meta_description":"\u015eanz\u0131man ve Debriyaj Sistemleri","meta_keywords":"\u015eanz\u0131man ve Debriyaj Sistemleri","locale_id":null,"locale":"tr"}]},{"id":21,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":44,"_rgt":45,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:19.000000Z","updated_at":"2026-03-19T08:06:19.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/diger-parcalar","name":"Di\u011fer Par\u00e7alar","description":"\u003Cp\u003EDi\u011ferler\u003C\/p\u003E","slug":"diger-parcalar","meta_title":"Di\u011fer Par\u00e7alar","meta_description":"Di\u011fer Par\u00e7alar","meta_keywords":"Di\u011fer Par\u00e7alar","translations":[{"id":21,"category_id":21,"name":"Di\u011fer Par\u00e7alar","slug":"diger-parcalar","url_path":"","description":"\u003Cp\u003EDi\u011ferler\u003C\/p\u003E","meta_title":"Di\u011fer Par\u00e7alar","meta_description":"Di\u011fer Par\u00e7alar","meta_keywords":"Di\u011fer Par\u00e7alar","locale_id":null,"locale":"tr"}]},{"id":20,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":42,"_rgt":43,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:19.000000Z","updated_at":"2026-03-19T08:06:19.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/guvenlik-sistemleri","name":"G\u00fcvenlik Sistemleri","description":"\u003Cp\u003EG\u00fcvenlik Sistemleri\u003C\/p\u003E","slug":"guvenlik-sistemleri","meta_title":"G\u00fcvenlik Sistemleri","meta_description":"G\u00fcvenlik Sistemleri","meta_keywords":"G\u00fcvenlik Sistemleri","translations":[{"id":20,"category_id":20,"name":"G\u00fcvenlik Sistemleri","slug":"guvenlik-sistemleri","url_path":"","description":"\u003Cp\u003EG\u00fcvenlik Sistemleri\u003C\/p\u003E","meta_title":"G\u00fcvenlik Sistemleri","meta_description":"G\u00fcvenlik Sistemleri","meta_keywords":"G\u00fcvenlik Sistemleri","locale_id":null,"locale":"tr"}]},{"id":19,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":40,"_rgt":41,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:19.000000Z","updated_at":"2026-03-19T08:06:19.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/yag-antifriz-aku-ve-sarf-urunleri","name":"Ya\u011f, Antifriz, Ak\u00fc ve Sarf \u00dcr\u00fcnleri","description":"\u003Cp\u003EYa\u011f, Antifriz, Ak\u00fc ve Sarf \u00dcr\u00fcnleri\u003C\/p\u003E","slug":"yag-antifriz-aku-ve-sarf-urunleri","meta_title":"Ya\u011f Antifriz Ak\u00fc ve Sarf \u00dcr\u00fcnleri","meta_description":"Ya\u011f, Antifriz, Ak\u00fc ve Sarf \u00dcr\u00fcnleri","meta_keywords":"Ya\u011f, Antifriz, Ak\u00fc ve Sarf \u00dcr\u00fcnleri","translations":[{"id":19,"category_id":19,"name":"Ya\u011f, Antifriz, Ak\u00fc ve Sarf \u00dcr\u00fcnleri","slug":"yag-antifriz-aku-ve-sarf-urunleri","url_path":"","description":"\u003Cp\u003EYa\u011f, Antifriz, Ak\u00fc ve Sarf \u00dcr\u00fcnleri\u003C\/p\u003E","meta_title":"Ya\u011f Antifriz Ak\u00fc ve Sarf \u00dcr\u00fcnleri","meta_description":"Ya\u011f, Antifriz, Ak\u00fc ve Sarf \u00dcr\u00fcnleri","meta_keywords":"Ya\u011f, Antifriz, Ak\u00fc ve Sarf \u00dcr\u00fcnleri","locale_id":null,"locale":"tr"}]},{"id":18,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":38,"_rgt":39,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:19.000000Z","updated_at":"2026-03-19T08:06:19.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/silecek-sistemleri","name":"Silecek Sistemleri","description":"\u003Cp\u003ESilecek Sistemleri\u003C\/p\u003E","slug":"silecek-sistemleri","meta_title":"Silecek Sistemleri","meta_description":"Silecek Sistemleri","meta_keywords":"Silecek Sistemleri","translations":[{"id":18,"category_id":18,"name":"Silecek Sistemleri","slug":"silecek-sistemleri","url_path":"","description":"\u003Cp\u003ESilecek Sistemleri\u003C\/p\u003E","meta_title":"Silecek Sistemleri","meta_description":"Silecek Sistemleri","meta_keywords":"Silecek Sistemleri","locale_id":null,"locale":"tr"}]},{"id":17,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":36,"_rgt":37,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:19.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/egzoz-sistemleri","name":"Egzoz Sistemleri","description":"\u003Cp\u003EEgzoz Sistemleri\u003C\/p\u003E","slug":"egzoz-sistemleri","meta_title":"Egzoz Sistemleri","meta_description":"Egzoz Sistemleri","meta_keywords":"Egzoz Sistemleri","translations":[{"id":17,"category_id":17,"name":"Egzoz Sistemleri","slug":"egzoz-sistemleri","url_path":"","description":"\u003Cp\u003EEgzoz Sistemleri\u003C\/p\u003E","meta_title":"Egzoz Sistemleri","meta_description":"Egzoz Sistemleri","meta_keywords":"Egzoz Sistemleri","locale_id":null,"locale":"tr"}]},{"id":16,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":34,"_rgt":35,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/karoseri-ic-parcalar","name":"Karoseri \u0130\u00e7 Par\u00e7alar","description":"\u003Cp\u003EKaroseri \u0130\u00e7 Par\u00e7alar\u003C\/p\u003E","slug":"karoseri-ic-parcalar","meta_title":"Karoseri \u0130\u00e7 Par\u00e7alar","meta_description":"Karoseri \u0130\u00e7 Par\u00e7alar","meta_keywords":"Karoseri \u0130\u00e7 Par\u00e7alar","translations":[{"id":16,"category_id":16,"name":"Karoseri \u0130\u00e7 Par\u00e7alar","slug":"karoseri-ic-parcalar","url_path":"","description":"\u003Cp\u003EKaroseri \u0130\u00e7 Par\u00e7alar\u003C\/p\u003E","meta_title":"Karoseri \u0130\u00e7 Par\u00e7alar","meta_description":"Karoseri \u0130\u00e7 Par\u00e7alar","meta_keywords":"Karoseri \u0130\u00e7 Par\u00e7alar","locale_id":null,"locale":"tr"}]},{"id":15,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":32,"_rgt":33,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/karoseri-dis-parcalar","name":"Karoseri D\u0131\u015f Par\u00e7alar","description":"\u003Cp\u003EKaroseri D\u0131\u015f Par\u00e7alar\u003C\/p\u003E","slug":"karoseri-dis-parcalar","meta_title":"Karoseri D\u0131\u015f Par\u00e7alar","meta_description":"Karoseri D\u0131\u015f Par\u00e7alar","meta_keywords":"Karoseri D\u0131\u015f Par\u00e7alar","translations":[{"id":15,"category_id":15,"name":"Karoseri D\u0131\u015f Par\u00e7alar","slug":"karoseri-dis-parcalar","url_path":"","description":"\u003Cp\u003EKaroseri D\u0131\u015f Par\u00e7alar\u003C\/p\u003E","meta_title":"Karoseri D\u0131\u015f Par\u00e7alar","meta_description":"Karoseri D\u0131\u015f Par\u00e7alar","meta_keywords":"Karoseri D\u0131\u015f Par\u00e7alar","locale_id":null,"locale":"tr"}]},{"id":14,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":30,"_rgt":31,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/ic-ve-dis-aydinlatma","name":"\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma","description":"\u003Cp\u003E\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma\u003C\/p\u003E","slug":"ic-ve-dis-aydinlatma","meta_title":"\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma","meta_description":"\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma","meta_keywords":"\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma","translations":[{"id":14,"category_id":14,"name":"\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma","slug":"ic-ve-dis-aydinlatma","url_path":"","description":"\u003Cp\u003E\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma\u003C\/p\u003E","meta_title":"\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma","meta_description":"\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma","meta_keywords":"\u0130\u00e7 ve D\u0131\u015f Ayd\u0131nlatma","locale_id":null,"locale":"tr"}]},{"id":13,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":28,"_rgt":29,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/sensor-valf-ve-elektrik-urunleri","name":"Sens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri","description":"\u003Cp\u003ESens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri\u003C\/p\u003E","slug":"sensor-valf-ve-elektrik-urunleri","meta_title":"Sens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri","meta_description":"Sens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri","meta_keywords":"Sens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri","translations":[{"id":13,"category_id":13,"name":"Sens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri","slug":"sensor-valf-ve-elektrik-urunleri","url_path":"","description":"\u003Cp\u003ESens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri\u003C\/p\u003E","meta_title":"Sens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri","meta_description":"Sens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri","meta_keywords":"Sens\u00f6r, Valf ve Elektrik \u00dcr\u00fcnleri","locale_id":null,"locale":"tr"}]},{"id":2,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":6,"_rgt":7,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/periyodik-bakim-ve-filtre-urunleri","name":"Periyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri","description":"\u003Cp\u003EPeriyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri\u003C\/p\u003E","slug":"periyodik-bakim-ve-filtre-urunleri","meta_title":"Periyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri","meta_description":"Periyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri","meta_keywords":"Periyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri","translations":[{"id":2,"category_id":2,"name":"Periyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri","slug":"periyodik-bakim-ve-filtre-urunleri","url_path":"","description":"\u003Cp\u003EPeriyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri\u003C\/p\u003E","meta_title":"Periyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri","meta_description":"Periyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri","meta_keywords":"Periyodik Bak\u0131m ve Filtre \u00dcr\u00fcnleri","locale_id":null,"locale":"tr"}]},{"id":11,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":24,"_rgt":25,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/sogutma-ve-kalorifer-sistemleri","name":"So\u011futma ve Kalorifer Sistemleri","description":"\u003Cp\u003ESo\u011futma ve Kalorifer Sistemleri\u003C\/p\u003E","slug":"sogutma-ve-kalorifer-sistemleri","meta_title":"So\u011futma ve Kalorifer Sistemleri","meta_description":"So\u011futma ve Kalorifer Sistemleri","meta_keywords":"So\u011futma ve Kalorifer Sistemleri","translations":[{"id":11,"category_id":11,"name":"So\u011futma ve Kalorifer Sistemleri","slug":"sogutma-ve-kalorifer-sistemleri","url_path":"","description":"\u003Cp\u003ESo\u011futma ve Kalorifer Sistemleri\u003C\/p\u003E","meta_title":"So\u011futma ve Kalorifer Sistemleri","meta_description":"So\u011futma ve Kalorifer Sistemleri","meta_keywords":"So\u011futma ve Kalorifer Sistemleri","locale_id":null,"locale":"tr"}]},{"id":10,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":22,"_rgt":23,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/v-kayis-ve-gergi-rulmanlari","name":"V Kay\u0131\u015f ve Gergi Rulmanlar\u0131","description":"\u003Cp\u003EV Kay\u0131\u015f ve Gergi Rulmanlar\u0131\u003C\/p\u003E","slug":"v-kayis-ve-gergi-rulmanlari","meta_title":"V Kay\u0131\u015f ve Gergi Rulmanlar\u0131","meta_description":"V Kay\u0131\u015f ve Gergi Rulmanlar\u0131","meta_keywords":"V Kay\u0131\u015f ve Gergi Rulmanlar\u0131","translations":[{"id":10,"category_id":10,"name":"V Kay\u0131\u015f ve Gergi Rulmanlar\u0131","slug":"v-kayis-ve-gergi-rulmanlari","url_path":"","description":"\u003Cp\u003EV Kay\u0131\u015f ve Gergi Rulmanlar\u0131\u003C\/p\u003E","meta_title":"V Kay\u0131\u015f ve Gergi Rulmanlar\u0131","meta_description":"V Kay\u0131\u015f ve Gergi Rulmanlar\u0131","meta_keywords":"V Kay\u0131\u015f ve Gergi Rulmanlar\u0131","locale_id":null,"locale":"tr"}]},{"id":9,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":20,"_rgt":21,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/alternator-ve-mars-motoru","name":"Alternat\u00f6r ve Mar\u015f Motoru","description":"\u003Cp\u003EAlternat\u00f6r ve Mar\u015f Motoru\u003C\/p\u003E","slug":"alternator-ve-mars-motoru","meta_title":"Alternat\u00f6r ve Mar\u015f Motoru","meta_description":"Alternat\u00f6r ve Mar\u015f Motoru","meta_keywords":"Alternat\u00f6r ve Mar\u015f Motoru","translations":[{"id":9,"category_id":9,"name":"Alternat\u00f6r ve Mar\u015f Motoru","slug":"alternator-ve-mars-motoru","url_path":"","description":"\u003Cp\u003EAlternat\u00f6r ve Mar\u015f Motoru\u003C\/p\u003E","meta_title":"Alternat\u00f6r ve Mar\u015f Motoru","meta_description":"Alternat\u00f6r ve Mar\u015f Motoru","meta_keywords":"Alternat\u00f6r ve Mar\u015f Motoru","locale_id":null,"locale":"tr"}]},{"id":8,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":18,"_rgt":19,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/atesleme-sistemleri","name":"Ate\u015fleme Sistemleri","description":"\u003Cp\u003EAte\u015fleme Sistemleri\u003C\/p\u003E","slug":"atesleme-sistemleri","meta_title":"Ate\u015fleme Sistemleri","meta_description":"Ate\u015fleme Sistemleri","meta_keywords":"Ate\u015fleme Sistemleri","translations":[{"id":8,"category_id":8,"name":"Ate\u015fleme Sistemleri","slug":"atesleme-sistemleri","url_path":"","description":"\u003Cp\u003EAte\u015fleme Sistemleri\u003C\/p\u003E","meta_title":"Ate\u015fleme Sistemleri","meta_description":"Ate\u015fleme Sistemleri","meta_keywords":"Ate\u015fleme Sistemleri","locale_id":null,"locale":"tr"}]},{"id":7,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":16,"_rgt":17,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/yakit-ve-enjeksiyon-sistemleri","name":"Yak\u0131t ve Enjeksiyon Sistemleri","description":"\u003Cp\u003EYak\u0131t ve Enjeksiyon Sistemleri\u003C\/p\u003E","slug":"yakit-ve-enjeksiyon-sistemleri","meta_title":"Yak\u0131t ve Enjeksiyon Sistemleri","meta_description":"Yak\u0131t ve Enjeksiyon Sistemleri","meta_keywords":"Yak\u0131t ve Enjeksiyon Sistemleri","translations":[{"id":7,"category_id":7,"name":"Yak\u0131t ve Enjeksiyon Sistemleri","slug":"yakit-ve-enjeksiyon-sistemleri","url_path":"","description":"\u003Cp\u003EYak\u0131t ve Enjeksiyon Sistemleri\u003C\/p\u003E","meta_title":"Yak\u0131t ve Enjeksiyon Sistemleri","meta_description":"Yak\u0131t ve Enjeksiyon Sistemleri","meta_keywords":"Yak\u0131t ve Enjeksiyon Sistemleri","locale_id":null,"locale":"tr"}]},{"id":6,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":14,"_rgt":15,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/motor-parcalari","name":"Motor Par\u00e7alar\u0131","description":"\u003Cp\u003EMotor Par\u00e7alar\u0131\u003C\/p\u003E","slug":"motor-parcalari","meta_title":"Motor Par\u00e7alar\u0131","meta_description":"Motor Par\u00e7alar\u0131","meta_keywords":"Motor Par\u00e7alar\u0131","translations":[{"id":6,"category_id":6,"name":"Motor Par\u00e7alar\u0131","slug":"motor-parcalari","url_path":"","description":"\u003Cp\u003EMotor Par\u00e7alar\u0131\u003C\/p\u003E","meta_title":"Motor Par\u00e7alar\u0131","meta_description":"Motor Par\u00e7alar\u0131","meta_keywords":"Motor Par\u00e7alar\u0131","locale_id":null,"locale":"tr"}]},{"id":5,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":12,"_rgt":13,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/arka-aks-ve-suspansiyon","name":"Arka Aks ve S\u00fcspansiyon","description":"\u003Cp\u003EArka Aks ve S\u00fcspansiyon\u003C\/p\u003E","slug":"arka-aks-ve-suspansiyon","meta_title":"Arka Aks ve S\u00fcspansiyon","meta_description":"Arka Aks ve S\u00fcspansiyon","meta_keywords":"Arka Aks ve S\u00fcspansiyon","translations":[{"id":5,"category_id":5,"name":"Arka Aks ve S\u00fcspansiyon","slug":"arka-aks-ve-suspansiyon","url_path":"","description":"\u003Cp\u003EArka Aks ve S\u00fcspansiyon\u003C\/p\u003E","meta_title":"Arka Aks ve S\u00fcspansiyon","meta_description":"Arka Aks ve S\u00fcspansiyon","meta_keywords":"Arka Aks ve S\u00fcspansiyon","locale_id":null,"locale":"tr"}]},{"id":4,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":10,"_rgt":11,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/on-takim-ve-suspansiyon-parcalari","name":"\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131","description":"\u003Cp\u003E\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131\u003C\/p\u003E","slug":"on-takim-ve-suspansiyon-parcalari","meta_title":"\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131","meta_description":"\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131","meta_keywords":"\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131","translations":[{"id":4,"category_id":4,"name":"\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131","slug":"on-takim-ve-suspansiyon-parcalari","url_path":"","description":"\u003Cp\u003E\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131\u003C\/p\u003E","meta_title":"\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131","meta_description":"\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131","meta_keywords":"\u00d6n Tak\u0131m ve S\u00fcspansiyon Par\u00e7alar\u0131","locale_id":null,"locale":"tr"}]},{"id":3,"position":0,"logo_path":null,"status":1,"display_mode":"products_and_description","_lft":8,"_rgt":9,"parent_id":1,"additional":null,"banner_path":null,"created_at":"2026-03-19T08:06:18.000000Z","updated_at":"2026-03-19T08:06:18.000000Z","logo_url":null,"banner_url":null,"url":"https:\/\/www.yedekparcalarim.com\/fren-balata-ve-disk-setleri","name":"Fren Balata ve Disk Setleri","description":"\u003Cp\u003EFren Balata ve Disk Setleri\u003C\/p\u003E","slug":"fren-balata-ve-disk-setleri","meta_title":"Fren Balata ve Disk Setleri","meta_description":"Fren Balata ve Disk Setleri","meta_keywords":"Fren Balata ve Disk Setleri","translations":[{"id":3,"category_id":3,"name":"Fren Balata ve Disk Setleri","slug":"fren-balata-ve-disk-setleri","url_path":"","description":"\u003Cp\u003EFren Balata ve Disk Setleri\u003C\/p\u003E","meta_title":"Fren Balata ve Disk Setleri","meta_description":"Fren Balata ve Disk Setleri","meta_keywords":"Fren Balata ve Disk Setleri","locale_id":null,"locale":"tr"}]}]));
        • app.component('v-swiper', { props: ['images'], template: ` <div class="relative w-full"> <div class="swiper w-full" ref="swiperRoot"> <div class="swiper-wrapper"> <div class="swiper-slide" v-for="(image, index) in images" :key="index" > <div class=" w-full aspect-[16/9] sm:h-[60vh] sm:aspect-auto md:h-[70vh] overflow-hidden bg-black "> <a v-if="image.link" :href="image.link" class="w-full h-full block"> <img :src="image.image" :alt="image.title || 'Slide ' + (index + 1)" class="w-full h-full object-cover select-none transition-transform duration-700 hover:scale-105" draggable="false" /> </a> <img v-else :src="image.image" :alt="image.title || 'Slide ' + (index + 1)" class="w-full h-full object-cover select-none transition-transform duration-700 hover:scale-105" draggable="false" /> </div> </div> </div> <div class="swiper-pagination premium-pagination !bottom-6"></div> </div> </div> `, mounted() { this.$nextTick(() => { if (!window.Swiper) return; const slideCount = this.images.length; new window.Swiper(this.$refs.swiperRoot, { loop: slideCount > 1, autoplay: slideCount > 1 ? { delay: 5000, disableOnInteraction: false, } : false, pagination: { el: this.$refs.swiperRoot.querySelector('.swiper-pagination'), clickable: true, }, }); }); } });
        • <div class="w-full mt-14 max-lg:px-8 max-md:mt-7 max-md:!px-0 max-sm:mt-5" v-if="! isLoading && categories?.length" > <div class="swiper relative" ref="swiperRoot"> <div class="swiper-wrapper"> <div class="swiper-slide flex justify-center" v-for="category in categories" :key="category.id" > <a :href="`${category.slug}`" class="group w-[150px] h-[110px] max-md:w-20 max-md:h-20 max-sm:w-[120px] max-sm:h-[100px] rounded-full flex items-center justify-center overflow-hidden transition duration-300 hover:scale-105" > <v-shimmer-image :src="category.logo" :alt="category.name" class="max-w-[70%] max-h-[70%] object-contain transition duration-300 group-hover:scale-110"> <div class="shimmer max-w-[70%] max-h-[70%] object-contain transition duration-300 group-hover:scale-110" :src="category.logo" :alt="category.name"></div></v-shimmer-image> </a> </div> </div> <div class="swiper-pagination premium-pagination-categories absolute bottom-0 left-0 w-full"></div> </div> </div> <template v-if="isLoading"> <div class="container mt-14 max-lg:px-8 max-md:mt-7 max-md:!px-0 max-sm:mt-5"> <div class="relative"> <div class="scrollbar-hide flex gap-10 overflow-auto max-lg:gap-4"> <div class="grid min-w-[120px] grid-cols-1 justify-items-center gap-4 max-md:min-w-20 max-md:gap-2.5 max-md:first:ml-4 max-sm:min-w-[60px] max-sm:max-w-[60px] max-sm:gap-1.5"> <div class="shimmer relative h-[110px] w-[110px] overflow-hidden rounded-full max-md:h-20 max-md:w-20 max-sm:h-[60px] max-sm:w-[60px]"> <img class="rounded-sm bg-zinc-100"> </div> <p class="shimmer h-[27px] w-[90px] rounded-2xl max-sm:h-5 max-sm:w-[70px]"></p> </div> <div class="grid min-w-[120px] grid-cols-1 justify-items-center gap-4 max-md:min-w-20 max-md:gap-2.5 max-md:first:ml-4 max-sm:min-w-[60px] max-sm:max-w-[60px] max-sm:gap-1.5"> <div class="shimmer relative h-[110px] w-[110px] overflow-hidden rounded-full max-md:h-20 max-md:w-20 max-sm:h-[60px] max-sm:w-[60px]"> <img class="rounded-sm bg-zinc-100"> </div> <p class="shimmer h-[27px] w-[90px] rounded-2xl max-sm:h-5 max-sm:w-[70px]"></p> </div> <div class="grid min-w-[120px] grid-cols-1 justify-items-center gap-4 max-md:min-w-20 max-md:gap-2.5 max-md:first:ml-4 max-sm:min-w-[60px] max-sm:max-w-[60px] max-sm:gap-1.5"> <div class="shimmer relative h-[110px] w-[110px] overflow-hidden rounded-full max-md:h-20 max-md:w-20 max-sm:h-[60px] max-sm:w-[60px]"> <img class="rounded-sm bg-zinc-100"> </div> <p class="shimmer h-[27px] w-[90px] rounded-2xl max-sm:h-5 max-sm:w-[70px]"></p> </div> <div class="grid min-w-[120px] grid-cols-1 justify-items-center gap-4 max-md:min-w-20 max-md:gap-2.5 max-md:first:ml-4 max-sm:min-w-[60px] max-sm:max-w-[60px] max-sm:gap-1.5"> <div class="shimmer relative h-[110px] w-[110px] overflow-hidden rounded-full max-md:h-20 max-md:w-20 max-sm:h-[60px] max-sm:w-[60px]"> <img class="rounded-sm bg-zinc-100"> </div> <p class="shimmer h-[27px] w-[90px] rounded-2xl max-sm:h-5 max-sm:w-[70px]"></p> </div> <div class="grid min-w-[120px] grid-cols-1 justify-items-center gap-4 max-md:min-w-20 max-md:gap-2.5 max-md:first:ml-4 max-sm:min-w-[60px] max-sm:max-w-[60px] max-sm:gap-1.5"> <div class="shimmer relative h-[110px] w-[110px] overflow-hidden rounded-full max-md:h-20 max-md:w-20 max-sm:h-[60px] max-sm:w-[60px]"> <img class="rounded-sm bg-zinc-100"> </div> <p class="shimmer h-[27px] w-[90px] rounded-2xl max-sm:h-5 max-sm:w-[70px]"></p> </div> <div class="grid min-w-[120px] grid-cols-1 justify-items-center gap-4 max-md:min-w-20 max-md:gap-2.5 max-md:first:ml-4 max-sm:min-w-[60px] max-sm:max-w-[60px] max-sm:gap-1.5"> <div class="shimmer relative h-[110px] w-[110px] overflow-hidden rounded-full max-md:h-20 max-md:w-20 max-sm:h-[60px] max-sm:w-[60px]"> <img class="rounded-sm bg-zinc-100"> </div> <p class="shimmer h-[27px] w-[90px] rounded-2xl max-sm:h-5 max-sm:w-[70px]"></p> </div> <div class="grid min-w-[120px] grid-cols-1 justify-items-center gap-4 max-md:min-w-20 max-md:gap-2.5 max-md:first:ml-4 max-sm:min-w-[60px] max-sm:max-w-[60px] max-sm:gap-1.5"> <div class="shimmer relative h-[110px] w-[110px] overflow-hidden rounded-full max-md:h-20 max-md:w-20 max-sm:h-[60px] max-sm:w-[60px]"> <img class="rounded-sm bg-zinc-100"> </div> <p class="shimmer h-[27px] w-[90px] rounded-2xl max-sm:h-5 max-sm:w-[70px]"></p> </div> <div class="grid min-w-[120px] grid-cols-1 justify-items-center gap-4 max-md:min-w-20 max-md:gap-2.5 max-md:first:ml-4 max-sm:min-w-[60px] max-sm:max-w-[60px] max-sm:gap-1.5"> <div class="shimmer relative h-[110px] w-[110px] overflow-hidden rounded-full max-md:h-20 max-md:w-20 max-sm:h-[60px] max-sm:w-[60px]"> <img class="rounded-sm bg-zinc-100"> </div> <p class="shimmer h-[27px] w-[90px] rounded-2xl max-sm:h-5 max-sm:w-[70px]"></p> </div> </div> <span class="shimmer absolute -left-10 top-9 flex h-[50px] w-[50px] rounded-full max-sm:hidden" role="presentation" ></span> <span class="shimmer absolute -right-6 top-9 flex h-[50px] w-[50px] rounded-full max-sm:hidden" role="presentation" ></span> </div></div> </template>
        • app.component('v-categories-carousel', { template: '#v-categories-carousel-template', props: [ 'src', 'title', 'navigationLink', ], data() { return { isLoading: true, categories: [], }; }, mounted() { this.getCategories(); }, methods: { getCategories() { this.$axios.get(this.src) .then(response => { this.categories = response.data.data; this.isLoading = false; this.$nextTick(() => { this.initSwiper(); }); }).catch(error => { console.log(error); }); }, initSwiper() { if (!window.Swiper) return; new window.Swiper(this.$refs.swiperRoot, { slidesPerView: 6, spaceBetween: 30, grabCursor: true, breakpoints: { 0: { slidesPerView: 3, spaceBetween: 16, }, 640: { slidesPerView: 4, spaceBetween: 20, }, 1024: { slidesPerView: 8, spaceBetween: 10, } }, pagination: { el: this.$refs.swiperRoot.querySelector('.swiper-pagination'), clickable: true, }, }); } }, });
        • <div class="py-10"> <div class="mx-auto "> <div class="w-full flex justify-center mt-12"> <div class="w-full max-w-[1200px] flex flex-col items-center justify-center gap-6 p-6 rounded-2xl bg-white text-center" style=" box-shadow: 0 10px 20px rgba(0,0,0,0.2), 0 20px 40px rgba(0,0,0,0.15), 0 30px 60px rgba(0,0,0,0.1), 0 40px 80px rgba(0,0,0,0.07), 0 50px 100px rgba(0,0,0,0.05), 0 60px 120px rgba(0,0,0,0.03), 0 80px 160px rgba(0,0,0,0.02); transition: transform 0.4s ease, box-shadow 0.4s ease; " @mouseenter="hover = true" @mouseleave="hover = false" :style="hover ? 'transform: translateY(-8px) scale(1.02); box-shadow: 0 20px 40px rgba(0,0,0,0.3), 0 40px 80px rgba(0,0,0,0.25), 0 60px 120px rgba(0,0,0,0.2), 0 80px 160px rgba(0,0,0,0.15);' : ''" > <h2 class="text-2xl font-bold text-gray-800 flex items-center gap-2"> <i class="fas fa-robot text-orange-500"></i> Yapay Zeka ile OEM Kodunuzu Arayın </h2> <div class="relative w-full"> <div class="absolute inset-0 z-[1] bg-white/80 backdrop-blur-sm rounded-lg flex flex-col items-center justify-center"> <i class="fas fa-lock text-orange-500 text-xl mb-2"></i> <p class="text-sm font-semibold text-gray-800"> Arama yapmak için giriş yapmalısın </p> <a href="https://www.yedekparcalarim.com/customer/login" class="mt-2 px-4 py-2 bg-orange-500 hover:bg-orange-600 text-white rounded-lg text-sm font-semibold shadow"> Giriş Yap </a> </div> <p class="text-gray-600 text-sm"> Ürün adını yazıp <span class="font-semibold text-gray-800">“Ara”</span>ya basın. </p> <div class="flex flex-col sm:flex-row w-full gap-3 mt-2 relative mt-5"> <input v-model="productName" type="text" placeholder="Ürün adı giriniz..." disabled class="flex-1 w-full px-4 py-3 sm:py-2 rounded-lg border border-gray-300 bg-gray-50 text-gray-800 placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-orange-400 shadow-sm disabled:opacity-50 disabled:cursor-not-allowed" /> <button @click="searchOEM" v-if="!isLoading" disabled class="w-full sm:w-auto flex items-center justify-center gap-2 px-6 py-3 sm:py-2 rounded-lg bg-orange-500 hover:bg-orange-600 text-white font-semibold shadow transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed" > <i class="fas fa-magnifying-glass"></i> Ara </button> </div> </div> <div v-if="outputText" class="mt-4 px-6 py-3 rounded-lg font-mono font-bold text-gray-800 shadow-md bg-gray-100 border border-gray-300 flex items-center justify-center gap-2 w-full" > <i class="fas fa-key text-orange-500"></i> {{ outputText }} </div> </div> </div> </div> <div v-if="modalOpen" class="fixed inset-0 bg-black bg-opacity-40 backdrop-blur-sm flex items-center justify-center z-50 transition-opacity duration-300"> <div class="bg-white rounded-2xl p-6 w-full max-w-lg relative shadow-2xl border border-gray-100 transform scale-95 transition-transform duration-300 ease-out" @click.self="modalOpen = false"> <div class="text-center mb-6"> <h2 class="text-2xl font-bold text-gray-900 mb-2 tracking-tight"> Eşleşen Ürünler </h2> <p class="text-gray-600 mb-4"> Bulunan OEM Kodları: </p> <div class="inline-block bg-gray-100 px-4 py-2 rounded-md text-gray-800 font-medium"> {{ outputText }} </div> </div> <ul class="space-y-4 max-h-96 overflow-y-auto pr-2 scrollbar-thin scrollbar-thumb-gray-300 scrollbar-track-gray-100"> <li v-for="product in matches" :key="product.id" class="flex items-center gap-4 p-4 border border-gray-100 rounded-xl hover:shadow-lg transition-shadow duration-300"> <div class="flex-shrink-0 w-16 h-16 rounded-lg overflow-hidden shadow-sm"> <img :src="product.base_image?.original_image_url" alt="product image" class="w-full h-full object-cover"/> </div> <div class="flex-1"> <p class="font-semibold text-gray-900 text-lg line-clamp-2">{{ product.name }}</p> <p class="text-gray-500 mt-1">{{ product.formatted_price }}</p> </div> <div class="flex-shrink-0"> <a :href="`/urun/${product.url_key}`" target="_blank" class="flex items-center gap-2 px-4 py-2 bg-gradient-to-r from-orange-500 to-yellow-400 text-white rounded-lg font-semibold shadow hover:scale-105 transition-transform duration-200" > <i class="fas fa-arrow-right"></i> Ürüne Git </a> </div> </li> </ul> <p v-if="matches.length === 0" class="text-gray-400 text-center py-6">Eşleşen ürün bulunamadı.</p> <button @click="modalOpen=false" class="absolute top-4 right-4 w-9 h-9 flex items-center justify-center rounded-full bg-white shadow-lg hover:bg-gray-100 transition-colors"> <i class="fas fa-times text-gray-600"></i> </button> </div> </div> </div>
        • app.component('v-oem-search', { template: '#v-oem-search-template', data() { return { productName: '', outputText: '', outputColor: 'linear-gradient(to right, #3b82f6, #8b5cf6)', matches: [], modalOpen: false, isLoading: false, // vehicle search örnek vehicleSearch: '', selectedMake: null, selectedModel: null, selectedEngine: null, }; }, methods: { async searchOEM() { this.outputText = 'Yapay Zekaya Soruluyor ...'; this.isLoading = true; try { const res = await fetch(`/api/products/oem-search?product=${encodeURIComponent(this.productName)}`); const data = await res.json(); console.log("API RESPONSE:", data); // 🔥 DEBUG // 🔥 Eğer matches yoksa fallback if (data.matches) { this.matches = data.matches; this.outputText = Array.isArray(data.ai?.oem) ? data.ai.oem.join(", ") : "OEM yok"; this.modalOpen = this.matches.length > 0; } else if (Array.isArray(data)) { // 🔥 senin attığın raw response için this.matches = data; this.outputText = "OEM listesi alınamadı"; this.modalOpen = data.length > 0; } else { this.matches = []; this.outputText = "Sonuç Bulunamadı"; this.modalOpen = false; } } catch (err) { console.error(err); this.outputText = 'Sonuç Bulunamadı'; this.modalOpen = false; } this.isLoading = false; }, searchVehicle() { // vehicle arama mantığı buraya console.log('Araç arama:', this.vehicleSearch, this.selectedMake, this.selectedModel, this.selectedEngine); } } });
        • <div class="w-full mt-20 " v-if="! isLoading && products.length" > <div class="flex justify-between items-center"> <h2 class="text-3xl max-md:text-2xl max-sm:text-xl"> {{ title }} </h2> <a :href="navigationLink" v-if="navigationLink" class="hidden lg:inline-flex items-center gap-2 text-base hover:text-orange-500 transition" > Tümünü Gör <span class="icon-arrow-right text-xl"></span> </a> </div> <div class="swiper mt-10 relative" ref="swiperRoot"> <div class="swiper-wrapper"> <div class="swiper-slide" v-for="product in products" :key="product.id" > <v-product-card class="w-full" :product="product"></v-product-card> </div> </div> <div class="swiper-pagination premium-pagination"></div> </div> <a :href="navigationLink" v-if="navigationLink" class="bg-white text-black shadow hover:bg-orange-500 hover:text-white mx-auto mt-8 block w-max rounded-2xl px-11 py-3 text-center text-base lg:hidden" > Tümünü Gör </a> </div> <template v-if="isLoading"> <div class="container mt-20 max-lg:px-8 max-md:mt-8 max-sm:mt-7 max-sm:!px-4"> <div class="flex items-center justify-between"> <h3 class="shimmer h-8 w-[200px] max-sm:h-7"></h3> <div class="flex items-center justify-between gap-8 max-lg:hidden"> <span class="shimmer inline-block h-6 w-6" role="presentation" ></span> <span class="shimmer inline-block h-6 w-6 max-sm:hidden" role="presentation" ></span> </div> <div class="shimmer h-7 w-24 max-sm:h-5 max-sm:w-[68px] lg:hidden"></div> </div> <div class="scrollbar-hide mt-10 flex gap-8 overflow-auto pb-2.5 max-md:mt-5 max-sm:gap-4"> <div class="grid gap-2.5 relative w-full max-w-[291px] max-sm:grid-cols-1 min-w-[291px] max-md:h-fit max-md:min-w-56 max-sm:min-w-[192px]"> <div class="shimmer relative w-full rounded max-sm:!rounded-lg"> <div class="after:content-[' '] relative after:block after:pb-[calc(100%+9px)]"></div> </div> <div class="grid content-start gap-2.5 max-sm:gap-1"> <p class="shimmer h-4 w-3/4"></p> <p class="shimmer h-4 w-[55%]"></p> <div class="mt-3 flex hidden gap-4"> <span class="shimmer block h-[30px] w-[30px] rounded-full"></span> <span class="shimmer block h-[30px] w-[30px] rounded-full"></span> </div> </div> </div> <div class="grid gap-2.5 relative w-full max-w-[291px] max-sm:grid-cols-1 min-w-[291px] max-md:h-fit max-md:min-w-56 max-sm:min-w-[192px]"> <div class="shimmer relative w-full rounded max-sm:!rounded-lg"> <div class="after:content-[' '] relative after:block after:pb-[calc(100%+9px)]"></div> </div> <div class="grid content-start gap-2.5 max-sm:gap-1"> <p class="shimmer h-4 w-3/4"></p> <p class="shimmer h-4 w-[55%]"></p> <div class="mt-3 flex hidden gap-4"> <span class="shimmer block h-[30px] w-[30px] rounded-full"></span> <span class="shimmer block h-[30px] w-[30px] rounded-full"></span> </div> </div> </div> <div class="grid gap-2.5 relative w-full max-w-[291px] max-sm:grid-cols-1 min-w-[291px] max-md:h-fit max-md:min-w-56 max-sm:min-w-[192px]"> <div class="shimmer relative w-full rounded max-sm:!rounded-lg"> <div class="after:content-[' '] relative after:block after:pb-[calc(100%+9px)]"></div> </div> <div class="grid content-start gap-2.5 max-sm:gap-1"> <p class="shimmer h-4 w-3/4"></p> <p class="shimmer h-4 w-[55%]"></p> <div class="mt-3 flex hidden gap-4"> <span class="shimmer block h-[30px] w-[30px] rounded-full"></span> <span class="shimmer block h-[30px] w-[30px] rounded-full"></span> </div> </div> </div> <div class="grid gap-2.5 relative w-full max-w-[291px] max-sm:grid-cols-1 min-w-[291px] max-md:h-fit max-md:min-w-56 max-sm:min-w-[192px]"> <div class="shimmer relative w-full rounded max-sm:!rounded-lg"> <div class="after:content-[' '] relative after:block after:pb-[calc(100%+9px)]"></div> </div> <div class="grid content-start gap-2.5 max-sm:gap-1"> <p class="shimmer h-4 w-3/4"></p> <p class="shimmer h-4 w-[55%]"></p> <div class="mt-3 flex hidden gap-4"> <span class="shimmer block h-[30px] w-[30px] rounded-full"></span> <span class="shimmer block h-[30px] w-[30px] rounded-full"></span> </div> </div> </div> </div> <a class="shimmer mx-auto mt-16 block h-12 w-[150.172px] rounded-2xl max-md:hidden" role="button" aria-label="Show more products" ></a> </div> </template>
        • app.component('v-products-carousel', { template: '#v-products-carousel-template', props: ['src','title','navigationLink'], data() { return { isLoading: true, products: [], swiperInstance: null, }; }, mounted() { this.getProducts(); }, methods: { getProducts() { this.$axios.get(this.src) .then(response => { this.products = response.data.data; this.isLoading = false; this.$nextTick(() => { this.initSwiper(); }); }).catch(error => { console.log(error); }); }, initSwiper() { if (!window.Swiper) return; this.swiperInstance = new window.Swiper(this.$refs.swiperRoot, { slidesPerView: 4, spaceBetween: 30, grabCursor: true, loop: this.products.length > 4, breakpoints: { 0: { slidesPerView: 1.5, spaceBetween: 16, }, 640: { slidesPerView: 4, spaceBetween: 20, }, 1024: { slidesPerView: 5, spaceBetween: 25, }, 1280: { slidesPerView: 6, spaceBetween: 30, } }, pagination: { el: this.$refs.swiperRoot.querySelector('.swiper-pagination'), clickable: true, }, }); } } });
        • <div class="relative w-full"> <div class="swiper w-full" ref="swiperRoot"> <div class="swiper-wrapper"> <div class="swiper-slide flex items-center justify-center" v-for="(brand, index) in brands" :key="index" > <a :href="brand.link || '#'" class=" flex flex-col items-center justify-center w-full h-full p-4 gap-2 group " > <img :src="brand.logo || '/images/placeholder.png'" :alt="brand.name" class=" max-h-[100px] object-contain transition duration-300 " /> <span class=" text-xs sm:text-sm text-gray-600 group-hover:text-black transition duration-300 text-center line-clamp-1 " > {{ brand.name }} </span> </a> </div> </div> <div class="swiper-pagination premium-pagination !bottom-4"></div> </div> </div>
        • app.component('v-brand-swiper', { props: { brands: { type: Array, default: () => [] } }, template: '#v-brand-swiper-template', mounted() { this.$nextTick(() => { if (!window.Swiper) return; // 🔥 FIX: undefined crash engelle const slideCount = this.brands ? this.brands.length : 0; if (slideCount === 0) return; new window.Swiper(this.$refs.swiperRoot, { loop: slideCount > 4, slidesPerView: 2, spaceBetween: 10, breakpoints: { 640: {slidesPerView: 3}, 768: {slidesPerView: 4}, 1024: {slidesPerView: 6}, 1280: {slidesPerView: 8}, }, autoplay: slideCount > 4 ? { delay: 2500, disableOnInteraction: false, } : false, pagination: { el: this.$refs.swiperRoot.querySelector('.swiper-pagination'), clickable: true, }, }); }); } });
        • <div :id="'image-shimmer-' + $.uid" class="shimmer" v-bind="$attrs" v-if="isLoading" > </div> <img v-bind="$attrs" :data-src="src" :id="'image-' + $.uid" @load="onLoad" v-show="! isLoading" v-if="lazy" > <img v-bind="$attrs" :data-src="src" :id="'image-' + $.uid" @load="onLoad" v-else v-show="! isLoading" >
        • app.component('v-shimmer-image', { template: '#v-shimmer-image-template', props: { lazy: { type: Boolean, default: true, }, src: { type: String, default: '', }, }, data() { return { isLoading: true, }; }, mounted() { let self = this; if (! this.lazy) { return; } let lazyImageObserver = new IntersectionObserver(function(entries, observer) { entries.forEach(function(entry) { if (entry.isIntersecting) { let lazyImage = document.getElementById('image-' + self.$.uid); lazyImage.src = lazyImage.dataset.src; lazyImageObserver.unobserve(lazyImage); } }); }); lazyImageObserver.observe(document.getElementById('image-shimmer-' + this.$.uid)); }, methods: { onLoad() { this.isLoading = false; }, }, });
        • <div v-if="mode != 'list'" :class="[ 'group relative flex flex-col overflow-hidden rounded-xl border border-gray-200 bg-white transition-all duration-300 hover:shadow-lg', mode === 'list' ? '' : product.is_saleable ? 'border-t-4 border-t-orange-500' : 'border-t-4 border-t-red-100' ]" > <div class="relative flex items-center justify-center h-[260px] bg-white p-4" @mouseleave="resetHover" > <div class="absolute top-3 left-3 flex flex-col gap-2 z-1"> <div v-if="product.is_hafta" class="flex items-center gap-1.5 bg-gradient-to-r from-purple-600 to-indigo-600 text-white text-[11px] font-semibold px-3 py-1.5 rounded-full shadow-md" > <i class="fa-solid fa-bolt text-[10px]"></i> Haftanın Ürünü </div> <div v-else-if="product.is_featured" class="flex items-center gap-1.5 bg-black/90 text-white text-[11px] font-semibold px-3 py-1.5 rounded-full shadow-md" > <i class="fa-solid fa-star text-yellow-400 text-[10px]"></i> Öne Çıkan </div> <div v-if="product.is_new" class="flex items-center gap-1.5 bg-emerald-500 text-white text-[11px] font-semibold px-3 py-1.5 rounded-full shadow-md" > <i class="fa-solid fa-circle-check text-[10px]"></i> Yeni Ürün </div> </div> <span class="absolute right-3 top-3 flex h-9 w-9 items-center justify-center rounded-full bg-white shadow-md cursor-pointer transition hover:bg-red-500 hover:text-white hover:scale-110" :class="product.is_wishlist ? 'text-red-600' : 'text-gray-600'" @click.prevent="addToWishlist()" > <i :class="product.is_wishlist ? 'fa-solid fa-heart' : 'fa-regular fa-heart'"></i> </span> <a :href="`https://www.yedekparcalarim.com/urun/${product.url_key}`" class="text-[16px] font-normal tracking-[-0.05px] leading-6 mb-[3px] min-h-[48px] text-gray-800 line-clamp-2" > <img :src="currentImage" class="w-full h-full object-contain" :alt="product.name" /> </a> <div v-if="product.images && product.images.length > 1" class="absolute inset-0 flex" > <div v-for="(img,index) in product.images" :key="index" class="flex-1" @mouseenter="setHover(index)" ></div> </div> <div v-if="product.images && product.images.length > 1" class="absolute bottom-2 left-0 right-0 flex justify-center gap-1" > <span v-for="(img,index) in product.images" :key="index" class="w-[6px] h-[6px] rounded-full transition-all duration-200" :class="hoverIndex === index ? 'bg-black scale-125' : 'bg-gray-300'" ></span> </div> </div> <div class="flex flex-1 flex-col p-3"> <a :href="`https://www.yedekparcalarim.com/urun/${product.url_key}`" class="text-[16px] font-normal tracking-[-0.05px] leading-6 mb-[3px] min-h-[48px] text-gray-800 line-clamp-2" > {{ product.name }} </a> <div v-if="product?.ratings?.total" class="mt-1 flex items-center text-xs text-gray-500 gap-1" > <div class="flex items-center text-yellow-400 text-[12px]"> <i v-for="i in 5" :key="i" :class="[ 'fa-star', i <= Math.floor(product.ratings.average) ? 'fas text-black' : (i - product.ratings.average < 1 && i - product.ratings.average > 0) ? 'fas fa-star-half-alt text-black' : 'far text-gray-300' ]" ></i> </div> <span class="ml-1 text-gray-500"> ({{ product.ratings.total }}) </span> </div> <div class="flex-1 pt-5"></div> <div v-if="product.price?.regular?.formatted_price" class="text-xs text-gray-400 line-through" > {{ product.price.regular.formatted_price }} </div> <div v-if="product.price?.regular?.formatted_price" class="text-xs text-pink-500 font-semibold" > SEPETTE </div> <p class="text-xs text-gray-500 mt-1"> SKU : <span class="font-medium text-gray-700">{{ product.sku }}</span> </p> <div class="text-lg font-bold text-black" v-html="product.price_html" ></div> <div class="flex items-center justify-between mt-1"> <button v-if="product.is_saleable" class="mt-3 w-full rounded-xl bg-orange-600 py-3 text-sm font-semibold text-white transition active:scale-[0.98]" :disabled="isAddingToCart" @click="addToCart()" > Sepete Ekle </button> <button v-else class="mt-3 w-full rounded-xl bg-gray-300 py-3 text-sm font-semibold text-white transition hover:bg-gray-300" > Stokta Yok </button> </div> </div> </div> <div v-else class="flex items-center gap-4 w-full border-b border-gray-200 py-3 hover:bg-gray-50 transition" > <div class="w-[160px] h-[120px] flex-shrink-0 bg-gray-100 rounded overflow-hidden"> <div class="relative"> <a href="#"> <img class="w-full h-full object-cover" :src="product.base_image.medium_image_url" :alt="product.name" > <div class="absolute top-3 left-3 flex flex-col gap-2 z-1"> <div v-if="product.is_hafta" class="flex items-center gap-1.5 bg-gradient-to-r from-purple-600 to-indigo-600 text-white text-[11px] font-semibold px-3 py-1.5 rounded-full shadow-md" > <i class="fa-solid fa-bolt text-[10px]"></i> Haftanın Ürünü </div> <div v-else-if="product.is_featured" class="flex items-center gap-1.5 bg-black/90 text-white text-[11px] font-semibold px-3 py-1.5 rounded-full shadow-md" > <i class="fa-solid fa-star text-yellow-400 text-[10px]"></i> Öne Çıkan </div> <div v-if="product.is_new" class="flex items-center gap-1.5 bg-emerald-500 text-white text-[11px] font-semibold px-3 py-1.5 rounded-full shadow-md" > <i class="fa-solid fa-circle-check text-[10px]"></i> Yeni </div> </div> </a> <span class="absolute right-3 top-3 flex h-9 w-9 items-center justify-center rounded-full bg-white shadow-md cursor-pointer transition hover:scale-110" :class="product.is_wishlist ? 'text-red-600' : 'text-gray-700'" @click.prevent="addToWishlist()" > <i :class="product.is_wishlist ? 'fa-solid fa-heart' : 'fa-regular fa-heart'"></i> </span> </div> </div> <div class="flex-1 min-w-0"> <a :href="`https://www.yedekparcalarim.com/urun/${product.url_key}`" class="text-blue-700 hover:underline font-medium text-sm" > {{ product.name }} </a> </div> <div class="w-[140px] text-center"> <div class="text-black-600 font-semibold text-sm" v-html="product.price_html" ></div> </div> </div>
        • app.component('v-product-card', { template: '#v-product-card-template', props: ['mode', 'product'], data() { return { isCustomer: '', isAddingToCart: false, swiper: null, hoverIndex : 0, } }, computed: { currentImage() { if (!this.product.images || this.product.images.length === 0) { return this.product.base_image.medium_image_url } return this.product.images[this.hoverIndex]?.medium || this.product.base_image.medium_image_url } }, mounted() { this.$nextTick(() => { if (!window.Swiper) return; this.swiper = new window.Swiper(this.$refs.productSwiper, { slidesPerView: 1, spaceBetween: 10, breakpoints: { 640: { slidesPerView: 2 }, 1024: { slidesPerView: 3 }, 1400: { slidesPerView: 6 } }, speed: 300, loop: this.product.images && this.product.images.length > 1 }); }); }, methods: { getProductImage(product) { return ( product?.base_image?.large_image_url || product?.base_image?.medium_image_url || product?.base_image?.small_image_url || '' ); }, addToWishlist() { if (this.isCustomer) { this.$axios.post(`https://www.yedekparcalarim.com/api/customer/wishlist`, { product_id: this.product.id }) .then(response => { this.product.is_wishlist = ! this.product.is_wishlist; this.$emitter.emit('add-flash', { type: 'success', message: response.data.data.message }); }) .catch(error => {}); } else { window.location.href = "https://www.yedekparcalarim.com/customer/login"; } }, setHover(index) { this.hoverIndex = index }, resetHover() { this.hoverIndex = 0 }, addToCompare(productId) { /** * This will handle for customers. */ if (this.isCustomer) { this.$axios.post('https://www.yedekparcalarim.com/api/compare-items', { 'product_id': productId }) .then(response => { this.$emitter.emit('add-flash', { type: 'success', message: response.data.data.message }); }) .catch(error => { if ([400, 422].includes(error.response.status)) { this.$emitter.emit('add-flash', { type: 'warning', message: error.response.data.data.message }); return; } this.$emitter.emit('add-flash', { type: 'error', message: error.response.data.message}); }); return; } /** * This will handle for guests. */ let items = this.getStorageValue() ?? []; if (items.length) { if (! items.includes(productId)) { items.push(productId); localStorage.setItem('compare_items', JSON.stringify(items)); this.$emitter.emit('add-flash', { type: 'success', message: "Ürün karşılaştırma listesine eklendi." }); } else { this.$emitter.emit('add-flash', { type: 'warning', message: "Ürün zaten karşılaştırma listesinde." }); } } else { localStorage.setItem('compare_items', JSON.stringify([productId])); this.$emitter.emit('add-flash', { type: 'success', message: "Ürün karşılaştırma listesine eklendi." }); } }, getStorageValue(key) { let value = localStorage.getItem('compare_items'); if (! value) { return []; } return JSON.parse(value); }, addToCart() { this.isAddingToCart = true; this.$axios.post('https://www.yedekparcalarim.com/api/checkout/cart', { 'quantity': 1, 'product_id': this.product.id, }) .then(response => { if (response.data.message) { this.$emitter.emit('update-mini-cart', response.data.data ); this.$emitter.emit('add-flash', { type: 'success', message: response.data.message }); } else { this.$emitter.emit('add-flash', { type: 'warning', message: response.data.data.message }); } this.isAddingToCart = false; }) .catch(error => { this.$emitter.emit('add-flash', { type: 'error', message: error.response.data.message }); if (error.response.data.redirect_uri) { window.location.href = error.response.data.redirect_uri; } this.isAddingToCart = false; }); }, }, });
        • <transition-group tag='div' name="flash-group" enter-from-class="ltr:translate-x-full rtl:-translate-x-full" enter-active-class="transform transition duration-200 ease-in-out" enter-to-class="ltr:translate-x-0 rtl:-translate-x-0" leave-from-class="ltr:translate-x-0 rtl:-translate-x-0" leave-active-class="transform transition duration-200 ease-in-out" leave-to-class="ltr:translate-x-full rtl:-translate-x-full" class='fixed top-5 z-[1001] grid justify-items-end gap-2.5 max-sm:hidden ltr:right-5 rtl:left-5' > <v-flash-item v-for='flash in flashes' :key='flash.uid' :flash="flash" @onRemove="remove($event)"/> </transition-group> <transition-group tag='div' name="flash-group" enter-from-class="ltr:translate-y-full rtl:-translate-y-full" enter-active-class="transform transition duration-200 ease-in-out" enter-to-class="ltr:translate-y-0 rtl:-translate-y-0" leave-from-class="ltr:translate-y-0 rtl:-translate-y-0" leave-active-class="transform transition duration-200 ease-in-out" leave-to-class="ltr:translate-y-full rtl:-translate-y-full" class='fixed bottom-10 left-1/2 z-[1001] grid -translate-x-1/2 -translate-y-1/2 transform justify-items-center gap-2.5 sm:hidden' > <v-flash-item v-for='flash in flashes' :key='flash.uid' :flash="flash" @onRemove="remove($event)"/> </transition-group>
        • app.component('v-flash-group', { template: '#v-flash-group-template', data() { return { uid: 0, flashes: [] } }, created() { this.loadInitialFlashes(); this.registerGlobalEvents(); }, methods: { loadInitialFlashes() { let flashes = []; if (typeof(flashes) === 'string') { return; } flashes.forEach(flash => { flash.uid = this.uid++; this.flashes.push(flash); }); }, add(flash) { flash.uid = this.uid++; this.flashes.push(flash); }, remove(flash) { let index = this.flashes.indexOf(flash); this.flashes.splice(index, 1); }, registerGlobalEvents() { this.$emitter.on('add-flash', this.add); }, } });
        • <div> <transition tag="div" name="modal-overlay" enter-class="duration-300 ease-out" enter-from-class="opacity-0" enter-to-class="opacity-100" leave-class="duration-200 ease-in" leave-from-class="opacity-100" leave-to-class="opacity-0" > <div class="fixed inset-0 z-20 bg-gray-500 bg-opacity-50 transition-opacity" v-show="isOpen" ></div> </transition> <transition tag="div" name="modal-content" enter-class="duration-300 ease-out" enter-from-class="translate-y-4 opacity-0 md:translate-y-0 md:scale-95" enter-to-class="translate-y-0 opacity-100 md:scale-100" leave-class="duration-200 ease-in" leave-from-class="translate-y-0 opacity-100 md:scale-100" leave-to-class="translate-y-4 opacity-0 md:translate-y-0 md:scale-95" > <div class="fixed inset-0 z-20 transform overflow-y-auto transition" v-show="isOpen" > <div class="flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0"> <div class="absolute left-1/2 top-1/2 z-[999] w-full max-w-[475px] -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-xl bg-white p-5 max-md:w-[90%] max-sm:p-4"> <div class="flex gap-2.5"> <div> <span class="flex rounded-full border border-gray-300 p-2.5"> <i class="icon-error text-3xl max-sm:text-xl"></i> </span> </div> <div> <div class="flex items-center justify-between gap-5 text-xl max-sm:text-lg"> {{ title }} </div> <div class="pb-5 pt-1.5 text-left text-sm text-gray-500"> {{ message }} </div> <div class="flex justify-end gap-2.5"> <button type="button" class="secondary-button max-md:py-3 max-sm:px-6 max-sm:py-2.5" @click="disagree" > {{ options.btnDisagree }} </button> <button type="button" class="primary-button max-md:py-3 max-sm:px-6 max-sm:py-2.5" @click="agree" > {{ options.btnAgree }} </button> </div> </div> </div> </div> </div> </div> </transition> </div>
        • app.component('v-modal-confirm', { template: '#v-modal-confirm-template', data() { return { isOpen: false, title: '', message: '', options: { btnDisagree: '', btnAgree: '', }, agreeCallback: null, disagreeCallback: null, }; }, created() { this.registerGlobalEvents(); }, methods: { open({ title = "Emin misiniz?", message = "Bu işlemi yapmak istediğinizden emin misiniz?", options = { btnDisagree: "İptal", btnAgree: "Onayla", }, agree = () => {}, disagree = () => {}, }) { this.isOpen = true; const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; document.body.style.overflow = 'hidden'; document.body.style.paddingRight = `${scrollbarWidth}px`; this.title = title; this.message = message; this.options = options; this.agreeCallback = agree; this.disagreeCallback = disagree; }, disagree() { this.isOpen = false; document.body.style.overflow = 'auto'; document.body.style.paddingRight = ''; this.disagreeCallback(); }, agree() { this.isOpen = false; document.body.style.overflow = 'auto'; document.body.style.paddingRight = ''; this.agreeCallback(); }, registerGlobalEvents() { this.$emitter.on('open-confirm-modal', this.open); }, } });
        • <v-desktop-header v-if="isDesktop"></v-desktop-header> <v-mobile-header v-else></v-mobile-header>
        • app.component('v-header-switcher', { template: '#v-header-switcher-template', data() { return { isDesktop: window.innerWidth >= 1024 } }, mounted() { this.media = window.matchMedia('(min-width: 1024px)'); this.media.addEventListener('change', this.handleMedia); }, beforeUnmount() { this.media.removeEventListener('change', this.handleMedia); }, methods: { handleMedia(e) { this.isDesktop = e.matches; } } }); app.component('v-desktop-header', { template: '#v-desktop-header-template' }); app.component('v-mobile-header', { template: '#v-mobile-header-template' });
        • <div class="flex flex-wrap max-lg:hidden"> <div class=" bg-white border-b sticky top-0 z-50 shadow-sm w-full"> <div class="max-w-[1400px] mx-auto px-4 "> <div class="flex items-center justify-between h-[110px] py-4 w-full"> <a href="https://www.yedekparcalarim.com" class="flex items-center gap-2"> <img src="https://www.yedekparcalarim.com/storage/channel/1/FEnydWxcxhooJNm0FjghfE2HiMA2iRRr45DIoJHg.png" alt="Yedek Parçalarım" class="h-20 w-26" > </a> <div class="flex-1 flex justify-center px-10"> <form action="https://www.yedekparcalarim.com/search" class="w-full " role="search" > <div class="relative"> <input type="text" name="query" value="" required placeholder="OEM, Yedek Parça Adı, Stok Kodu, Araç Marka + Yedek Parça vb." class="w-full h-12 rounded-full bg-gray-100 pl-14 pr-6 text-sm border border-gray-200 focus:outline-none focus:ring-2 focus:ring-orange-500 transition" > <i class="fa-solid fa-magnifying-glass absolute left-5 top-1/2 -translate-y-1/2 text-gray-500 text-sm"></i> </div> </form> </div> <div class="flex items-center gap-5"> <v-dropdown position="bottom-right" class="relative"> <div class="flex justify-center items-center space-x-3 font-semibold"> <div class="w-14 h-14 rounded-full bg-gray-100 flex items-center justify-center hover:bg-gray-200 cursor-pointer transition"> <i class="fa-solid fa-user text-gray-700 text-md font-semibold"></i> </div> <p class="cursor-pointer">Üye Ol</p> </div> <template v-slot:toggle> <div class="flex justify-center items-center space-x-3 font-semibold"> <div class="w-14 h-14 rounded-full bg-gray-100 flex items-center justify-center hover:bg-gray-200 cursor-pointer transition"> <i class="fa-solid fa-user text-gray-700 text-md font-semibold"></i> </div> <p class="cursor-pointer">Üye Ol</p> </div> </template> <template v-slot:content> <div class="p-5"> <div class="grid gap-3 p-4 w-48"> <a href="https://www.yedekparcalarim.com/customer/login" class="bg-orange-500 text-white text-center py-2 rounded-lg hover:bg-orange-600 transition"> <i class="fa-solid fa-right-to-bracket text-sm"></i> Giriş Yap </a> <a href="https://www.yedekparcalarim.com/customer/register" class="border border-gray-300 text-center py-2 rounded-lg hover:bg-gray-100 transition"> <i class="fa-solid fa-user-plus text-sm"></i> Üye Ol </a> </div> </div> </template> </v-dropdown> <div class="flex justify-center items-center space-x-3 font-semibold"> <v-mini-cart> <span class="icon-cart cursor-pointer text-2xl"></span></v-mini-cart> </div> </div> </div> </div></div><v-desktop-category></v-desktop-category></div>
        • <div class="lg:hidden bg-white shadow-sm"> <div class="flex justify-center py-4"> <a href="https://www.yedekparcalarim.com"> <img src="https://www.yedekparcalarim.com/storage/channel/1/FEnydWxcxhooJNm0FjghfE2HiMA2iRRr45DIoJHg.png" class="h-16 object-contain" alt="Yedek Parçalarım" > </a> </div> <div class="px-4 pb-4"> <form action="https://www.yedekparcalarim.com/search"> <div class="relative"> <i class="fa-solid fa-magnifying-glass absolute left-4 top-1/2 -translate-y-1/2 text-gray-400"></i> <input type="text" name="query" value="" placeholder="Ürün, marka veya model ara..." class="w-full pl-12 pr-4 py-3 rounded-xl border border-gray-200 focus:outline-none focus:ring-2 focus:ring-orange-400 text-sm" required > </div> </form> </div></div><div class="fixed bottom-0 left-0 right-0 z-[60] bg-white border-t border-gray-200 shadow-[0_-4px_15px_rgba(0,0,0,0.05)] lg:hidden"> <div class="grid grid-cols-4 items-center text-center py-3"> <a href="https://www.yedekparcalarim.com" class="flex flex-col items-center text-gray-600 text-xs"> <i class="fa-solid fa-house text-xl"></i> <span class="mt-1">Anasayfa</span> </a> <div class="flex justify-center"> <v-mobile-drawer></v-mobile-drawer> </div> <div class="flex flex-col items-center text-gray-600 text-xs relative"> <v-mini-cart> <span class="icon-cart cursor-pointer text-2xl"></span></v-mini-cart> <span class="mt-1">Sepet</span> </div> <a href="https://www.yedekparcalarim.com/customer/login" class="flex flex-col items-center text-gray-600 text-xs"> <i class="fa-solid fa-user text-xl"></i> <span class="mt-1">Giriş</span> </a> </div></div>
        • <div class="flex w-max max-w-[408px] justify-between gap-12 rounded-lg px-5 py-3 max-sm:max-w-80 max-sm:items-center max-sm:gap-2 max-sm:p-3" :style="typeStyles[flash.type]['container']" > <p class="flex items-center break-words text-sm" :style="typeStyles[flash.type]['message']" > <span class="icon-toast-done text-2xl ltr:mr-2.5 rtl:ml-2.5" :class="iconClasses[flash.type]" :style="typeStyles[flash.type]['icon']" ></span> {{ flash.message }} </p> <span class="icon-cancel max-h-4 max-w-4 cursor-pointer" :style="typeStyles[flash.type]['icon']" @click="remove" ></span> </div>
        • app.component('v-flash-item', { template: '#v-flash-item-template', props: ['flash'], data() { return { iconClasses: { success: 'icon-toast-done', error: 'icon-toast-error', warning: 'icon-toast-exclamation-mark', info: 'icon-toast-info', }, typeStyles: { success: { container: 'background: #D4EDDA', message: 'color: #155721', icon: 'color: #155721' }, error: { container: 'background: #F8D7DA', message: 'color: #721C24', icon: 'color: #721C24' }, warning: { container: 'background: #FFF3CD', message: 'color: #856404', icon: 'color: #856404' }, info: { container: 'background: #E2E3E5', message: 'color: #383D41', icon: 'color: #383D41' }, }, }; }, created() { var self = this; setTimeout(function() { self.remove() }, 3000) }, methods: { remove() { this.$emit('onRemove', this.flash) } } });
        • <div class="border-b bg-[#0c1830] text-white"> <div class="hidden md:flex mx-auto min-h-[40px] max-w-screen-2xl items-center px-4 text-[13px]"> <div class="flex items-center gap-6"> <a href="https://wa.me/905396350500" target="_blank" class="flex items-center gap-2 text-green-400 font-medium hover:text-green-300 transition"> <i class="fa-brands fa-whatsapp"></i> <span>0539 635 05 00</span> </a> <span class="h-4 w-px bg-white/20"></span> <a href="tel:05396350500" class="flex items-center gap-2 font-medium text-white/80 hover:text-white transition"> <i class="fa-solid fa-phone"></i> <span>0539 635 05 00</span> </a> </div> <div class="ml-auto flex items-center gap-6 text-white/90"> <span class="h-4 w-px bg-white/20"></span> <div class="flex items-center gap-2 text-white/80"> <i class="fa-solid fa-bolt"></i> <span>Hızlı Teslimat</span> </div> </div> </div> <div class="md:hidden flex items-center justify-center gap-4 px-4 py-2 text-[12px] font-medium"> <a href="https://wa.me/905396350500" target="_blank" class="flex items-center gap-1 text-green-400 font-medium hover:text-green-300 transition"> <i class="fa-brands fa-whatsapp"></i> <span>0539 635 05 00</span> </a> <span class="h-4 w-px bg-white/20"></span> <a href="tel:05396350500" class="flex items-center gap-1 text-white/80 hover:text-white transition"> <i class="fa-solid fa-phone"></i> <span>0539 635 05 00</span> </a> </div> </div>
        • app.component('v-topbar', { template: '#v-topbar-template', });
        • <v-drawer @close="onDrawerClose" is-active="" position="left" width="100%"> <template v-slot:toggle> <button class="flex flex-col items-center text-gray-600 text-xs"> <i class="fa-solid fa-layer-group text-xl"></i> <span class="mt-1">Kategori</span> </button> </template> <template v-slot:header="{ close }"> <div class="grid gap-y-2.5 max-md:gap-y-1.5 max-md:border-b max-md:border-zinc-200 max-md:gap-y-1 max-md:font-semibold"> <div class="px-5 py-4 text-lg font-semibold border-b"> Kategoriler </div> <div class="absolute top-5 max-sm:top-4 ltr:right-5 rtl:left-5"> <span class="icon-cancel cursor-pointer text-3xl max-md:text-2xl" @click="close" > </span> </div> </div> </template> <template v-slot:content> <div class="!p-0"> <v-mobile-category ref="mobileCategory"></v-mobile-category> </div> </template> </v-drawer>
        • <div class="bg-white"> <div v-if="stack.length" class="flex items-center gap-3 px-5 py-4 border-b"> <button @click="goBack" class="text-lg text-gray-600"> <i class="fa-solid fa-chevron-left"></i> </button> <span class="font-semibold text-lg"> {{ title }} </span> </div> <div v-for="item in currentItems" :key="item.id" class="flex items-center justify-between px-5 py-4 border-b hover:bg-gray-50"> <a :href="item.url" class="flex items-center gap-4 flex-1"> <div class="w-14 h-14 flex items-center justify-center overflow-hidden"> <img v-if="item.logo_url" :src="item.logo_url" class="w-full h-full object-contain"> </div> <span class="font-semibold text-gray-800 uppercase"> {{ item.name }} </span> </a> <button v-if="item.has_children" @click.prevent="openChild(item)" class="text-gray-400 text-lg px-3"> <i class="fa-solid fa-chevron-right"></i> </button> </div> </div>
        • app.component('v-mobile-category', { template: '#v-mobile-category-template', data() { return { categories: [], currentItems: [], stack: [], title: 'Kategoriler' } }, mounted() { this.$axios.get("https://www.yedekparcalarim.com/api/categories/brands-mobile") .then(response => { this.categories = response.data.data this.currentItems = this.categories }) }, methods: { openChild(item) { if (!item.has_children) { window.location = item.url return } this.stack.push({ items: this.currentItems, title: this.title }) this.title = item.name // Eğer children zaten varsa API çağırma if (item.children) { this.currentItems = item.children return } // sadece brand seviyesinde API çağır this.$axios.get("https://www.yedekparcalarim.com/api/categories/brands-mobile/" + item.id) .then(response => { this.currentItems = response.data.data }) }, goBack() { const last = this.stack.pop() if (!last) return this.currentItems = last.items this.title = last.title } } }) app.component('v-mobile-drawer', { template: '#v-mobile-drawer-template', methods: { onDrawerClose() { } } })
        • <div> <div class="select-none" ref="toggleBlock" @click="toggle()" > <slot name="toggle">Toggle</slot> </div> <transition tag="div" name="dropdown" enter-active-class="transition duration-100 ease-out" enter-from-class="scale-95 transform opacity-0" enter-to-class="scale-100 transform opacity-100" leave-active-class="transition duration-75 ease-in" leave-from-class="scale-100 transform opacity-100" leave-to-class="scale-95 transform opacity-0" > <div class="absolute z-20 w-max rounded-[20px] bg-white shadow-[0px_10px_84px_rgba(0,0,0,0.1)] max-md:rounded-lg" :style="positionStyles" v-show="isActive" > <slot name="content"></slot> <slot name="menu"></slot> </div> </transition> </div>
        • app.component('v-dropdown', { template: '#v-dropdown-template', props: { position: String, closeOnClick: { type: Boolean, required: false, default: true }, }, data() { return { toggleBlockWidth: 0, toggleBlockHeight: 0, isActive: false, }; }, created() { window.addEventListener('click', this.handleFocusOut); }, mounted() { this.toggleBlockWidth = this.$refs.toggleBlock.clientWidth; this.toggleBlockHeight = this.$refs.toggleBlock.clientHeight; }, beforeDestroy() { window.removeEventListener('click', this.handleFocusOut); }, computed: { positionStyles() { switch (this.position) { case 'bottom-left': return [ `min-width: ${this.toggleBlockWidth}px`, `top: ${this.toggleBlockHeight}px`, 'left: 0', ]; case 'bottom-right': return [ `min-width: ${this.toggleBlockWidth}px`, `top: ${this.toggleBlockHeight}px`, 'right: 0', ]; case 'top-left': return [ `min-width: ${this.toggleBlockWidth}px`, `bottom: ${this.toggleBlockHeight}px`, 'left: 0', ]; case 'top-right': return [ `min-width: ${this.toggleBlockWidth}px`, `bottom: ${this.toggleBlockHeight}px`, 'right: 0', ]; default: return [ `min-width: ${this.toggleBlockWidth}px`, `top: ${this.toggleBlockHeight}px`, 'left: 0', ]; } }, }, methods: { toggle() { /** * If still somehow width is zero then this will check for width one more time. */ if (this.toggleBlockWidth === 0) { this.toggleBlockWidth = this.$refs.toggleBlock.clientWidth; } /** * If still somehow height is zero then this will check for height one more time. */ if (this.toggleBlockHeight === 0) { this.toggleBlockHeight = this.$refs.toggleBlock.clientHeight; } this.isActive = ! this.isActive; }, handleFocusOut(e) { if (! this.$el.contains(e.target) || (this.closeOnClick && this.$el.children[1].contains(e.target))) { this.isActive = false; } }, }, });
        • <v-drawer class="bg-white" is-active="" position="right" width="500px"> <template v-slot:toggle> <div class="relative"> <div class="md:flex justify-center items-center space-x-2"> <a class="hidden cursor-pointer md:flex w-14 h-14 rounded-full bg-gray-100 items-center justify-center hover:bg-gray-200 transition"> <i class="fa-solid fa-cart-shopping text-gray-700 text-md"></i> </a> <p class="hidden cursor-pointer xl:flex">Sepetim</p> </div> <a class="flex md:hidden flex-col items-center text-gray-600 text-xs"> <i class="fa-solid fa-cart-shopping text-gray-700 text-xl"></i> </a> <span v-if="cart?.items_qty" class="absolute -top-1 -right-1 bg-orange-500 text-white text-xs w-5 h-5 rounded-full flex items-center justify-center font-semibold"> {{ cart.items_qty }} </span> </div> </template> <template v-slot:header="{ close }"> <div class="grid gap-y-2.5 max-md:gap-y-1.5 max-md:border-b max-md:border-zinc-200 max-md:gap-y-1 max-md:font-semibold"> <div class="grid gap-y-2.5 max-md:gap-y-1.5 max-md:border-b max-md:border-zinc-200 max-md:gap-y-1 max-md:font-semibold"> <div class="px-5 py-4 text-lg font-semibold border-b"> Alışveriş Sepeti </div> <p class="text-sm text-gray-500 mt-5 mb-0 pl-2" v-if="cart?.items_qty"> Sepetinizde <span class="font-semibold text-black">{{ cart.items_qty }}</span> ürün var </p> </div> <div class="absolute top-5 max-sm:top-4 ltr:right-5 rtl:left-5"> <span class="icon-cancel cursor-pointer text-3xl max-md:text-2xl" @click="close" > </span> </div> </div> </template> <template v-slot:content> <div class=""> <div v-if="cart?.items?.length" class="space-y-6"> <div v-for="item in cart.items" class="group flex gap-4 p-3 py-6 border-b last:border-0 transition" > <a :href="`https://www.yedekparcalarim.com/urun/${item.product_url_key}`" class="shrink-0" > <div class="w-20 h-20 rounded-xl overflow-hidden border bg-white shadow-sm"> <img :src="item.base_image.small_image_url" class="w-full h-full object-cover" /> </div> </a> <div class="flex-1 flex flex-col justify-between min-w-0"> <a :href="`https://www.yedekparcalarim.com/urun/${item.product_url_key}`" class="text-sm font-semibold text-gray-800 line-clamp-2" > {{ item.name }} </a> <div class="flex items-center justify-between mt-4"> <div class="text-md font-bold text-gray-900"> {{ item.formatted_price }} </div> <div class="flex items-center gap-3"> <div v-if="item.can_change_qty" class="flex items-center border rounded-full overflow-hidden bg-white shadow-sm" > <button class="px-3 py-1 text-gray-500 hover:bg-gray-100" @click="updateItem(item.quantity - 1, item)" > − </button> <div class="px-4 text-sm font-medium"> {{ item.quantity }} </div> <button class="px-3 py-1 text-gray-500 hover:bg-gray-100" @click="updateItem(item.quantity + 1, item)" > + </button> </div> <button class="text-gray-400 hover:text-red-500 transition text-lg" @click="removeItem(item.id)" > <i class="fa-solid fa-trash"></i> </button> </div> </div> </div> </div> </div> <div v-else class="flex flex-col items-center justify-center py-24 text-center"> <div class="mb-6 rounded-full bg-orange-50 p-6 shadow-sm"> <i class="fa-solid fa-cart-shopping text-4xl text-orange-500"></i> </div> <h2 class="text-2xl font-semibold text-gray-900"> Sepetiniz Boş 🛒 </h2> <p class="mt-3 max-w-md text-gray-500 text-sm"> Henüz sepetinize ürün eklemediniz. En çok satan ürünleri keşfetmeye ne dersiniz? </p> <a href="/" class="mt-6 inline-flex items-center gap-2 rounded-2xl bg-orange-500 px-6 py-3 text-sm font-medium text-white shadow-md transition hover:bg-orange-600 hover:shadow-lg"> <i class="fa-solid fa-store"></i> Alışverişe Başla </a> </div> </div> </template> <template v-slot:footer> <div class="pb-8 max-md:pb-2"> <div v-if="cart?.items?.length" class="pt-6 border-t space-y-4 p-5"> <div class="flex justify-between text-lg font-semibold"> <span>Toplam</span> <span>{{ cart.formatted_grand_total || cart.formatted_sub_total }}</span> </div> <div class="space-y-3 mt-4"> <a href="https://www.yedekparcalarim.com/checkout/onepage" class="block w-full text-center rounded-xl py-4 text-white font-semibold bg-gradient-to-r from-orange-600 to-orange-500 hover:opacity-95 transition shadow-md" > Sepete Git </a> </div> <div class="space-y-3 mt-4"> <a href="https://www.yedekparcalarim.com/checkout/onepage" class="block w-full text-center rounded-xl py-4 text-orange-500 border hover:opacity-95 transition shadow-md" > Alışverişe Devam Et </a> </div> </div> </div> </template> </v-drawer>
        • app.component("v-mini-cart", { template: '#v-mini-cart-template', data() { return { cart: null, freeShippingLimit: 500, } }, computed: { remainingForFreeShipping() { if (!this.cart) return 0; let total = parseFloat(this.cart.sub_total); let remain = this.freeShippingLimit - total; return remain > 0 ? remain.toFixed(2) : 0; }, shippingProgress() { if (!this.cart) return 0; let total = parseFloat(this.cart.sub_total); let percent = (total / this.freeShippingLimit) * 100; return percent > 100 ? 100 : percent; } }, mounted() { this.getCart(); this.$emitter.on('update-mini-cart', (cart) => { this.cart = cart; }); }, methods: { getCart() { this.$axios.get('https://www.yedekparcalarim.com/api/checkout/cart') .then(response => { this.cart = response.data.data; }); }, updateItem(quantity, item) { let qty = {}; qty[item.id] = quantity; this.$axios.put('https://www.yedekparcalarim.com/api/checkout/cart', {qty}) .then(response => { this.cart = response.data.data; }); }, removeItem(itemId) { this.$emitter.emit('open-confirm-modal', { agree: () => { this.$axios.post('https://www.yedekparcalarim.com/api/checkout/cart', { '_method': 'DELETE', 'cart_item_id': itemId, }) .then(response => { this.cart = response.data.data; }); } }); }, }, });
        • <div class=" bg-[#f8f9fa] border-b relative w-full"> <div v-if="activeCategory" class="absolute left-0 right-0 top-full h-[calc(100vh-120px)] bg-black/30 backdrop-blur-[1px] z-40" ></div> <div class="relative" @mouseenter="wrapperEnter" @mouseleave="wrapperLeave" > <div class="mx-auto flex justify-center items-center gap-[2.9rem] px-4 py-4"> <div v-for="category in limitedCategories" :key="category.id" class="relative" @mouseenter="setActive(category)" > <a :href="category.url"> <img :src="category.logo_url || '/images/car-placeholder.png'" class="h-10 object-contain opacity-80 hover:opacity-100 transition duration-200" :class="activeCategory && activeCategory.id === category.id ? 'opacity-100 scale-105' : ''" > </a> </div> <div v-if="hasMoreCategories"> <a href="/araclar" class="flex items-center font-[12px] gap-2 font-semibold bg-orange-600 p-3 rounded text-white hover:text-black transition" > <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="0 0 24 24" fill="currentColor"> <rect x="3" y="3" width="7" height="7" rx="1"/> <rect x="14" y="3" width="7" height="7" rx="1"/> <rect x="3" y="14" width="7" height="7" rx="1"/> <rect x="14" y="14" width="7" height="7" rx="1"/> </svg> <span>ARAÇLAR</span> </a> </div> </div> <transition name="fade-slide"> <div v-if="activeCategory && activeCategory.children?.length" class="absolute top-full left-0 w-full border-t z-50 flex justify-center" > <div class="w-full bg-[#f8f9fa] rounded-b-lg max-w-[1400px] p-8"> <div class="grid grid-cols-2 md:grid-cols-6 lg:grid-cols-9 xl:grid-cols-12"> <div v-for="child in activeCategory.children" :key="child.id" class="flex flex-col items-center text-center" > <a :href="child.url" class="flex flex-col items-center" > <div class="w-[96px] h-[90px] bg-white rounded-xl flex items-center justify-center border border-gray-200 hover:shadow-md transition"> <img :src="child.logo_url || '/images/car-placeholder.png'" class="max-w-full max-h-full object-contain" > </div> <p class="text-xs font-medium text-gray-700 mt-2"> {{ child.name }} </p> </a> </div> </div> </div> </div> </transition> </div> </div>
        • app.component('v-desktop-category', { template: '#v-desktop-category-template', data() { return { categories: [], activeCategory: null, closeTimeout: null, } }, watch: { activeCategory(val) { document.body.style.overflow = val ? "hidden" : "auto"; } }, computed: { limitedCategories() { return this.categories.slice(0, 12) }, hasMoreCategories() { return this.categories.length > 12 } }, methods: { setActive(category) { this.activeCategory = category }, wrapperEnter() { if (this.closeTimeout) { clearTimeout(this.closeTimeout) } }, wrapperLeave() { this.closeTimeout = setTimeout(() => { this.activeCategory = null }, 150) } }, mounted() { this.$axios.get("https://www.yedekparcalarim.com/api/categories/brands") .then(response => { this.categories = response.data }) } })
        • <div> <div @click="open"> <slot name="toggle"></slot> </div> <transition tag="div" name="drawer-overlay" enter-class="duration-300 ease-out" enter-from-class="opacity-0" enter-to-class="opacity-100" leave-class="duration-200 ease-in" leave-from-class="opacity-100" leave-to-class="opacity-0" > <div class="fixed inset-0 z-20 bg-gray-500 bg-opacity-50 transition-opacity" v-show="isOpen" ></div> </transition> <transition tag="div" name="drawer" :enter-from-class="enterFromLeaveToClasses" enter-active-class="transform transition duration-200 ease-in-out" enter-to-class="translate-x-0" leave-from-class="translate-x-0" leave-active-class="transform transition duration-200 ease-in-out" :leave-to-class="enterFromLeaveToClasses" > <div class="fixed z-[1000] overflow-hidden bg-white max-md:!w-full" :class="{ 'inset-x-0 top-0': position == 'top', 'inset-x-0 bottom-0 max-sm:max-h-full': position == 'bottom', 'inset-y-0 ltr:right-0 rtl:left-0': position == 'right', 'inset-y-0 ltr:left-0 rtl:right-0': position == 'left' }" style="width:400px" v-show="isOpen" > <div class="pointer-events-auto h-full w-full overflow-auto bg-white"> <div class="flex h-full w-full flex-col"> <div class="min-h-0 min-w-0 flex-1 overflow-auto"> <div class="flex h-full flex-col"> <slot name="header" :close="close" > Default Header </slot> <slot name="content"></slot> <slot name="footer"></slot> </div> </div> </div> </div> </div> </transition> </div>
        • app.component('v-drawer', { template: '#v-drawer-template', props: [ 'isActive', 'position', 'width' ], data() { return { isOpen: this.isActive, }; }, watch: { isActive: function(newVal, oldVal) { this.isOpen = newVal; } }, computed: { enterFromLeaveToClasses() { if (this.position == 'top') { return '-translate-y-full'; } else if (this.position == 'bottom') { return 'translate-y-full'; } else if (this.position == 'left') { return 'ltr:-translate-x-full rtl:translate-x-full'; } else if (this.position == 'right') { return 'ltr:translate-x-full rtl:-translate-x-full'; } } }, methods: { toggle() { this.isOpen = ! this.isOpen; if (this.isOpen) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow ='auto'; } document.body.style.paddingRight = ''; this.$emit('toggle', { isActive: this.isOpen }); }, open() { this.isOpen = true; const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; document.body.style.overflow = 'hidden'; document.body.style.paddingRight = `${scrollbarWidth}px`; this.$emit('open', { isActive: this.isOpen }); }, close() { this.isOpen = false; document.body.style.overflow = 'auto'; document.body.style.paddingRight = ''; this.$emit('close', { isActive: this.isOpen }); } }, });
        • /** * Load event, the purpose of using the event is to mount the application * after all of our `Vue` components which is present in blade file have * been registered in the app. No matter what `app.mount()` should be * called in the last. */ window.addEventListener("load", function (event) { app.mount("#app"); });

        Toplam 51 adet dahili style ve javascript kodu bulunmaktadır.

        css ve js dosyalarınızın sayısı mümkün olduğunca az olmalıdır.
        css ve js dosyaların sayısı normalden fazla olduğu taktirde site performansı düşecektir. Bu sebeple css ve js dosyalarınızdaki kodları tek bir dosyada toplayarak performansı artırabilirsiniz.
        css Dosyaları:
        • https://www.yedekparcalarim.com/themes/shop/default/build/assets/app-ONAdmodt.css
        • https://www.yedekparcalarim.com/themes/shop/default/build/assets/app-CDm3vP7l.css
        • https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap
        • https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css
        js Dosyaları:
        • https://www.googletagmanager.com/gtag/js?id=AW-18035716374
        • https://www.googletagmanager.com/gtag/js?id=G-4ZVCX36QES
        • https://www.yedekparcalarim.com/themes/shop/default/build/assets/app-fnht-J_Z.js
        • /cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js

        Toplam 4 adet css, 4 adet js dosyası bulunmaktadır.

        css, js, resim vb. dosyalar başka bir siteden çağırılmamalı.
        .css, .js, resim gibi dosyalar başka sunuculardan çekildiğinde kısa süreliğine ping gecikmesi yaşanabilir. Bu sebeple dışarıdan dosya çağrılmaması önerilir.
        Dışarıdan çağırılan dosyalar:
        • https://www.troyodeme.com/upload/cmspagefile/image/anasayfa/TROY-Logo-Tagline.png
        • https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap
        • https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css
        • https://www.googletagmanager.com/gtag/js?id=AW-18035716374
        • https://www.googletagmanager.com/gtag/js?id=G-4ZVCX36QES

        Toplam 5 adet dışarıdan çağırılan dosya bulunmaktadır.

        Sayfanızın W3 valid hataları mümkün olduğunca az olmalı.
        Botların sayfanızı sağlıklı tarayabilmesi için html kodlamasının kurallara uygun şekilde yazılması gerekir. Ayrıca W3 standartlarına uyduğunuzda sitenizin farklı tarayıcılarda farklı görünme olasılığı minimum düzeyde olacaktır.

        Sayfanızdaki html ve/veya css kodlar W3 kritlerlerine uygun değil.

        Bir sayfanın birden fazla benzeri varsa, canonical etiketi kullanılmalı.

        Canonical adresi: https://www.yedekparcalarim.com

        Sayfanızda canonical etiketi bulunuyor.

        Sayfanız mümkün olduğunca hızlı açılmalı.
        Sayfanızın açılış süresi 5 saniyeyi geçmemeli.

        Sayfanız 0.398 SN sürede açılıyor.

        CSS kodlarda @import olmamalı.
        Artık güncelliğini yitirmiş olan @import kullanılmamalı.

        Sayfanızda @import etiketi ile çağırılan css dosyası yok.

        Mümkün olduğunca html kod boyutu az, metin boyutu fazla olmalı.
        Arama motorları, sayfadaki kelimeleri indeksleyeceği için gereksiz kodlamadan kaçınmakta fayda var.
        • Metin boyutu: 51.876 KB
        • Kod boyutu: 206.754 KB
        • Metin kod oranı: %25.0907