# Script Sayfa Hedefleme

Hangi sayfalarda çalışacak
Kaynak: https://selwise.com/docs/custom-scripts/targeting

Bir script'in hangi sayfalarda çalışacağını **yol kuralları** belirler. Kural yalnızca sayfanın **yoluna** bakar; cihaz, ülke, segment ya da davranış hedeflemesi özel scriptlerde yoktur (bunlar kampanyalardadır — bkz. [Kampanya Hedefleme](/docs/campaigns/targeting)).

## Panelde nerede

Script'i kaydettikten sonra **Kanallar → Özel Scriptler** (Channels → Custom Scripts) listesinde script kartındaki **Add to Site** (Siteye Ekle) düğmesi. Eklenmiş kurallar listenin üstündeki **Active Scripts** bölümünde durur. Adımlar için [Script Ekleme](/docs/custom-scripts/adding).

## Alanlar

| Alan | Açıklama |
|---|---|
| **Path Pattern** (Yol Deseni) | Karşılaştırılacak yol; en fazla 255 karakter. Varsayılan `/`. |
| **Match Type** (Eşleşme Tipi) | Üç seçenek: aşağıda. Varsayılan **Prefix Match**. |
| **Active** / **Inactive** | Kuralı kodu silmeden açıp kapatır. Hem kuralın hem script'in kendisinin etkin olması gerekir. |

## Eşleşme tipi

Karşılaştırılan değer, sayfa yüklendiği andaki `location.pathname`'dir: `https://magaza.com/tr/kadin/ayakkabi?renk=siyah#liste` için `/tr/kadin/ayakkabi`. Sorgu dizesi (`?…`) ve `#…` hiçbir zaman dahil edilmez; dil öneki (`/tr`) dahildir.

| Tip | Davranış | Örnek |
|---|---|---|
| **Exact Match** (`exact`) | Yol desenle **birebir** aynı olmalı (büyük/küçük harf duyarlı; sondaki `/` önemlidir). | `/sepet` → `/sepet` eşleşir, `/sepet/` eşleşmez |
| **Prefix Match** (`prefix`, varsayılan) | Yol bu değerle **başlıyorsa**. Desenin sonundaki tek bir `*` yok sayılır, yani `/urun/*` ile `/urun/` aynıdır. | `/urun` → `/urun/abc` ve `/urunler` |
| **Regular Expression** (`regex`) | Desen JavaScript düzenli ifadesi olarak yolla denenir (`test`; bayrak yok, **bağlı değil**). | `^/tr/urun/` |

> **prefix beklediğinizden geniş yakalar**
>
> `/urun` öneki `/urunler` yolunu da yakalar. Sınırı netleştirmek için sondaki bölü işaretini ekleyin: `/urun/`. Düzenli ifadeler **bağlı değildir**: `/sepet` deseni `/odeme/sepet-ozeti` yolunu da eşleştirir; başlangıcı ve sonu `^` ve `$` ile sabitleyin.

Geçersiz bir düzenli ifade kaydedilmez (`SCRIPT_PATH_REGEX_INVALID`); panel de "This is not a valid regular expression, so the script would never run on any page" uyarısı verir. Bir kural kaydedildikten sonra tipi `regex`e çevrilirse yol deseni yeniden denetlenir.

## Tüm sayfalar

Her sayfada çalışması için `prefix` tipiyle `/` deseni kullanın. Her sayfada çalışan script, her sayfada (ödeme dahil) hata verme potansiyeli taşır; kodunuzu `try/catch` içinde tutun.

## Birden fazla kural

Bir script'i aynı kanala **farklı desenlerle birden fazla kez** ekleyebilirsiniz; herhangi biri eşleşirse çalışır. Ama:

> **Çakışan kurallar scripti iki kez çalıştırır**
>
> İki kural aynı sayfayla eşleşirse (örneğin `prefix /urun/` ve `regex ^/urun/`) script o sayfada **iki kez** enjekte edilir. Kuralları birbirini kapsamayacak şekilde kurun; kodunuzu da "iki kez çalışmaya karşı" korumalı yazın.

Scriptlerin kendi aralarındaki çalışma sırası tanımlı değildir. Birbirine bağımlı iki script yazmayın; tek script yazın.

## Tek sayfa uygulamaları

Sitenizde sayfa geçişleri tam sayfa yenilemesi yapmıyorsa (Next.js, ikas, Akinon Omnife Next gibi React tabanlı storefront'lar), **yol kuralı yalnızca sayfanın ilk açıldığı yola** bakar. Yol değiştiğinde Selwise script'i yeniden çalıştırmaz ve enjekte ettiği `<script>`/`<style>` öğelerini kaldırır (CSS dahil). Bu durumda:

- Kodun içinde yol değişimini kendiniz dinleyin (`history.pushState`/`replaceState` sarmalayıp `popstate` ile birleştirin ya da `MutationObserver` kullanın) ve işi **idempotent** yeniden uygulayın; ya da
- CSS'in kalıcı olması gerekiyorsa stili script içinde `document.head`'e kendiniz ekleyin (Selwise'in eklediği `<style>` kaldırılır).

Hangi yoldan açıldığınız önemlidir: ürün sayfasına doğrudan bağlantıyla gelen ziyaretçide `/urun/` kuralı çalışır; ana sayfadan tıklayarak gelende çalışmaz.

## Doğrulama

Script'in doğru sayfada çalıştığını konsola bir işaret basarak test edin:

```js
(function () {
  console.log('[script] çalıştı', location.pathname);
})();
```

Konsolda görmüyorsanız: kural **Active** mi, script **Active** mi, domain doğrulanmış mı, sitenizin CSP'si satır içi scripti engelliyor mu? Ağ sekmesinde `scripts?path=…` isteğine bakın: yanıtta script varsa kural eşleşmiştir. Doğruladıktan sonra işareti kaldırın. Ayrıntı: [Özel Script Sorunları](/docs/troubleshooting/common-issues#özel-script-çalışmıyor).
