Keng qamrovli qidiruv. To'g'ri yo'lni topish: qirrali navigatsiya SEOga qanday ta'sir qiladi (tarjima)

Uy / Windows 7

Ushbu maqolada (vebmaster darajasi - ilg'or) biz turli yo'llar bilan kesishish deb ataladigan narsalar haqida gapiramiz. "qirrali" navigatsiya. Materialni o'zlashtirishni soddalashtirish uchun men Vikipediyadagi "Facet tasnifi" maqolasini va nashrlarni ko'rib chiqishni tavsiya qilaman. Ingliz(lekin rasmlar bilan!) "Veb-saytlaringiz uchun yaxshiroq qirrali navigatsiyani loyihalashtiring."

Rang yoki narx oralig'i bo'yicha filtrlaydigan qirrali navigatsiya tashrif buyuruvchilaringiz uchun foydali bo'lishi mumkin, lekin u ko'pincha qidiruv natijalariga zarar etkazadi, chunki u ikki nusxadagi kontent bilan bir nechta URL birikmalarini yaratadi. Dublikatlar tufayli qidiruv tizimlari saytni kontent yangilanishlari uchun tezda skanerlay olmaydi, bu esa indekslashga ta'sir qiladi. Ushbu muammoni minimallashtirish va veb-ustalar navigatsiya qidiruvini qulay qilishiga yordam berish uchun biz quyidagilarni xohlaymiz:

Foydalanuvchilar uchun ideal va Google qidiruvi

Mahsulotlar/maqola sahifalariga yo'lni tozalang:

Turkum sahifasi uchun URL manzili:
http://www.example.com/category.php?category=gummy-candies

Mahsulotga xos URL manzili:
http://www.example.com/product.php?item=swedish-fish

Fasetli navigatsiya natijasida yuzaga kelgan kiruvchi dublikatlar

Xuddi shu sahifaga turli veb-manzillardan kirish mumkin:

Kanonik sahifa



URL: example.com/product.php? item=shved-baliq

Ikki nusxadagi sahifa



URL:example.com/product.php? item=shved-baliq&category=gummy-konfetlar&narxi=5-10


kategoriya=gummy-konfetlar&taste=nordon&narxi=5-10

Xatolar:

  • Google uchun ma'no yo'q, chunki foydalanuvchilar [9:55 dollarga baholangan marmelad] ni kamdan-kam izlaydilar.
  • uchun ma'nosiz qidiruv robotlari, bu asosiy toifadagi sahifalardan ("Jummy" yoki "Nordon go'shtli") bir xil elementni ("mevali salat") aniqlaydi.
  • Sayt egasi uchun salbiy nuqta, chunki indeksatsiya so'rovlari bir xil toifadagi ko'plab versiyalar bilan suyultiriladi.
  • Sayt egasi uchun salbiy nuqta, chunki u foydasiz va saytning tarmoqli kengligida qo'shimcha yuk
Bo'sh sahifalar:


URL: example.com/category.php? kategoriya=gummy-konfetlar&taste=nordon&narxi=10 dan ortiq

Xatolar:

  • uchun kod qidiruv tizimlari(bu holda, sahifa 404 kodini qaytarishi kerak)
  • Foydalanuvchilar uchun bo'sh sahifa


Fasetli navigatsiya uchun eng yomon echimlar (qidiruvga mos emas).

Misol № 1: URLning bir qismi sifatida ishlatilmaydi standart parametrlar: o'rniga vergul va qavs kalit=qiymat&:

  • example.com/category? [ turkum:gummy-candy ][ sort:price-past-to-high ][ sid:789 ]
  • example.com/category?category , gummy-candy , sort , lowtohigh , sid , 789
Qanday qilib:
example.com/category? kategoriya=gummy-candy&sort=pastdan yuqoriga&sid=789

Misol № 2: Sahifa mazmunini o'zgartirmaydigan qiymatlar ro'yxatidagi parametrlar o'rniga kataloglar yoki fayl yo'llaridan foydalanish:
example.com/c123 /s789/ product?shved-baliq
(bu erda /c123/ toifasi, /s789/ seans identifikatori, sahifa mazmunini o'zgartirmaydi)

Yaxshi yechim:

  • example.com /gummy-candy/ mahsulot?item=shved-baliq&sid=789(katalog, /gummy-candy/, sahifa mazmunini mazmunli o'zgartiradi)
Eng yaxshi yechim:
  • example.com/product?item=swedish-fish& kategoriya=gummy-candy&sid=789 (URL parametrlari qidiruv tizimlariga qanday qilib samarali skanerlashni aniqlash uchun ko'proq moslashuvchanlikni beradi)
Bu qiymatlar to'g'ridan-to'g'ri bog'lanish yo'llariga joylashtirilganida, brauzerlar uchun foydali qiymatlarni (masalan, "gummy-condy") foydasizlardan (masalan, "SESSIONID") farqlash qiyin. Boshqa tomondan, URL parametrlari qidiruv tizimlariga tezkor sinovdan o'tkazish va berilgan qiymat barcha variantlarga skaner kirishini talab qilmasligini aniqlash uchun moslashuvchanlikni ta'minlaydi.

Sahifaning mazmunini o'zgartirmaydigan va URL parametrlari sifatida ro'yxatga olinishi kerak bo'lgan umumiy qadriyatlarga quyidagilar kiradi:

  • Seans identifikatori
  • ID kuzatuvi
  • Yo'naltiruvchi identifikatorlari
  • Vaqt belgilari
Misol № 3: Foydalanuvchi tomonidan yaratilgan qiymatlarni (ehtimol cheksiz) skanerlanadigan va indekslanadigan, ammo qidiruv uchun foydasiz URL parametrlariga aylantiring.
Sayt foydalanuvchilari tomonidan yaratilgan kichik ma'lumotlardan (masalan, uzunlik/kenglik yoki "kunlar oldin") tekshirilgan va indekslangan manzillarda foydalanish:
  • example.com/find-a-doctor? radius=15&kenglik=40,7565068&uzunlik=-73,9668408
  • example.com/article?category=health& kun oldin = 7
Qanday qilib:
  • example.com/find-a-doctor? shahar = San-Fransisko va mahalla = Soma
  • example.com/articles?category=health& sana = 2014 yil 10 yanvar
Foydalanuvchiga tekshiriladigan URL-manzillarni yaratish uchun qiymatlarni yaratishga ruxsat berish o'rniga (bu tashrif buyuruvchilar uchun juda kam qiymatga ega bo'lgan cheksiz imkoniyatlarga olib keladi), eng mashhur qiymatlar uchun sahifa toifasini nashr qilish yaxshiroqdir, qo'shimcha ravishda siz kiritishingiz mumkin Qo'shimcha ma'lumot Shunday qilib, sahifa oddiy qidiruv natijalari sahifasiga qaraganda ko'proq qiymat beradi. Shu bilan bir qatorda, foydalanuvchi tomonidan yaratilgan qiymatlarni alohida katalogga joylashtirish va keyin ushbu katalogdan skanerlashni oldini olish uchun robots.txt dan foydalanishni ko'rib chiqishingiz mumkin.
  • example.com /filtrlash/ find-a-doctor?radius=15&latitude=40,7565068&longitude=-73,9668408
  • example.com /filtrlash/ maqolalar?category=health&days-ago=7
Va robots.txt da:
Foydalanuvchi-agent: *
Ruxsat bermaslik: /filtrlash/

Misol № 4. Mantiqsiz URL parametrlarini qo'shish.

  • example.com /gummy-candy/lolipops/gummy-candy/ gummy-candy/mahsulot?shved-baliq
  • example.com/product? cat=gummy-candy&cat=lolipops&cat=gummy-candy&cat=gummy-candy&item=shved-baliq
Yaxshi yechim:
  • example.com /gummy-candy/ product?item=shved-baliq
Eng yaxshi yechim:
  • example.com/product? item=shved-baliq&category=gummy-candy
Chetdan tashqari URL parametrlari faqat takrorlanishni oshiradi, bu esa saytni skanerlash va unchalik samarali emas indekslanishiga olib keladi. Shuning uchun, keraksiz URL parametrlaridan xalos bo'lish va yangi URL-manzillarni yaratishdan oldin keraksiz havolalarni vaqti-vaqti bilan tozalash kerak. Agar foydalanuvchi seansi uchun ko'plab parametrlar kerak bo'lsa, siz doimiy ravishda qiymatlarni qo'shish o'rniga cookie fayllaridagi ma'lumotlarni yashirishingiz mumkin. cat=gummy-candy&cat=lolipops&cat=gummy-candy& ...

Misol № 5: Null natijalar mavjud bo'lganda qo'shimcha takomillashtirishni (filtrlashni) taklif qiling.

Yomon:
Tozalash uchun null elementlar mavjud boʻlganda foydalanuvchilarga filtrlarni tanlashga ruxsat bering.


Nol natijaga ega sahifani tushuntirish (masalan, narx=10 dan ortiq), bu foydalanuvchilarni xafa qiladi va qidiruv tizimlari uchun keraksiz so'rovlarni keltirib chiqaradi.

Qanday qilib:
Faqat foydalanuvchi tanlashi mumkin bo'lgan elementlar mavjud bo'lganda havolalarni yarating. Natija nolga teng bo'lsa, havola "kulrang" (ya'ni, bosilmaydi) bilan belgilanadi. Foydalanish qulayligini yanada yaxshilash uchun har bir filtr yoniga mavjud elementlar soni koʻrsatkichini qoʻshishni oʻylab koʻring.


Nol natijaga ega sahifani ko'rsatishga ruxsat berilmaydi (masalan, narx=10 dan yuqori) va foydalanuvchilarga keraksiz bosishlarni taqiqlaydi va qidiruv tizimlari buni tekshirmaydi. foydali sahifa.

Faqat mahsulotlar mavjud bo'lganda URL manzillarini yaratish orqali keraksiz manzillar paydo bo'lishining oldini olish va tashrif buyuruvchi uchun bo'sh joyni minimallashtirish kerak. Bu foydalanuvchilarni saytingizga jalb qilishda yordam beradi (hech qanday mahsulot topilmaganda orqaga tugmani kamroq bosish) va qidiruv tizimlariga ma'lum bo'lgan URL manzillar sonini kamaytiradi. Bundan tashqari, agar sahifa shunchaki "vaqtinchalik zaxirada qolmagan" bo'lsa, lekin tegishli ma'lumotlarni o'z ichiga olishi dargumon bo'lsa, unga 404 javob kodini berishni o'ylab ko'rishingiz mumkin. 404 sahifasida siz yaratishingiz mumkin foydali xabar foydalanuvchilar tegishli mahsulotlarni topishlari uchun navigatsiya yoki qidiruv maydonida ko'proq imkoniyatlarga ega foydalanuvchilar uchun.

Veb-ustalar qirrali navigatsiyani qo'llashni o'ylayotgan yangi saytlar uchun noyob kontent sahifalarini skanerlashni (saytingizdagi manzillar to'plami Googlega ma'lum) optimallashtirish va takroriy sahifalarni qidiruv tizimi indeksiga kiritishni kamaytirish uchun bir nechta variant mavjud. indekslash signallari).

Qidiruv tizimlari har bir alohida kontent sahifasini skanerlashi uchun qanday URL parametrlari kerakligini aniqlang (ya'ni, har bir elementga kamida bitta bosish yo'lini yaratish uchun qanday parametrlar kerakligini aniqlang). Kerakli parametrlar element identifikatori, kategoriya identifikatori, sahifa va boshqalarni o'z ichiga olishi mumkin.

Qaysi parametrlar tashrif buyuruvchilarga o'z so'rovlari bilan foydali bo'lishini va qaysilari skanerlash va indekslashda takrorlanishga olib kelishi mumkinligini aniqlang. Qandolat mahsulotlari misolida (marmelad) URL parametri "ta'm" misoldagi so'rovlari bo'lgan foydalanuvchilar uchun qimmatli bo'lishi mumkin. ta'mi = nordon . Biroq, keraksiz takrorlashni keltirib chiqarish uchun "narx" parametrini hisobga olish mantiqan to'g'ri kategoriya=gummy-condies&taste=nordon& narxi = 10 dan yuqori . Boshqa keng tarqalgan misollar:

  • Qidiruv tizimlari uchun qimmatli parametrlar: item-id , kategoriya identifikatori , nom , brend ...
  • Keraksiz parametrlar: sessiya identifikatori, narx oralig'i ...
Keling, keraksiz parametrlarni o'z ichiga olgan URL manzillari uchun bir nechta konfiguratsiya variantlaridan birini amalga oshirishni ko'rib chiqaylik. Shunchaki, "keraksiz" URL parametrlari qidiruv tizimi brauzerlari skanerlashi yoki foydalanuvchi har bir alohida mahsulotni topishi uchun talab qilinmasligiga ishonch hosil qiling!

Variant 1: va ichki havolalar

Barcha keraksiz URL manzillarini belgisi bilan belgilang. Bu qidiruv robotining mehnat xarajatlarini kamaytiradi va skanerlash chastotasining pasayishiga yo'l qo'ymaydi. Siz robots.txt orqali global miqyosda skanerlashni boshqarishingiz kerak (Tarjimonning eslatmasi: "" maqolasiga qarang).
Qidiruv indeksi uchun sahifalarni u erda kerak bo'lmagan sahifalardan ajratish uchun rel = "kanonik" atributidan foydalaning (masalan, sahifada narxi = 5-10 barcha nordon marmelad toifasini ko'rsatuvchi rel = "kanonik" atributini qo'shishingiz mumkin example.com/category.php?category=gummy-candies&taste=sour& sahifa=hammasi ).

Variant 2: Robots.txt va ruxsat bermaslik

Keraksiz parametrlarga ega URL manzillar robots.txt faylida yopiladigan /filtrlash/ katalogiga kiritilgan (ruxsat bermaslik). Bu barcha qidiruv tizimlariga faqat saytning "to'g'ri" havolasini (kontentini) skanerlash imkonini beradi, lekin bir vaqtning o'zida keraksiz URL manzillarini skanerlashni bloklaydi. Masalan ( example.com/category.php?category=gummy-candies), agar qimmatli parametrlar element, toifa va ta'm bo'lsa va seans identifikatori va narxi ortiqcha bo'lsa, ta'm uchun URL quyidagicha bo'ladi:
example.com/category.php?category=gummy-candies& ta'mi = nordon, lekin barcha keraksiz parametrlar, masalan, narx, oldindan belgilangan katalogdagi URL-ga kiritiladi - /filtrlash/:
example.com /filtrlash/ category.php?category=gummy-condies&price=5-10,
keyin robots.txt orqali taqiqlanadi:
Foydalanuvchi-agent: *
Ruxsat bermaslik: /filtrlash/

Variant 3: Alohida xostlar

Ishonch hosil qilmoq eng yaxshi yechimlar, yuqorida sanab o'tilgan (masalan, keraksiz manzillar uchun) hali ham amal qiladi. IN aks holda qidiruv tizimlari allaqachon indeksda katta havola massasini shakllantirgan. Shunday qilib, sizning ishingiz Googlebot tomonidan tekshiriladigan keraksiz sahifalarning keyingi o'sishini kamaytirishga va indekslash signallarini birlashtirishga qaratilgan bo'ladi.

Standart kodlash va kalit=qiymat formati bilan parametrlardan foydalaning.

Seans identifikatorlari kabi sahifa mazmunini o'zgartirmaydigan qiymatlar kataloglar emas, balki kalit = qiymat sifatida amalga oshirilganligiga ishonch hosil qiling.

Filtrlash uchun elementlar boʻlmasa, bosishga ruxsat bermang yoki URL manzillarini yaratmang.

URL parametrlarini xaritalash uchun mantiq qo'shing: doimiy qiymatlarni qo'shish o'rniga keraksiz parametrlarni olib tashlang (masalan, quyidagi kabi havolalarni yaratishdan saqlaning: example.com/product?cat=gummy-candy&cat=lolipops &cat=gummy-candy&item=shved-baliq).

Qiymatli parametrlarni URL manzillarida birinchi boʻlib roʻyxatga kiritib (chunki URL manzillar qidiruv natijalarida koʻrinadi) va kamroq tegishli parametrlarni oxirgi (masalan, sessiya identifikatori) orqali saqlang.
Ushbu havola tuzilishidan qoching: example.com/category.php? session-id=123&tracking-id=456&category=gummy-condies&taste=nordon
Agar siz havolalar saytingizda qanday ishlashini aniq tushunsangiz, URL parametrlarini Webmaster Tools-da sozlang.

URL manzilini yangilamasdan tarkibni dinamik ravishda boshqarish (saralash/filtr/yashirish) uchun JavaScript-dan foydalanilganda, saytingizda qidiruv qiymatiga ega haqiqiy veb-manzillar mavjudligiga ishonch hosil qiling, masalan, asosiy toifa va mahsulot sahifalari skanerlanishi va indekslanishi mumkin . Faqat foydalanmaslikka harakat qiling bosh sahifa Butun saytingiz uchun (ya'ni bitta URL) va navigatsiya bilan tarkibni dinamik ravishda o'zgartirish uchun JavaScript-dan foydalanish - bu, afsuski, foydalanuvchilarga qidiruvlarda faqat bitta URL beradi. Bundan tashqari, ishlash dinamik filtrlashning ishlashiga yomon ta'sir qilmasligini tekshiring, chunki u foydalanuvchining sayt bilan ishlash qobiliyatiga xalaqit beradi.

Sahifaning imtiyozli versiyasida rel = "kanonik" atributini ko'rsatish orqali bir xil tarkibdagi turli sahifalarni indekslashni yaxshilang. rel = "kanonik" atributi bir yoki bir nechta domenlarda ishlatilishi mumkin.

Sahiflangan kontentni indekslashni optimallashtiring (masalan, “saqichli shakarlamalar” turkumidagi sahifa=1 va sahifa=2):

  • “Hammasini ko‘rish” parametri bilan kanonik toifani ko‘rsatuvchi sahifalar qatoriga rel="canonical" atributini qo‘shing (masalan, “sahifali konfetlar” turkumidagi sahifa=1, sahifa=2 va sahifa=3). rel = "kanonik" yoqilgan kategoriya=gummy-condies&page=all), sahifaning foydalanuvchilarga mos kelishi va tez yuklanishiga ishonch hosil qiling.
  • Alohida sahifalar o'rtasidagi munosabatni ko'rsatish uchun rel="next" va rel="prev" sahifalash belgilaridan foydalaning (qarang: "Paginaton with rel="next" va rel="prev" ").
Sayt xaritalaringizga faqat kanonik havolalarni qo'shing.

Biz LINQ ning PHP porti bo'lgan PINQ ning o'rnatilishi va asosiy sintaksisini tezda ko'rib chiqdik. Ushbu maqolada biz MySQL-da qirrali qidiruv funksiyasini simulyatsiya qilish uchun PINQ-dan qanday foydalanishni ko'rib chiqamiz.

Ushbu maqolada biz fasetli qidiruvning barcha jihatlarini qamrab olmaymiz. Qiziqqanlar Internetda kerakli ma'lumotlarni qidirishlari mumkin.

Oddiy qirrali qidiruv quyidagicha ishlaydi:

  • Foydalanuvchi qidirish uchun kalit so'z yoki bir nechta kalit so'zlarni kiritadi. Masalan, tavsifda, kalit so'zlarda, toifa nomida, teglarda va hokazolarda "router" so'zi bo'lgan mahsulotlarni qidirish uchun "router".
  • Sayt ushbu mezonlarga mos keladigan mahsulotlar ro'yxatini qaytaradi.
  • Sayt sizning qidiruv so'zlaringizni sozlash uchun bir nechta havolalarni taqdim etadi. Misol uchun, u sizga ma'lum marshrutizator ishlab chiqaruvchilarini ko'rsatish yoki narx oralig'ini yoki boshqa xususiyatlarni belgilash imkonini berishi mumkin.
  • Foydalanuvchi qiziqtirgan ma'lumotlar to'plamini olish uchun qo'shimcha qidiruv mezonlarini belgilashda davom etishi mumkin.

Faceted qidiruv juda mashhur va shunday kuchli vosita, uni deyarli har qanday elektron tijorat bilan bog'liq veb-saytlarda kuzatish mumkin.

Afsuski, qirrali qidiruv MySQL-ga o'rnatilmagan. Xo'sh, agar biz hali ham MySQL-dan foydalansak, lekin foydalanuvchiga bu imkoniyatni berishni xohlasak nima qilishimiz kerak?

Shunga o'xshash, kuchli va sodda yondashuvga ega bo'lgan PINQ bilan biz boshqa ma'lumotlar bazasi dvigatellaridan foydalangandek xuddi shunday xatti-harakatlarga erisha olamiz.

Birinchi qismdan demoni kengaytirish

Izoh: Ushbu qismdagi va birinchi qismdagi barcha kodlarni omborda topish mumkin.

Ushbu maqolada biz 1-qismdagi demoni kengaytiramiz va fasetli qidiruv ko'rinishidagi sezilarli yaxshilanishni ko'rib chiqamiz.

index.php dan boshlaymiz va unga quyidagi qatorlarni qo'shamiz:

$app->get("demo2", funktsiya () funksiyasidan foydalanish ($app) ( global $demo; $test2 = yangi pinqDemo\Demo($app); $test2->test2($app, $demo->test1)ni qaytaring ($app)); $app->get("demo2/facet/(key)/(value)", funksiya ($kalit, $value) foydalanish ($app) ( global $demo; $test3 = new pinqDemo\Demo($app); return $test3->test3($app, $demo->test1($app), $key, $value ));

Birinchi marshrut bizni kalit so'z qidiruviga mos keladigan barcha xabarlarni ko'rish uchun sahifaga olib boradi. Misol oddiy bo'lishi uchun kitob_kitob jadvalidan barcha kitoblarni tanlaymiz. Shuningdek, u natijada olingan ma'lumotlar to'plamini va qidiruv mezonlarini belgilash uchun havolalar to'plamini ko'rsatadi.

Haqiqiy ilovalarda, bunday havolalarni bosgandan so'ng, barcha faset filtrlari olingan ma'lumotlar to'plamining chegara qiymatlariga moslashadi. Shunday qilib, foydalanuvchi ketma-ket yangi qidiruv shartlarini qo'shishi mumkin, masalan, avval ishlab chiqaruvchini tanlang, so'ngra narx oralig'ini belgilang va hokazo.

Ammo bu misolda biz bunday xatti-harakatni amalga oshirmaymiz - barcha filtrlar asl ma'lumotlar to'plamining chegara qiymatlarini aks ettiradi. Bu birinchi cheklov va demomizni yaxshilash uchun birinchi nomzod.

Yuqoridagi kodda ko'rib turganingizdek, haqiqiy funktsiyalar pinqDemo.php deb nomlangan boshqa faylda joylashgan. Keling, qirrali qidiruv funksiyasini ta'minlaydigan tegishli kodni ko'rib chiqaylik.

Aspekt klassi

Birinchi qadam aspektni ifodalovchi sinf yaratishdir. Umuman olganda, aspekt bir nechta xususiyatlarni o'z ichiga olishi kerak:

  • U ishlaydigan ma'lumotlar ( $maʼlumotlar)
  • Guruhlash amalga oshiriladigan kalit ( $ kalit)
  • Kalit turi ($ turi). Quyidagilardan biri bo'lishi mumkin:
    • aniq moslik uchun to'liq qatorni belgilang
    • naqsh bo'yicha qidirish uchun satrning bir qismini (odatda boshlang'ich) ko'rsating
    • diapazon bo'yicha guruhlash uchun qiymatlar oralig'ini ko'rsating
  • agar kalit turi qiymatlar oralig'i bo'lsa, diapazonning pastki va yuqori chegaralarini aniqlash uchun qiymat bosqichini belgilashingiz kerak; yoki agar tur satrning bir qismi bo'lsa, guruhlash uchun nechta birinchi harf ishlatilishini belgilashingiz kerak ($range)

Guruhlash- aspektning eng muhim qismi. Aspekt qaytishi mumkin bo'lgan barcha umumiy ma'lumotlar guruhlash mezonlariga bog'liq. Odatda eng ko'p ishlatiladigan qidiruv mezonlari "To'liq satr", "String qismi" yoki "Qiymatlar oralig'i".

ClassFacet nom maydoni ( Pinq\ITraversable, Pinq\Traversable dan foydalaning; sinf Facet ( umumiy $ma'lumotlar; // Asl ma'lumotlar to'plami ochiq $ kalit; // umumiy $ turini guruhlash uchun maydon; // F: butun qator; S: boshlang'ich satrlar R: public $diapazon; // faqat $type != F ... umumiy funksiya getFacet() ( $filter = ""; if ($this->type == "F") / / butun satr ( ... ) elseif ($this->turi == "S") // satr boshi ( ... ) elseif ($this->type == "R") // qiymatlar diapazoni ​​( $ filter = $this->ma'lumotlar ->groupBy(funksiya($satr)) (qaytish qavati($satr[$this->kalit] / $this->diapazon) * $this->diapazon; )) -> select(funktsiya (ITraversable $data) ( return ["key" => $data->last()[$this->key], "count" => $data->count()]; )); filtr )))

Ushbu sinfning asosiy vazifasi asl ma'lumotlar to'plami va aspekt xususiyatlariga asoslangan filtrlangan ma'lumotlar to'plamini qaytarishdir. Koddan ma'lum bo'ladiki, bu uchun har xil turlari hisoblardan foydalaniladi turli yo'llar bilan ma'lumotlarni guruhlash. Yuqoridagi kodda, agar biz ma'lumotlarni bir qator qiymatlar bo'yicha guruhlashtirsak, kod qanday ko'rinishini ko'rsatdik. $diapazon.

Aspektlarni o'rnatish va manba ma'lumotlarini ko'rsatish

Umumiy funksiya test2($app, $data) ( $facet = $this->getFacet($data); return $app["twig"]->render("demo2.html.twig", array("facet" = > $facet, "ma'lumotlar" => $data)); getFacet($originalData) ( $facet = array(); $data = \Pinq\Traversable::from($originalData); // 3 ta yaratish misoli boshqacha aspekt ob'ektlari va aspektlarni qaytaring $filter1 = new \classFacet\Facet($data, "muallif", "F" $filter2 = new \classFacet\Facet($data, "title", "S", 6) $filter3 = new \classFacet\Facet($data, "narx", "R", 10); $facet[$filter1->key] = $filter2->getFacet(); ); $facet[$filter3->key] = $filter3->getFacet();

getFacet() usulida biz quyidagilarni bajaramiz:

  • Asl ma'lumotlarni keyingi qayta ishlash uchun Pinq\Traversable ob'ektiga aylantiring
  • Biz uchta jihatni yaratamiz. "Muallif" jihati muallif maydoni bo'yicha guruhlanadi va butun qator bo'yicha guruhlashni amalga oshiradi; aspekt "sarlavha" - satrning bir qismi bo'yicha guruhlangan sarlavha maydoni bo'yicha (birinchi 6 belgi bo'yicha); aspekt "narx" - diapazon bo'yicha guruhlangan narx maydoni bo'yicha (10 ga oshib)
  • Va nihoyat, biz tomonlarni ajratib olamiz va ularni test2 funktsiyasiga qaytaramiz, shunda ular ko'rsatish uchun shablonga chiqarilishi mumkin.

Chiqish aspektlari va filtrlangan ma'lumotlar

Ko'pgina hollarda filtrlar chiziq sifatida ko'rsatiladi va sizni filtrlangan natijani ko'rishga olib keladi.

Biz allaqachon marshrutni ("demo2/facet/(key)/(qiymat)") yaratganmiz, ular qirrali qidiruv natijalari va filtr havolalarini ko'rsatish uchun.

Yo'nalish filtrlangan kalitga va ushbu kalit qiymatiga qarab ikkita parametrni oladi. Ushbu marshrutga bog'langan test3 funktsiyasi quyida ko'rsatilgan:

Umumiy funksiya test3($app, $originalData, $key, $value) ($data = \Pinq\Traversable::from($originalData); $facet = $this->getFacet($data); $filtr = null; agar ($kalit == "muallif") ( $filtr = $ma'lumotlar ->qayerda(funktsiya ($satr) foydalanish ($value) (qaytish $satr["muallif"] == $value; )) ->orderByAscending( function($row) use ($key) ( return $row["price"]; )) ) elseif ($key == "price") ( ... ) else //$key== title ( .. . ) return $app["twig"]->render("demo2.html.twig", array("facet" => $facet, "data" => $filtr) )

Asosan, kalitga qarab, biz o'tkazilgan qiymat bo'yicha filtrlashni qo'llaymiz (qaerda ifodasidagi anonim funksiya) va quyidagi filtrlangan ma'lumotlar to'plamini olamiz. Shuningdek, biz ma'lumotlarni filtrlash tartibini o'rnatishimiz mumkin.

Nihoyat, biz shablonda xom ma'lumotlarni (filtrlar bilan birga) ko'rsatamiz. Bu marshrut biz "demo2" da ishlatgan naqshdan foydalanadi.

Qidiruv paneli

    (k uchun %, fasetdagi v %)
  • ((k|kapital))
    • (v uchun % v %)
    • ((vv.count))((vv.key))
    • (%endfor%)
    (%endfor%)

Ilovamiz tomonidan yaratilgan jihatlar ichki o'rnatilgan massivlar ekanligini unutmasligimiz kerak. Birinchi darajada, bu barcha jihatlarning to'plamidir va bizning holatlarimizda ulardan uchtasi (muallif, nom, narx uchun) mavjud.

Har bir aspekt kalit-qiymat massiviga ega, shuning uchun biz uni oddiy usullar yordamida takrorlashimiz mumkin.

Havolalar uchun URL manzillarini qanday yaratganimizga e'tibor bering. Biz marshrut parametrlari sifatida tashqi halqa kaliti (k) va ichki halqa tugmalaridan (vv.key) foydalanamiz ("demo2/facet/(kalit)/(qiymat)"). Shablonda ko'rsatish uchun massivlarning o'lchami (vv.count) ishlatiladi.

Birinchi rasm asl ma'lumotlar to'plamini ko'rsatadi, ikkinchi rasm esa $0 dan $10 gacha bo'lgan narx oralig'i bo'yicha filtrlanadi va muallif tomonidan saralanadi.

Ajoyib, biz ilovamizda qirrali qidiruvni simulyatsiya qila oldik!

Ushbu maqolani yakunlashdan oldin, biz misolimizni yakuniy ko'rib chiqishimiz va nimani yaxshilash mumkinligini va qanday cheklovlarimiz borligini aniqlashimiz kerak.

Mumkin bo'lgan yaxshilanishlar

Umuman olganda, bu juda oddiy misol. Biz hozirgina asosiy sintaksis va tushunchalarni ko'rib chiqdik va ularni ish misoli sifatida amalga oshirdik. Yuqorida aytib o'tilganidek, bizda ko'proq moslashuvchanlik uchun yaxshilanishi mumkin bo'lgan bir nechta sohalar mavjud.

Biz “qoplamali” qidiruv mezonlarini amalga oshirishimiz kerak, chunki joriy misol bizni qidiruv filtrini faqat asl ma’lumotlar to‘plamiga qo‘llash imkoniyatini cheklaydi, biz allaqachon filtrlangan natijaga fasetli qidiruvni qo‘llay olmaymiz; Bu men tasavvur qila oladigan eng katta yaxshilanishdir.

Cheklovlar

Ushbu maqolada amalga oshirilgan faset qidiruvi jiddiy cheklovlarga ega (bu boshqa faset qidiruv dasturlariga ham tegishli bo'lishi mumkin):

Biz har safar MySQL-dan ma'lumotlarni olamiz

Ushbu ilova Silex ramkasidan foydalanadi. Silex, Symfony, Laravel kabi har qanday bitta kirish nuqtasi ramkasida bo'lgani kabi, uning index.php (yoki app.php) fayli har safar marshrut tahlil qilinganda va kontroller funktsiyalari bajarilganda chaqiriladi.

Agar siz index.php-dagi kodga qarasangiz, quyidagi kod qatorini ko'rasiz:

$demo = yangi pinqDemo\Demo($app);

Har safar dastur sahifasi ko'rsatilganda chaqiriladi, ya'ni har safar quyidagi kod satrlari bajariladi:

Sinf namoyishi ( xususiy $books = ""; umumiy funktsiya __construct($app) ( $sql = "book_book tartibida id boʻyicha * ni tanlang"; $this->books = $app["db"]->fetchAll($sql) )

Agar biz ramka ishlatmasak yaxshi bo'ladimi? Xo'sh, dasturlarni ramkalarsiz ishlab chiqish yaxshi fikr emasligiga qaramay, biz bir xil muammolarga duch kelamiz, deb ayta olaman: turli HTTP so'rovlari o'rtasida ma'lumotlar (va holat) saqlanmaydi. Bu HTTP ning asosiy xususiyati. Buni keshlash mexanizmlari yordamida oldini olish mumkin.

Biz bir qismini saqlab qoldik SQL so'rovlari jihatlardan foydalanish. Ma'lumotlarni olish uchun bitta tanlangan so'rovni va mos keladigan bandlar bilan so'rovlar bo'yicha uchta guruhni o'tkazish o'rniga, biz faqat bitta so'rovni bajardik va yig'ilgan ma'lumotlarni olish uchun PINQ dan foydalandik.

Xulosa

Ushbu qismda biz kitoblar to'plamini fasetli qidirish qobiliyatini amalga oshirdik. Aytganimdek, bu hali ham yaxshilanishi mumkin bo'lgan va bir qator cheklovlarga ega bo'lgan kichik bir misol.

Faceted navigatsiya barcha elektron tijorat saytlari uchun muammo hisoblanadi. Xuddi shu elementning turli xil variantlari uchun ishlatiladigan sahifalarning haddan tashqari ko'pligi qidiruv samaradorligiga tahdid soladi. Bu SEO va foydalanuvchi tajribasiga salbiy ta'sir ko'rsatishi mumkin. SEO Hacker blogi mutaxassislari qirrali navigatsiya nima ekanligini va uni qanday yaxshilashni tushuntirib berishdi.

Yoʻnalishli navigatsiya: taʼrif

Ushbu turdagi navigatsiya odatda elektron tijorat saytlarining yon panellarida joylashgan bo'lib, foydalanuvchi o'z xohishiga ko'ra sozlaydigan filtrlar va qirralarni - parametrlarni o'z ichiga oladi. onlayn-do'kon mijozlariga foydalanuvchilar kerakli narsani topmaguncha mahsulotlarni filtrlaydigan atributlar kombinatsiyasidan foydalangan holda o'zlari xohlagan mahsulotni qidirishga imkon beradi.

Fasetlar va filtrlar bir-biridan farq qiladi. Mana farq:

  • Fasetlar indekslangan toifalardir. Ular mahsulot ro'yxatini yaxshilashga yordam beradi va asosiy toifalarning kengaytmalari sifatida ishlaydi. Fasetlar foydalanuvchi qilgan har bir tanlovga o'ziga xos ma'no qo'shadi. Fasetlar indekslanganligi sababli, ular sahifada barcha muhim atributlarni o'z ichiga olganligini ta'minlash uchun qidiruv tizimiga tegishli signallarni yuborishlari kerak.

  • Filtrlar ro'yxatdagi elementlarni saralash va takomillashtirish uchun ishlatiladi. Ular foydalanuvchilar uchun kerak, ammo qidiruv tizimlari uchun emas. Filtrlar indekslanmaydi, chunki ular sahifa mazmunini o'zgartirmaydi, faqat uni boshqa tartibda saralaydi. Buning natijasida bir nechta URL-lar ikki nusxadagi tarkibga ega.

Potentsial muammolar

Har bir mumkin bo'lgan faset kombinatsiyasi o'zining noyob URL manziliga ega. SEO nuqtai nazaridan ba'zi muammolarga olib kelishi mumkin. Mana asosiylari:

  • Takroriy tarkib.
  • Skanerlash uchun byudjetni behuda sarflash.
  • Bog'lanish farqlarini yo'q qiling.

Saytingiz o'sib borishi bilan, takroriy sahifalar soni ham oshadi. Kiruvchi havolalar turli xil takroriy sahifalarga o'tishi mumkin. Bu havolalar qiymatini pasaytiradi va sahifalarni tartiblash qobiliyatini cheklaydi.

Kalit so'zlarni kannibalizatsiya qilish ehtimoli ham ortadi. Bir nechta sahifalar bir xil kalit so'zlar uchun tartib berishga harakat qiladi, natijada kamroq izchil va pastroq reytinglar paydo bo'ladi. Har bir kalit so'z faqat bitta sahifaga mo'ljallangan bo'lsa, bu muammoning oldini olish mumkin edi.

Faceted Navigation Solutions

Fasetli navigatsiya uchun yechim tanlayotganda, yakuniy maqsadingizni ko'rib chiqing: indekslanadigan sahifalar sonini ko'paytirish yoki indekslashni istamaydigan sahifalar sonini kamaytirish. Mana siz uchun foydali bo'lishi mumkin bo'lgan ba'zi echimlar:

AJAX

Agar siz AJAX dan foydalansangiz, foydalanuvchi faset yoki filtrni bosganida yangi URL yaratilmaydi. Har bir mumkin bo'lgan faset kombinatsiyasi uchun noyob URL manzillari bo'lmasligi sababli, takroriy tarkib, kalit so'zlarni kannibalizatsiya qilish va behuda indeksatsiya xarajatlari muammosi potentsial ravishda yo'q qilinadi.

AJAX faqat elektron tijorat sayti ishga tushirilgunga qadar samarali bo'lishi mumkin. Mavjud resurslar muammolarini hal qilish uchun foydalanilmaydi. Bu usul ham sizdan ma'lum xarajatlarni talab qiladi.

noindex teg

Noindex yorlig'i botlarga ma'lum bir sahifani indeksdan chiqarib tashlashni aytish uchun ishlatiladi. Shunday qilib, u Google qidiruv natijalarida ko'rinmaydi. Bu indeks va qidiruv natijalarida ko'rinadigan takroriy kontent miqdorini kamaytirishga yordam beradi.

Bu skanerlash byudjeti muammosini hal qilmaydi, chunki botlar hali ham sahifangizga tashrif buyurishadi. Shuningdek, u havolalar qiymatini taqsimlashga yordam bermaydi.

rel=kanonik atribut

Ushbu atribut yordamida siz Googlega indekslash va tartiblash uchun sizda bitta asosiy afzal sahifa borligini va bu sahifadagi kontentning boshqa barcha versiyalari indekslanishi shart boʻlmagan dublikat ekanligini aytasiz.

Sofiya Ibragimova

Kontent sotuvchisi

Agar saytingizdagi bir xil sahifaga bir nechta URL manzillaridan kirish mumkin bo'lsa, qidiruv robotlari har bir URLni alohida sahifa sifatida ko'rib chiqadi. Botlar saytingizdagi kontent noyob emasligiga qaror qiladi va bu reytingga salbiy ta'sir qiladi va qidiruv natijalaridagi mavqeingizni pasaytiradi. Buning oldini olish uchun HEAD blokiga quyidagi belgilar ketma-ketligini kiritish orqali asosiy kanonik sahifani belgilang:

Ikki nusxadagi kontent muammosini hal qilish uchun kanonik sahifalardan foydalanishingiz mumkin va ulashish havolasi asosiy sahifangiz bilan birlashtiriladi. Ammo botlarning takroriy sahifalarni skanerlashi ehtimoli bor, bu esa byudjetni behuda sarflashdir.

Robots.txt

Ba'zi sahifalarni indekslashdan yopish sizga yaxshi natijalarga erishish imkonini beradi. Bu oddiy, tez va ishonchli usul. Hammasini belgilash uchun maxsus parametrni o'rnatish eng qulaydir mumkin bo'lgan kombinatsiyalar bloklamoqchi bo'lgan qirralar va filtrlar. Uni yashirmoqchi bo'lgan har bir URLning oxiriga qo'shing (http://to'liq sahifa manzili/robots.txt) yoki sahifa kodining HEAD maydonida Robotlar meta tegidan foydalaning.

URL manziliga o'zgartirishlar kiritayotganda shuni yodda tutingki, robotlar bu o'zgarishlarni sezishi va ularga javob berishi uchun 3-4 hafta vaqt ketadi.

Bu erda ham muayyan muammolar mavjud. Havolalar qiymati cheklangan bo'ladi va bloklangan URL tashqi havolalar mavjudligi sababli indekslanishi mumkin.

Google Search Console

Bu yaxshi va foydalanuvchilarga qulayroq navigatsiya tizimini yaratish ustida ishlayotganingizda muammolaringizni vaqtinchalik hal qilishning ajoyib usuli. Siz konsoldan foydalanishingiz mumkin Google Qidiruv qidiruv tizimiga saytingizni qanday tekshirishni aytib berish.

  • tizimga kirish hisob konsolni oching va "Ko'rish" bo'limini tanlang:

  • "URL parametrlari" tugmasini bosing:

  • Har bir sozlamalaringiz sahifaga qanday ta'sir qilishini va Google ushbu sahifalarga qanday munosabatda bo'lishini xohlayotganingizni ko'rsating.

Esda tutingki, bu usul faqat Google brauzerlaridan ikki nusxadagi kontentni yashiradi. Sahifalar hali ham Bing va Yahoo-da paydo bo'ladi.

Faceted navigatsiyani qanday yaxshilash mumkin

Keling, to'g'ri qirrali navigatsiyani yaratishga imkon beradigan barcha usullarni qisqacha ko'rib chiqaylik:

  • AJAX dan foydalanish
  • Kontent etishmayotgan toifalar yoki filtr sahifalariga havolalarni olib tashlang yoki yashiring.
  • Qidiruv trafigining yuqori hajmiga ega bo'lgan fasetlarning ayrim kombinatsiyalarini indekslashga ruxsat bering
  • Kategoriyalar va kichik toifalar bo'yicha parchalar orqali sayt ierarxiyasini o'rnatish.
  • Ikki nusxadagi kontent uchun kanonik (asosiy) sahifalarni yaratish.
  • rel = "next" va rel = "prev" bilan sahifa belgilaridan foydalanib, butun seriya bo'ylab komponent sahifalaridan indekslash xususiyatlarini birlashtiring.

Xulosa

Ko'rsatilgan echimlarning har biri o'zining afzalliklari va kamchiliklariga ega. Umumjahon yechim yo'q, barchasi sizning biznesingizning o'ziga xos xususiyatlariga bog'liq. Optimallashtirilgan qirrali navigatsiya saytingizga kengroq kalit so'zlarni yo'naltirishga imkon beradi. Xavfni oldini olish uchun navigatsiya nafaqat qidiruv robotlari talablariga javob berishiga, balki yaxshi foydalanuvchi tajribasini ham taqdim etishiga ishonch hosil qiling.

Aqlli filtr yoki Faceted qidiruv - bu yirik onlayn-do'konlarda va xuddi shu Yandex.marketda ko'rish mumkin bo'lgan mahsulot toifasi bo'yicha filtr. Bu mahsulotlarni doimiy ravishda saralashga yordam beradi foydalanuvchi uchun zarur xususiyatlar, keraksiz hamma narsani olib tashlash. Bu saytda kerakli mahsulot yoki materialni tezda topish imkonini beruvchi juda qulay variant.

Va shuning uchun biz to'g'ridan-to'g'ri kerakli modullarni o'rnatish va sozlashga o'tamiz

Birinchidan, biz quyidagi modullarni yuklab olishimiz va o'rnatishimiz kerak: Search API, Search API Database Search, Entity API va Views.

Modullar sahifasida biz quyidagilarni yoqamiz:

  • Qidiruv API
  • Ko'rishlarni qidirish
  • Ma'lumotlar bazasini qidirish
  • Entity API
  • Koʻrishlar
  • Ko‘rish interfeysi
  • Ctools

Qidiruv serverini yaratish

Keling, boraylik Konfiguratsiya > Qidiruv va metadata > Qidiruv API(/admin/config/search/search_api) va bosing Server qo'shish.
Keyin ochiladigan ro'yxatda server nomini kiriting Xizmat klassi tanlang Ma'lumotlar bazasi xizmati va saqlang.

Indeks yaratish

Keling, boraylik Konfiguratsiya > Qidiruv va metadata > Qidiruv API(/admin/config/search/search_api), bosing Server qo'shish (Indeks qo'shish).
Maydonga indeks nomini kiriting Element turi (Element turi) ni tanlang Material', dalada Server tanlang Ma'lumotlar bazasi serveri, bosing Indeks yaratish.


Ochilgan shaklda saralash amalga oshiriladigan katakchalarni belgilang va saqlang.
Tugun nomi boʻyicha saralash imkoniyatiga ega boʻlish uchun sarlavhani yoqing va ochiladigan roʻyxatda uning qarshisidagi turni tanlang. ip, emas to'liq matn. Toʻliq matn boʻyicha saralay olmaysiz.

Keyingi ochilgan shaklda Filtrlar(ish jarayoni) Men hamma narsani sukut bo'yicha qoldirdim, yorlig'iga o'ting Ko'rish (Status) va bosing Endi indeks (Endi indeks).
Indekslash tugallangandan so'ng biz qidiruv sahifasini yaratamiz.

Qidiruv sahifasini yaratish

Keling, boraylik Struktura > Ko‘rishlar va bosing Yangi ko'rinish qo'shing (Yangi ko'rinish qo'shish).
Ochiladigan ro'yxatdagi yangi ko'rinishda Ko'rsatish (Ko'rsatish) biz ilgari yaratgan indeksni tanlang, qolgan maydonlarni (nom, sarlavha va yo'l) kerakli tarzda to'ldiring.


Keyingi, bosing Saqlash va sozlash(Davom etish va tahrirlash) Ko'rinishni odatdagidek o'rnating. Filtrlash mezonlarida men faqat nashr etilgan materiallarni va kerakli tugun turini ko'rsatishni qo'shdim va kerakli maydonlarni ko'rsatishni sozladim (ular bo'yicha filtrlash imkoniyatiga ega bo'lish uchun ushbu maydonlarni indeksga qo'shishingiz kerak).

Ushbu bosqichda biz ko'rinishni o'rnatishni tugatdik, endi to'g'ridan-to'g'ri faset filtriga o'tamiz.

A/search_api_ranges.module +++ b/search_api_ranges.module @@ -144,11 +144,8 @@ funksiyasi search_api_ranges_minmax($variables, $order = "ASC") ( // aks holda bizning min/maksimiz har doim foydalanuvchi teng bo'ladi kiritish $filtrlar = &$query->getFilter()->getFilters(); - if (is_array($filter)) ( - if ($filter == $variables["diapazon_field"] || ($filter != $variables["diapazon_field"] && $filtr == "")) ( - $ current_filter = $filtrlar[$key] + if(isset($filter->tegs) && is_array($filter->tags))( + if(in_array("facet:".$variables["diapazon_field"], $ filter->tegs))( unset($filters[$key]); ) )

JQuery UI Sliderni tuzatish: qayta yo'naltirishni sozlash

Modulning 7x-1.5 versiyasida men shunday faktga duch keldimki, agar slayder vidjeti qidiruv sahifasidan boshqa sahifada joylashgan bo'lsa, narx oralig'ini o'zgartirgandan so'ng, yo'nalish qidiruvga emas, balki joriy sahifaga yo'naltirilgan. sahifa.
Xato funksiyada yotadi search_api_ranges_block_slider_view_form_submit()(fayl search_api_ranges.module, 364-qator).
Men nima borligini va nima uchun ekanligini tushunmadim, shunchaki 427-qatordagi kodni biroz o'zgartirdim:

Drupal_goto($path, array("query" => massiv($params), "til" => $til)); + drupal_goto($values["yo'l"], massiv("query" => massiv($params), "til" => $language));

shundan keyin muammo hal qilindi.

© 2024 ermake.ru -- Kompyuterni ta'mirlash haqida - Axborot portali