Ürün kataloğu

WooCommerce nitelikleri kategori olarak kullanılmalı mı?

Nitelikler varyasyonları ve filtrelemeyi yürütür, kategoriler gezinmeyi ve inilmeye değer arşiv sayfalarını. Bir nitelik değerini kategoriye dönüştürmenin ölçüsü düzenli görünmek değil, arama talebidir.

Çoğu zaman cevap hayır. WooCommerce nitelikleri ile kategorileri, yönetim panelinde birbirinin yerine geçebilirmiş gibi durdukları için bir soru olarak gündeme gelir: ikisi de taksonomidir, ikisi de ürünleri gruplar, ikisinden de menüye koyabileceğiniz bir URL çıkar. Birbirinin yerine geçmezler. Nitelikler varyasyonları ve filtrelemeyi yürütür. Kategoriler gezinmeyi yürütür ve size Google’dan gelip inilmeye değer bir arşiv sayfası kazandırır. Bir nitelik değerini kategoriye dönüştürmek arada bir doğrudur; “arada bir”in ölçüsü ise düzenli görünmek değil, arama talebidir.

Kısa cevap#

Nitelikler ve kategoriler birbirinin yerine geçmez: nitelikler varyasyonları ve filtrelemeyi yürütür, kategoriler gezinmeyi ve inilmeye değer arşiv sayfalarını yürütür. Bu yüzden bir nitelik değerini kategoriye dönüştürmek yalnızca arada bir doğrudur ve ölçüsü arama talebidir.

  • Tamamen farklı işler. Nitelikler varyasyonları ve filtrelemeyi yürütür; kategoriler gezinmeyi yürütür ve hiyerarşiyi, açıklamayı, küçük görseli ve breadcrumb izini yalnızca onlar getirir.
  • Nitelik arşivleri zayıftır. “Enable archives?” seçeneği nitelik terimlerini standart mağaza ızgarasına yayımlar: terime özel görsel yok, alt kategori yok, şablonu ezmediğiniz sürece ayrı bir düzen yok. SEO eklentilerinin bunlar üzerindeki denetimi de tutarsızdır; Yoast’taki özellik talebi 2018’den beri açık.
  • Düzenli görünmek değil, üç test. Bir kombinasyonu ancak gerçekten aranıyorsa, inilmeye değecek kadar stoku varsa ve gelecek ay da ürün barındıracaksa kategoriye yükseltin.
  • Aritmetik bu işi bitiriyor. Tek bir üst kategoride on iki renk ve sekiz beden 96 kombinasyon eder; on üst kategoride bu, 2,000 ürünlük bir katalogdan 960 kategori sayfası demektir. Çoğu neredeyse boş ızgara olur, üstüne kimsenin bütçelemediği bir bakım maliyeti biner.
  • Elemeyi geçenleri düzgün kurun. Bir kombinasyon üç testi de geçtiğinde onu nitelik arşivi olarak değil, gerçek bir ürün kategorisi olarak oluşturun; geri kalan her şeyi katmanlı gezinme içinde birer filtre olarak bırakın.

WooCommerce nitelikleri ve kategorileri: her biri aslında nedir#

Global bir nitelik, WooCommerce’in pa_ önekiyle kaydettiği bir taksonomidir: pa_colour, pa_size. Kategoriler ise product_cat kullanır. İkisi de ürünlere iliştirilen terimlerdir, ama WooCommerce bunları çok farklı argümanlarla kaydeder ve farklar, düzenleme ekranından çıktığınız anda ortaya çıkar.

DavranışGlobal nitelik (pa_*)Ürün kategorisi (product_cat)
Varyasyonları yürütürEvet — bunu yapabilen tek şeyHayır
Katmanlı gezinmeyi ve filtre bileşenlerini yürütürEvetHayır, filtre kırılımı olarak değil
Herkese açık arşiv sayfasıYalnızca “Enable archives?” kutusunu işaretlersenizHer zaman
Hiyerarşi (üst/alt)Hayır — hiyerarşik olmayan biçimde kaydedilirEvet
Yönetim panelindeki terim alanlarıAd, slug, açıklamaAd, slug, üst terim, açıklama, görüntüleme tipi, küçük görsel
Ürünün breadcrumb izindeHayırEvet

İşin çoğunu buradaki iki satır yapıyor. Nitelik taksonomileri hierarchical değeri false olacak şekilde kaydedilir; yani “Kırmızı”yı “Elbiseler”in altına yerleştiremezsiniz. Bir nitelik arşivi her zaman mağaza genelindedir. Nitelik terimlerinin görüntüleme tipi ve küçük görseli de yoktur, dolayısıyla bir ürün yöneticisinin bir iniş sayfasında normalde yaptığı şeyler özel geliştirme olmadan elinizin altında olmaz.

“Enable archives?” aslında neyi oluşturur#

Kutu Products → Attributes altında, global bir niteliğin düzenleme ekranındadır; tek tek terimlerin üzerinde değil. Onu işaretlemeniz, WooCommerce’in o pa_* taksonomisini herkese açık olarak kaydetmesini sağlar; böylece altındaki her terim bir anda ön yüzde bir arşive kavuşur. O ana kadar taksonomi herkese açık değildir, URL yoktur ve bir SEO eklentisinin denetleyeceği bir şey de yoktur.

İnsanların yanıldığı kısım URL. Adres şu değildir: /pa_colour/red/. WooCommerce herkese açık URL’lerden pa_ önekini atar; dolayısıyla slug’ı colour olan bir “Colour” niteliği şunu üretir:

https://example.com/colour/red/

Önek WooCommerce 3.0.4 ile kaldırıldı; bu da /pa_colour/red/ URL’leri zaten dizine girmiş mağazaları bozdu. O adresler 404 dönmeye başladı ve onları yönlendiren hiçbir şey yoktu (woocommerce/woocommerce issue #14773). Search Console’unda ölü nitelik URL’leri bulunan eski bir mağazayı devraldıysanız bilmeye değer.

Tümüne birden önek vermek için Settings → Permalinks → Optional altındaki Product attribute base alanını kullanabilirsiniz. Değeri attribute yaparsanız /attribute/colour/red/ elde edersiniz. Alan varsayılan olarak boştur; yani nitelik slug’ları sitenin kökünde, sayfa ve kategori slug’larıyla yarışarak durur. “Colour” adlı bir sayfanız varsa çakışma yaşarsınız. Bir taban belirleyin.

Belgelendirme neden bu kadar zayıf#

WooCommerce’in ürün taksonomilerini yönetmeye dair resmî belgesi bu özelliğe tek cümle ayırıyor: özellik açıkken “bu niteliğin herhangi bir terimini taşıyan tüm ürünlerin bulunduğu bir sayfayı görüntüleyebilirsiniz”. Yanında da o URL’yi menüye ekleme örneği var. Konunun tamamı bu kadar.

Bu kısalık dürüst, çünkü özellik gerçekten zayıf. WooCommerce nitelik arşivleri için bir şablon getiriyor, templates/taxonomy-product-attribute.php, ama çalışan gövdesinin tamamı tek satır: archive-product.php dosyasını yüklüyor. Nitelik arşivi, arkasında farklı bir sorgu duran mağaza ızgaranızdır. Terime özel görsel yok, giriş bloku yok, alt kategori listesi yok; yalnızca ürünler ve tema basıyorsa terim açıklaması var.

Bir arşivi farklı göstermek isterseniz şablon yükleyici, temanızın woocommerce klasöründe taksonomi adını taşıyan bir dosyayı alır: tek bir nitelik için taxonomy-pa_colour.php, hepsi için taxonomy-product_attribute.php. Alt çizgilere dikkat edin; WooCommerce’in içindeki dosya tireli olsa da geçersiz kılma gerçek taksonomi adını kullanır. Blok temada WooCommerce bunun yerine kendi ürün niteliği blok şablonunu sunar ve onu site düzenleyicisinden düzenlersiniz.

SEO eklentileri nitelik arşivleriyle nerede sürtüşüyor#

O kutuyu işaretlediğiniz anda, kimsenin gözden geçirmediği ve dizine girebilecek yüzlerce yeni sayfanız olur; üstelik tek tek nitelik terimlerinde SEO meta verisini düzenlemek eskiden beri eksik gedik çalışır. Yoast’ta ürün niteliği çıktısının denetlenebilmesi için 2018’den beri açık bir özellik talebi var; aynı talep SEO meta kutusunun nitelik terimlerinde hiç görünmediğini de bildiriyor (Yoast/wordpress-seo issue #9152). Davranış Yoast, Rank Math ve SEOPress arasında, hatta her birinin sürümleri arasında değişiyor; o yüzden kendi kurulumunuzu kontrol edin. Değişmeyen şu: nitelik arşivi sıradan, herkese açık bir taksonomi arşividir, dolayısıyla anahtar, eklentinizin sunduğu taksonomi düzeyindeki dizine ekleme denetiminin içindedir.

Bunları dizine girmez yapmak istiyorsanız ve eklentiniz bunu yapmıyorsa, yalnızca çekirdekle çalışan sürüm şu. Boşluk kontrolü önemli: boş bir dizi verilen is_tax() her taksonomi arşiviyle eşleşir; o kontrol olmasa, global niteliği olmayan bir mağaza kendi kategorilerini de noindex yapardı.

add_filter( 'wp_robots', function ( $robots ) {
	if ( ! function_exists( 'wc_get_attribute_taxonomy_names' ) ) {
		return $robots;
	}

	$attribute_taxonomies = wc_get_attribute_taxonomy_names();

	if ( ! empty( $attribute_taxonomies ) && is_tax( $attribute_taxonomies ) ) {
		unset( $robots['index'] );
		$robots['noindex'] = true;
		$robots['follow']  = true;
	}

	return $robots;
} );

SEO eklentisi olmayan bir sitede bu yeterli. Yoast da wp_robots kancasına, PHP_INT_MAX değerinin hemen altındaki bir öncelikle bağlanır ve kendi değerlerini orada ne varsa üzerine birleştirir. Yani sizin filtreniz önce çalışır, sonra kaybeder. Bunun yerine Yoast’ın kendi filtresini kullanın:

add_filter( 'wpseo_robots_array', function ( $robots ) {
	if ( ! function_exists( 'wc_get_attribute_taxonomy_names' ) ) {
		return $robots;
	}

	$attribute_taxonomies = wc_get_attribute_taxonomy_names();

	if ( ! empty( $attribute_taxonomies ) && is_tax( $attribute_taxonomies ) ) {
		$robots['index'] = 'noindex';
	}

	return $robots;
} );

Rank Math’teki karşılığı rank_math/frontend/robots ve aynı biçimde bir dizi alır. Hangisini kullanırsanız kullanın, bir arşivi noindex yapmak onu site haritanızdan, menülerinizden veya iç bağlantılarınızdan çıkarmaz; bunlar ayrı işlerdir. Meşru sayfaların neden yok sayıldığını çözmeye zaten çalışıyorsanız, kategori sayfalarının dizine girmemesinin ardındaki nedenler nitelik arşivleri için de, üstelik genellikle daha sert biçimde geçerlidir.

Asıl soru: “kırmızı XL elbise” bir sayfayı hak ediyor mu?#

Zevke göre değil, talebe göre karar verin. Bir kategori sayfası, biri kombinasyonu arama motoruna yazdığında ve o ürünlerin ızgarasına inmekten memnun olacağında varlığını hak eder. Sırasıyla üç test.

1. Kombinasyon gerçekten aranıyor mu?#

Veri zaten elinizde. Search Console’da Performans raporunu üst kategorinin URL’sine göre filtreleyin ve sorguları okuyun. “kırmızı elbise” araması Elbiseler sayfanıza gösterim getiriyorsa, orada kurulmayı bekleyen bir sayfa var demektir. İkinci kaynak site içi arama kayıtlarınızdır ve bunlar her anahtar kelime aracını geçer: ülke ortalamasını değil, sizin müşterilerinizi gösterirler.

Örüntü kataloglar arasında tekrarlanıyor: tek nitelikli kombinasyonlar aranıyor, iki nitelikli olanlar nadiren aranıyor. İnsanlar “kırmızı elbise” ve “büyük beden elbise” arıyor. “kırmızı XL elbise” arayan neredeyse yok. Özellikle beden bir sorgu değil, bir filtredir; alışveriş yapanlar önce rengi ya da modeli seçer, kendi bedenlerini sonra filtreler.

2. İnilmeye değecek kadar stok var mı?#

Dört sütunlu bir ızgaranın artık kalmış bir şey gibi değil de mağaza gibi okunması için aşağı yukarı bir düzine ürün gerekir. Üç ürün, ziyaretçi için çıkmaz sokak, tarama botu için zayıf içeriktir. Sihirli bir sayı yok, ama bir ekranı dolduramıyorsanız elinizde sayfa değil, arama sonucu var demektir.

3. Gelecek ay da ürünü olacak mı?#

Stok hareket eder. Bugün on dört ürün barındıran, altı hafta sonra ikiye düşen bir kombinasyon, sessizce çürüyecek bir sayfadır. Mevsimlik renkler klasik tuzaktır. Kombinasyon tek bir tedarikçi sevkiyatına bağlıysa, o bir filtredir.

Üçünü de geçiyorsa sayfayı kurun. Birini bile geçemiyorsa filtre olarak bırakın; hâlihazırdaki katmanlı gezinmeniz bunu sıfır bakım maliyetiyle hallediyor ve bu, mağaza sahiplerinin beklediğinden çok daha sık doğru cevap oluyor.

“Her şeye bir kategori” yaklaşımını bitiren aritmetik#

Karar vermeden önce hesabı yapın. Tek bir üst kategoride on iki renk ve sekiz beden 96 kombinasyon eder. On üst kategoride bu, belki 2,000 ürün barındıran bir katalogdan 960 kategori sayfası demektir. Çoğunda beşten az ürün olur. Birçoğunda hiç ürün olmaz.

Sonuçların hepsi gerçek ve hepsi sıkıcı:

  • Tarama bütçesi hiçliğe gider. Googlebot ziyaretlerini dönüşüm getiren sayfalar yerine neredeyse boş ızgaralarda harcar.
  • Ölçekli zayıf içerik. Yalnızca bir filtre değeriyle ayrışan, özgün metni olmayan yüzlerce sayfa, kalite sorununun ders kitabındaki hâlidir.
  • İç bağlantı seyrelir. Menüdeki ya da kenar çubuğundaki her kategori, aynı iç bağlantı havuzunu daha fazla hedefe böler.
  • Yönetim paneli kullanılamaz hâle gelir. Ürün düzenleme ekranındaki 960 terimlik kategori listesi, her gün bir ürüne dokunan herkesi yavaşlatır.
  • Derin yapılar insanı şaşırtır. İç içe geçirmenin kendi davranışı vardır; bakın: üst kategoriler neden çoğu zaman ürün göstermez.

Kimsenin bütçelemediği bakım maliyeti#

Elle kurduğunuzda her yeni üründe doğru kombinasyon kategorilerinin işaretlenmesi gerekir, üretimden kalkan her seri arkasında bir sayfa bırakır ve gelecek sezonun her yeni rengi için baştan bir kategori kümesi oluşturulup doldurulması gerekir. Devir hızı olan bir katalogda bu bir proje değil, tekrarlayan bir iştir. Elle yapılan her gruplamadaki tuzağın aynısı: maliyet onu kurmak değil, atamayı her ay yeniden yapmaktır.

Bir kombinasyon sayfayı gerçekten hak ettiğinde, onu düzgün kurun#

Onu nitelik arşivi değil, gerçek bir ürün kategorisi yapın. Hiyerarşi, açıklama, görsel, görüntüleme tipi ve breadcrumb elde edersiniz; yani nitelik arşivinde eksik olan her şeyi.

Kategoriyi önce yönetim panelinde oluşturun ki istediğiniz slug ve açıklamayla dünyaya gelsin. Sonra bir kod parçasıyla bir kez doldurun. Aşağıdaki kod, Elbiseler içindeki, red terimini pa_colour üzerinde taşıyan yayımlanmış her ürünü bulur ve üründe zaten bulunan kategorilere dokunmadan red-dresses kategorisini ekler:

$target = get_term_by( 'slug', 'red-dresses', 'product_cat' );

if ( $target && ! is_wp_error( $target ) ) {
	$query = new WP_Query( array(
		'post_type'      => 'product',
		'post_status'    => 'publish',
		'posts_per_page' => -1,
		'fields'         => 'ids',
		'tax_query'      => array(
			'relation' => 'AND',
			array(
				'taxonomy' => 'pa_colour',
				'field'    => 'slug',
				'terms'    => 'red',
			),
			array(
				'taxonomy' => 'product_cat',
				'field'    => 'slug',
				'terms'    => 'dresses',
			),
		),
	) );

	foreach ( $query->posts as $product_id ) {
		// true = append, so existing categories are left alone.
		wp_set_object_terms( $product_id, array( $target->term_id ), 'product_cat', true );
	}
}

Slug’ı değil, terim kimliğini geçirin: wp_set_object_terms() eşleştiremediği bir metinden yeni bir terim oluşturur, dolayısıyla bir yazım hatası size hata vermek yerine sessizce ikinci ve yanlış bir kategori kazandırır. Kodu bir snippet eklentisinden ya da WP-CLI’dan bir kez çalıştırın, sonra silin. Önce veri tabanının yedeğini alın; kod anında yazar ve geri alma yoktur.

O kod parçasının ne olduğu konusunda net olun: bir anlık görüntü. Çalıştığı saniye doğrudur ve o andan itibaren gerçeklikten uzaklaşır. Yarın eklenen ürünler onun içinde değildir. Sabit duran birkaç sayfa için bu sorun değil; zaten bu yazının savunduğu sayı da birkaç.

Üyeliğin kendiliğinden doğru kalmasını istiyorsanız#

Bir eklentinin gerçekten işe yaradığı tek yer burası ve yalnızca yukarıdaki üç test sayfanın var olmayı hak ettiğini söyledikten sonra. Smart Categories for WooCommerce bir kural kümesini gerçek bir product_cat terimine bağlar; sonuç yine sıradan bir WooCommerce kategorisidir. Terim sayıları, breadcrumb’lar, menüler ve diğer eklentiler normal davranır. Ücretsiz sürüm kuralı, global nitelikler dahil 35 eşleşme alanı üzerinde iç içe AND/OR/NOT gruplarıyla kurar ve siz kaydetmeden önce eşleşen ürünleri ve sayılarını gösterir.

İç içe AND, OR ve NOT grupları ile eşleşen WooCommerce ürünlerinin anlık sayısını içeren kural oluşturucu.
Gruplar istediğiniz derinlikte iç içe geçer, önizleme siz kurarken eşleşen ürünleri sayar.

Yukarıdaki örneğin kuralı iki koşuldan oluşur: Renk Kırmızı AND Kategori Elbiseler. Ürünler oluşturulduğunda veya güncellendiğinde, bir de günlük taramada yeniden değerlendirilir; böylece yeni bir kırmızı elbise kimse kutu işaretlemeden kategoriye düşer, kırmızı olmaktan çıkan bir ürün de kategoriden çıkar. Elle atadığınız hiçbir şey yerinden oynamaz; eklenti yalnızca kendi oluşturduğu üyelikleri kaldırır. Mekanizma kurallara göre kategoriye ürün ekleme yazısında daha ayrıntılı anlatılıyor.

Pro sürüm her nitelik değeri için ya da iki niteliğin her kombinasyonu için bir alt kategori üretir; hiçbir şey oluşturulmadan önce her sayfanın ürün sayısını gösteren bir önizleme sunar. Burada işe yarayan kısım o önizleme: planladığınız 96 kombinasyonun 71’inde beşten az ürün olacağını size gösterir, siz de yalnızca eşiğinizi aşanları oluşturursunuz.

Canlı ürün sayıları ve tek tıkla yenileme seçeneğiyle listelenen tüm akıllı kategoriler
Kurala dayalı her kategori, güncel ürün sayısıyla birlikte.

Sınırları açıkça söyleyelim: eklenti üyeliğe karar verir, bir sayfanın var olmayı hak edip etmediğine değil. Onu her kombinasyona yöneltirseniz aynı 960 zayıf sayfayı, sadece daha hızlı elde edersiniz.

Bunların hiçbirinin sizin yerinize halletmediği şeyler#

Hangi yolu seçerseniz seçin (elle, kod parçasıyla ya da eklentiyle), şunlar sizin işiniz olarak kalır:

  • Meta başlıkları, açıklamalar, canonical etiketleri ve noindex. Bunlar SEO eklentinizin alanı. Yoast, Rank Math ve SEOPress kategori terimlerini destekler; kuralları sayfalar yayına girmeden önce orada belirleyin.
  • Yönlendirmeler. Bir kombinasyon kategorisini emekliye ayırdığınızda bir şeyin onu 301 ile yönlendirmesi gerekir. Bunu bir yönlendirme eklentisi ya da sunucu yapılandırmanız yapar. Kategoriyi silmek arkasında bir 404 bırakır; tıpkı o eski pa_ URL’lerinde olduğu gibi. İzlenecek adımları sıralamaları kaybetmeden kategori yapısını değiştirme yazısı anlatıyor.
  • Eşiğinizin altına düşen sayfaları emekliye ayırmak. WooCommerce’te “N üründen az olan kategoriyi gizle” diye bir davranış yok ve yukarıdakilerin hiçbiri böyle bir davranış eklemiyor. Bir sayfa boşalırsa ona ne olacağına siz karar verirsiniz.
  • Sayfadaki özgün metin. Açıklaması olmayan, üretilmiş bir ızgara yine zayıftır. Bir kombinasyon sayfayı hak ediyorsa, bir insanın yazdığı iki paragrafı da hak ediyordur.

Kısa hâli#

Nitelikleri nitelik olarak bırakın. Her değer için mağaza genelinde bir sayfa istediğinizden özellikle emin değilseniz “Enable archives?” seçeneğini kapalı tutun; açacaksanız da bir ürün niteliği tabanı belirleyin ve o arşivlerin dizine girip girmeyeceğine bilinçli olarak karar verin.

Bir kombinasyonu gerçek bir kategoriye ancak üç testi de geçtiğinde yükseltin: insanlar onu arıyor, onunla bir ekranı doldurabiliyorsunuz ve gelecek ay da dolu olacak. Pratikte bu, mağaza başına birkaç tek nitelikli sayfa demek (“kırmızı elbise”, “deri bot”) ve neredeyse hiç iki nitelikli sayfa olmaması demek. Geri kalan her şey bir filtredir ve filtreler hiçbir şeye mal olmaz.

Okumaya devam

İlgili yazılar