Căutare fațetă. Găsirea căii corecte: modul în care navigarea fațetă afectează SEO (traducere)

Acasă / Windows 7

În acest articol (nivel de webmaster - avansat) vom vorbi despre așa-numita intersectare în moduri diferite. navigare „fațetată”. Pentru a simplifica asimilarea materialului, recomand să parcurgeți articolul Wikipedia „Clasificarea fațetelor” și publicațiile pe engleză(dar cu imagini!) „Concepeți o navigare mai bună cu fațete pentru site-urile dvs. web”.

Navigarea cu fațete care filtrează după culoare sau interval de preț poate fi utilă pentru vizitatori, dar adesea dăunează rezultatelor căutării, deoarece creează mai multe combinații de adrese URL cu conținut duplicat. Din cauza duplicaturilor, motoarele de căutare nu vor putea scana rapid site-ul pentru actualizări de conținut, ceea ce afectează în consecință indexarea. Pentru a minimiza această problemă și pentru a-i ajuta pe webmasteri să faciliteze căutarea cu navigare cu fațete, am dori să:

Ideal pentru utilizatori și căutare pe Google

Ștergeți calea către paginile de produse/articole:

Reprezentare URL pentru pagina categoriei:
http://www.example.com/category.php?category=gummy-bomboane

Reprezentare URL specifică produsului:
http://www.example.com/product.php?item=swedish-fish

Dubluri nedorite cauzate de navigarea fațetă

Aceeași pagină este accesibilă de la diferite adrese web:

Pagina canonică



Adresa URL: example.com/product.php? item=suedez-peste

Pagina duplicată



URL:example.com/product.php? item=swedish-fish&category=gummy-bomboane&price=5-10


categorie=bomboane-gumate&gust=acru&preț=5-10

Erori:

  • Inutil pentru Google, deoarece utilizatorii caută rar [marmeladă la prețul de 9:55 USD].
  • Inutil pentru roboți de căutare, care va găsi același articol („salata de fructe”) din paginile categoriei părinte (fie „Jummy”, fie „Sour Gummy”).
  • Un punct negativ pentru proprietarul site-ului, deoarece solicitările de indexare sunt diluate cu numeroase versiuni ale aceleiași categorii.
  • Un punct negativ pentru proprietarul site-ului, deoarece este inutil și o încărcare suplimentară asupra lățimii de bandă a site-ului
Pagini goale:


Adresa URL: example.com/category.php? categorie=bomboane-gummy&gust=acru&pret=peste-10

Erori:

  • Codul pentru motoarele de căutare(în acest caz, pagina ar trebui să returneze un cod 404)
  • Pagina goală pentru utilizatori


Cele mai proaste soluții (nu sunt prietenoase cu căutarea) pentru navigarea fațetă

Exemplul nr. 1: Nu este utilizat ca parte a unei adrese URL parametri standard: virgule și paranteze, în schimb cheie=valoare&:

  • example.com/category? [ categorie: bomboane-gummy ][ sort:price-low-to-high ][ sid:789 ]
  • example.com/category?category , gummy-candy , sort , lowtohigh , sid , 789
Cum să:
example.com/category? categorie=bomboane-gumate&sort=de mic la mare&sid=789

Exemplul nr. 2: Folosind directoare sau căi de fișiere, mai degrabă decât parametrii din listele de valori care nu modifică conținutul paginii:
exemplu.com/c123 /s789/ produs?swedish-fish
(unde /c123/ categorie, /s789/ ID de sesiune, care nu modifică conținutul paginii)

Solutie buna:

  • example.com /gummy-candy/ produs?item=swedish-fish&sid=789(directorul, /gummy-candy/, modifică conținutul paginii într-un mod semnificativ)
Cea mai buna solutie:
  • example.com/product?item=swedish-fish& categorie=gummy-bomboane&sid=789 (Parametrii URL oferă motoarele de căutare mai multă flexibilitate pentru a determina cum să acceseze cu crawlere eficient)
Este dificil pentru crawler-uri să diferențieze valorile utile (cum ar fi „gummy-candy”) de cele inutile (cum ar fi „SESSIONID”) atunci când aceste valori sunt plasate direct în căile de legătură. Pe de altă parte, parametrii URL oferă motoarele de căutare flexibilitate pentru a testa rapid și a determina când o anumită valoare nu necesită acces crawler la toate opțiunile.

Valorile comune care nu modifică conținutul paginii și care trebuie listate ca parametri URL includ:

  • ID sesiune
  • Urmărire ID
  • ID-uri de referință
  • Marcaje temporale
Exemplul nr. 3: convertiți valorile generate de utilizator (posibil infinite) în parametri URL care pot fi accesați cu crawlere și indexați, dar inutili pentru căutare.
Utilizarea datelor minore generate de utilizatorii site-ului (cum ar fi longitudinea/latitudinea sau „cu zile în urmă”) în adrese URL accesate cu crawlere și indexate:
  • example.com/find-a-doctor? radius=15&latitude=40.7565068&longitude=-73.9668408
  • example.com/article?category=health& zile-acum=7
Cum să:
  • example.com/find-a-doctor? city=san-francisco&neighborhood=soma
  • example.com/articles?category=health& data=10-ianuarie-2014
În loc să permită utilizatorului să genereze valori pentru a crea URL-uri care pot fi accesate cu crawlere (ceea ce are ca rezultat posibilități infinite cu foarte puțină valoare pentru vizitatori), este mai bine să publice o categorie de pagină pentru cele mai populare valori, în plus puteți include Informații suplimentare astfel încât pagina să ofere mai multă valoare decât o pagină obișnuită cu rezultatele căutării. Alternativ, puteți lua în considerare plasarea valorilor generate de utilizator într-un director separat și apoi utilizarea robots.txt pentru a preveni accesarea cu crawlere din acel director.
  • exemplu.com /filtrare/ găsi-un-medic?radius=15&latitude=40.7565068&longitude=-73.9668408
  • exemplu.com /filtrare/ articole?category=health&days-ago=7
Și în robots.txt:
Agent utilizator: *
Nu permiteți: /filtrare/

Exemplul nr. 4. Adăugarea parametrilor URL fără logică.

  • exemplu.com /bomboane-gumate/acadele/bomboane-gumate/ bomboane-gumoase/produs?pește-suedez
  • example.com/product? pisică=bomboană-gumoasă&cat=acadele&cat=bomboană-gumoasă&cat=bomboane-gumate&item=pește-suedez
Solutie buna:
  • example.com /gummy-candy/ product?item=swedish-fish
Cea mai buna solutie:
  • example.com/product? item=swedish-fish&category=gummy-bomboane
Parametrii URL străini nu fac decât să mărească duplicarea, ceea ce face ca site-ul să fie accesat cu crawlere și indexat mai puțin eficient. Prin urmare, este necesar să scăpați de parametrii URL inutili și să curățați periodic linkurile nedorite înainte de a genera noi adrese URL. Dacă sunt necesari mulți parametri pentru o sesiune de utilizator, puteți ascunde informațiile din cookie-uri în loc să adăugați constant valori precum pisică=bomboane-gumate&pisica=acadele&pisica=bomboane-gumate& ...

Exemplul nr. 5: Sugerați îmbunătățiri suplimentare (filtrare) atunci când există rezultate nule.

Prost:
Permiteți utilizatorilor să selecteze filtre atunci când există elemente nule de rafinat.


Clarificare la o pagină cu zero rezultate (de exemplu, preț=peste 10), care frustrează utilizatorii și provoacă solicitări inutile pentru motoarele de căutare.

Cum să:
Creați linkuri numai atunci când există elemente pe care utilizatorul le poate selecta. Dacă rezultatul este zero, linkul este marcat cu „gri” (adică, inaccesibil). Pentru a îmbunătăți și mai mult gradul de utilizare, luați în considerare includerea unui indicator al numărului de articole disponibile lângă fiecare filtru.


Afișarea unei pagini cu zero rezultate (de exemplu, preț=peste 10) nu este permisă, în plus, interzice utilizatorilor să facă clicuri inutile, iar motoarele de căutare nu accesează cu crawlere acest lucru. pagina utila.

Este necesar să se prevină apariția adreselor inutile și să se minimizeze spațiul pentru vizitator prin crearea de adrese URL numai atunci când produsele sunt disponibile. Acest lucru va ajuta la menținerea utilizatorilor implicați pe site-ul dvs. (mai puține clicuri pe butonul înapoi când nu sunt găsite produse) și va reduce numărul de adrese URL posibile cunoscute de motoarele de căutare. În plus, dacă o pagină nu este doar „temporar epuizată”, dar este puțin probabil să conțină informații relevante, s-ar putea să vă gândiți să îi oferiți un cod de răspuns 404. Pe pagina 404 puteți crea mesaj util pentru utilizatorii cu mai multe opțiuni în caseta de navigare sau de căutare, astfel încât utilizatorii să poată găsi produse similare.

Pentru site-urile noi ai căror webmasteri se gândesc să implementeze navigarea cu fațete, există mai multe opțiuni pentru optimizarea accesării cu crawlere (setul de adrese de pe site-ul dvs. cunoscut de Google) a paginilor cu conținut unic și reducerea paginilor duplicate de la intrarea în indexul motorului de căutare (consolidarea indexării). semnale).

Determinați ce parametri URL sunt necesari pentru ca motoarele de căutare să acceseze cu crawlere fiecare pagină de conținut individuală (adică, determinați ce parametri sunt necesari pentru a crea cel puțin o cale de clic către fiecare articol). Parametrii necesari pot include item-id , categorie-id , pagina etc.

Determinați ce parametri vor fi utili vizitatorilor cu interogările lor și care sunt susceptibili de a provoca dublarea accesării cu crawlere și indexare. În exemplul de cofetărie (marmeladă), parametrul URL „gust” ar putea fi valoros pentru utilizatorii cu interogări în exemplu gust=acru . Cu toate acestea, este logic să se ia în considerare parametrul „preț” pentru a provoca dublari inutile categorie=bomboane-gumate&gust=acru& pret=peste-10 . Alte exemple comune:

  • Parametri valoroși pentru motoarele de căutare: item-id , category-id , name , brand ...
  • Parametri inutile: ID-ul sesiunii, intervalul de preț...
Să ne uităm la implementarea uneia dintre mai multe opțiuni de configurare pentru adresele URL care conțin parametri inutile. Asigurați-vă că parametrii URL „inutil” nu sunt de fapt necesari pentru ca crawlerele motoarelor de căutare să poată accesa cu crawlere sau pentru ca utilizatorul să găsească fiecare produs în parte!

Opțiunea 1: și link-uri interne

Marcați toate adresele URL inutile cu . Acest lucru va reduce costurile cu forța de muncă ale robotului de căutare și va preveni o scădere a frecvenței de accesare cu crawlere. Trebuie să gestionați scanarea la nivel global prin robots.txt (Nota traducătorului: consultați articolul „ „).
Utilizați atributul rel="canonical" pentru a separa paginile pentru indexul de căutare de paginile care nu sunt necesare acolo (de exemplu, pe pagină pret=5-10 puteți adăuga atributul rel="canonic", indicând categoria tuturor marmeladei acru example.com/category.php?category=gummy-candies&taste=sour& page=toate ).

Opțiunea 2: Robots.txt și Disallow

Adresele URL cu parametri inutile sunt incluse în directorul /filtering/, care va fi închis în robots.txt (disallow). Acest lucru va permite tuturor motoarelor de căutare să acceseze cu crawlere numai linkul (conținutul) „corect” al site-ului, dar va bloca accesul cu crawlere a adreselor URL nedorite simultan. De exemplu ( example.com/category.php?category=gummy-bomboane), dacă parametrii valoroși erau articolul, categoria și gustul, iar identificatorul de sesiune și prețul ar fi de prisos, atunci URL-ul pentru gust ar fi astfel:
example.com/category.php?category=gummy-bomboane& gust=acru, dar toți parametrii inutile, cum ar fi prețul, vor fi incluși în adresa URL într-un director predefinit - /filtrare/:
exemplu.com /filtrare/ categorie.php?category=bomboane-gummy&price=5-10,
care va fi apoi interzis prin robots.txt:
Agent utilizator: *
Nu permiteți: /filtrare/

Opțiunea 3: Gazde separate

Asigurați-vă că cele mai bune solutii, enumerate mai sus (de exemplu, pentru adrese inutile) încă se aplică. ÎN altfel motoarele de căutare au format deja o masă mare de link-uri în index. Astfel, munca dvs. va avea ca scop reducerea creșterii în continuare a paginilor inutile accesate cu crawlere de Googlebot și consolidarea semnalelor de indexare.

Utilizați parametrii cu codificare standard și format cheie=valoare.

Asigurați-vă că valorile care nu modifică conținutul paginii, cum ar fi ID-urile de sesiune, sunt implementate ca cheie=valoare și nu directoare.

Nu permiteți clicuri și nu generați adrese URL atunci când nu există elemente de filtrat.

Adăugați o logică la maparea parametrilor URL: eliminați parametrii care nu sunt necesari în loc să adăugați constant valori (de exemplu, evitați generarea de linkuri ca aceasta: example.com/product?cat=gummy-candy&cat=lollipops &cat=gummy-candy&item=swedish-fish).

Păstrați parametrii valoroși în adresa URL listându-i mai întâi (deoarece adresele URL sunt vizibile în rezultatele căutării) și parametrii mai puțin relevanți în ultimul rând (de exemplu, ID-ul sesiunii).
Evitați această structură de legături: example.com/category.php? session-id=123&tracking-id=456&category=bomboane-gumate&gust=acru
Configurați parametrii URL în Instrumentele pentru webmasteri dacă înțelegeți clar cum funcționează linkurile pe site-ul dvs.

Asigurați-vă că, atunci când utilizați JavaScript pentru a manipula în mod dinamic conținutul (sortare/filtrare/ascunde) fără a actualiza adresa URL, există adrese web reale pe site-ul dvs. care au valoare de căutare, cum ar fi paginile principale de categorii și produse, care pot fi accesate cu crawlere și indexabile . Încercați să nu utilizați numai pagina de start(adică o singură adresă URL) pentru întregul site și prin JavaScript modificați dinamic conținutul prin navigare - acest lucru, din păcate, va oferi utilizatorilor o singură adresă URL în căutări. În plus, verificați dacă performanța nu afectează mai rău performanța filtrării dinamice, deoarece va interfera cu capacitatea utilizatorului de a lucra cu site-ul.

Îmbunătățiți indexarea diferitelor pagini cu același conținut prin specificarea atributului rel="canonical" pe versiunea privilegiată a paginii. Atributul rel="canonical" poate fi utilizat în cadrul unuia sau mai multor domenii.

Optimizați indexarea conținutului paginat (de exemplu, pagina=1 și pagina=2 din categoria „bomboane gummy”):

  • Adăugați un atribut rel="canonical" la o serie de pagini care indică categoria canonică cu parametrul „view-all” (de exemplu, page=1, page=2 și page=3 din categoria „bomboane gummy” cu cu rel=”canonic” on categorie=bomboane-gumate&page=all), asigurându-vă că pagina este relevantă pentru utilizatori și se încarcă rapid.
  • Utilizați marcajul de paginare rel="next" și rel="prev" pentru a indica relația dintre paginile individuale (consultați articolul „Paginaton with rel="next" și rel="prev" ").
Includeți numai linkuri canonice în sitemapurile dvs.

Am aruncat o privire rapidă asupra instalării și sintaxei de bază a PINQ, un port al LINQ în PHP. În acest articol, vom analiza cum să folosiți PINQ pentru a simula caracteristica de căutare fațetă în MySQL.

În acest articol nu vom acoperi toate aspectele căutării fațetate. Persoanele interesate pot căuta informații adecvate pe Internet.

O căutare fațetă tipică funcționează astfel:

  • Utilizatorul introduce un cuvânt cheie sau mai multe cuvinte cheie pentru a căuta. De exemplu, „router” pentru a căuta produse în care cuvântul „router” apare în descriere, cuvinte cheie, numele categoriei, etichete etc.
  • Site-ul returnează o listă de produse care corespund acestor criterii.
  • Site-ul oferă mai multe link-uri pentru a vă personaliza termenii de căutare. De exemplu, vă poate permite să specificați anumiți producători de routere sau să setați o gamă de prețuri sau alte caracteristici.
  • Utilizatorul poate continua să specifice criterii de căutare suplimentare pentru a obține setul de date de interes.

Căutarea fațetă este foarte populară și este instrument puternic, poate fi observat pe aproape orice site web legat de comerțul electronic.

Din păcate, căutarea fațetă nu este încorporată în MySQL. Deci, ce ar trebui să facem dacă încă folosim MySQL, dar vrem să oferim utilizatorului această oportunitate?

Cu PINQ, care are o abordare similară, puternică și simplă, putem obține același comportament ca și cum am folosi alte motoare de baze de date.

Extinderea demo din prima parte

Comentariu: Tot codul din această parte și din prima parte poate fi găsit în depozit.

În acest articol, vom extinde demonstrația din partea 1 cu o îmbunătățire semnificativă a căutării fațete.

Să începem cu index.php și să adăugăm următoarele linii:

$app->get("demo2", function () use ($app) ( global $demo; $test2 = nou pinqDemo\Demo($app); return $test2->test2($app, $demo->test1 ($app)); $app->get("demo2/facet/(key)/(value)", function ($key, $value) use ($app) ( global $demo; $test3 = new pinqDemo\Demo($app); returnează $test3->test3($aplicație, $demo->test1($aplicație), $cheie, $valoare ));

Primul traseu ne duce la o pagină pentru a vizualiza toate postările care se potrivesc cu căutarea prin cuvinte cheie. Pentru a menține exemplul simplu, selectăm toate cărțile din tabelul book_book. De asemenea, va afișa setul de date rezultat și un set de link-uri pentru a specifica criteriile de căutare.

În aplicațiile reale, după ce faceți clic pe astfel de linkuri, toate filtrele de fațete se vor ajusta la valorile limită ale setului de date rezultat. Utilizatorul va putea astfel să adauge secvenţial noi condiţii de căutare, de exemplu, mai întâi selectează un producător, apoi specifică un interval de preţ etc.

Dar în acest exemplu nu vom implementa acest comportament - toate filtrele vor reflecta valorile limită ale setului de date original. Aceasta este prima limitare și primul candidat pentru îmbunătățire în demonstrația noastră.

După cum puteți vedea în codul de mai sus, funcțiile reale sunt localizate într-un alt fișier numit pinqDemo.php. Să aruncăm o privire la codul corespunzător care oferă funcția de căutare fațetă.

Clasa de aspect

Mai întâi, să creăm o clasă care reprezintă un aspect. În general, un aspect ar trebui să conțină mai multe proprietăți:

  • Datele pe care operează ( $date)
  • Cheia prin care se realizează gruparea ( $key)
  • Tip cheie ($type). Poate fi una dintre următoarele:
    • specificați șirul complet pentru o potrivire exactă
    • specificați o parte a șirului (de obicei, cea inițială) pentru a căuta după model
    • indicați un interval de valori, pentru grupare după interval
  • dacă tipul de cheie este un interval de valori, trebuie să definiți un pas de valoare pentru a determina limitele inferioare și superioare ale intervalului; sau dacă tipul face parte dintr-un șir, trebuie să specificați câte primele litere vor fi folosite pentru grupare ($range)

Gruparea- partea cea mai critică a aspectului. Toate informațiile agregate pe care un aspect le poate returna depind de criteriile de grupare. De obicei, cele mai utilizate criterii de căutare sunt „Șir complet”, „Parte din șir” sau „Interval de valori”.

Spațiul de nume classFacet ( utilizați Pinq\ITraversable, Pinq\Traversable; clasa Facet (public $date; // Setul original de date public $key; // câmp prin care se grupează public $type; // F: întreg rândul; S: șiruri de început ; R: public $range // joacă un rol numai dacă $type != F ... public function getFacet() ( $filter = ""; if ($this->type == "F") / / întreaga linie ( ... ) elseif ($this->type == "S") // începutul liniei ( ... ) elseif ($this->type == "R") // interval de valori ​​( $ filter = $this->data ->groupBy(function($row) ( return floor($row[$this->key] / $this->range) * $this->range; )) -> select(funcție (ITraversable $date) ( return ["key" => $data->last()[$this->key], "count" => $data->count()]; )); filtru ) ) )

Funcția principală a acestei clase este de a returna un set de date filtrat pe baza setului de date original și a proprietăților aspectului. Din cod se vede clar ca pt diverse tipuri sunt folosite conturile diverse moduri gruparea datelor. În codul de mai sus am arătat cum ar putea arăta codul dacă grupăm datele după un interval de valori în trepte specificate în $gamă.

Setarea aspectelor și afișarea datelor sursă

Funcție publică test2($app, $date) ( $fațetă = $this->getFacet($date); return $app["cremură"]->render("demo2.html.twig", array("fațetă" = > $fațetă, „date” => $date)); funcție privată getFacet($originalData) ( $fațetă = array(); $date = \Pinq\Traversable::from($originalData); // 3 exemple de creare diferite obiecte aspect și returnează aspectele $filter1 = new \classFacet\Facet($date, „autor”, „F” $filter2 = new \classFacet\Facet($date, „title”, „S”, 6) ; $filter3 = new \classFacet\Facet($date, "preț", "R", 10 $filter1->key] = $filter1->getFacet(); ); $fațetă[$filter3->key] = $filter3->getFacet();

În metoda getFacet() facem următoarele:

  • Convertiți datele originale într-un obiect Pinq\Traversable pentru procesare ulterioară
  • Creăm trei aspecte. Aspectul „autor” va grupa după câmpul de autor și va implementa gruparea după întregul rând; aspect 'titlu' - după câmpul titlu cu grupare pe o parte a rândului (cu primele 6 caractere); aspectul „preț” - după câmpul preț cu grupare după interval (în trepte de 10)
  • În cele din urmă, extragem aspectele și le returnăm la funcția test2, astfel încât acestea să poată fi afișate în șablon pentru afișare

Aspecte de ieșire și date filtrate

În cele mai multe cazuri, filtrele vor fi afișate ca o linie și vă vor conduce la vizualizarea rezultatului filtrat.

Am creat deja o rută ("demo2/facet/(key)/(value)") pentru a afișa rezultate de căutare cu fațete și pentru a filtra link-uri.

Traseul are doi parametri, în funcție de cheia filtrată și de valoarea cheii respective. Funcția test3 care este legată de această rută este prezentată mai jos:

Funcție publică test3($app, $originalData, $key, $value) ($date = \Pinq\Traversable::from($originalData); $fațetă = $this->getFacet($date); $filter = null; if ($cheie == "autor") ( $filtru = $date ->unde(funcție($rând) folosește ($valoare) ( ​​return $rând["autor"] == $valoare; )) ->orderByAscending( function($row) use ($key) ( return $row["preț"]; )) ) elseif ($key == "preț") ( ... ) else //$key== titlu ( .. . ) return $app["twig"]->render("demo2.html.twig", array("fațetă" => $fațetă, "date" => $filtru) )

Practic, în funcție de cheie, aplicăm filtrarea (o funcție anonimă în instrucțiunea where) în funcție de valoarea transmisă și obținem următorul set de date filtrate. De asemenea, putem seta ordinea de filtrare a datelor.

În cele din urmă, afișăm datele brute (împreună cu filtre) în șablon. Această rută folosește același model pe care l-am folosit în „demo2”.

Bara de căutare

    (% pentru k, v în fațetă %)
  • ((k|majusculă))
    • (% pentru vv în v%)
    • ((v. număr))((v.cheie))
    • (%endfor%)
    (%endfor%)

Trebuie să ne amintim că aspectele generate de aplicația noastră sunt matrice imbricate. La primul nivel, aceasta este o serie de toate aspectele și, în cazul nostru, există trei dintre ele (pentru autor, titlu, respectiv preț).

Fiecare aspect are o matrice cheie-valoare, astfel încât să putem repeta peste el folosind metode normale.

Observați cum construim adresele URL pentru linkurile noastre. Folosim atât cheia buclă exterioară (k), cât și cheile buclei interioare (vv.key) ca parametri pentru rută ("demo2/facet/(key)/(value)"). Mărimea matricelor (vv.count) este utilizată pentru afișare în șablon.

Prima imagine arată setul de date original, iar a doua imagine este filtrată în funcție de intervalul de preț de la 0 USD la 10 USD și sortată după autor.

Grozav, am reușit să simulăm căutarea fațetă în aplicația noastră!

Înainte de a încheia acest articol, trebuie să aruncăm o privire finală asupra exemplului nostru și să stabilim ce poate fi îmbunătățit și ce limitări avem.

Posibile îmbunătățiri

În general, acesta este un exemplu foarte simplu. Tocmai am trecut peste sintaxa și conceptele de bază și le-am implementat ca exemplu de lucru. După cum sa menționat anterior, avem mai multe domenii care ar putea fi îmbunătățite pentru o mai mare flexibilitate.

Trebuie să implementăm criterii de căutare „suprapunere”, deoarece exemplul actual ne limitează la capacitatea de a aplica filtrarea de căutare numai setului de date inițial, nu putem aplica căutarea de fațete unui rezultat deja filtrat; Aceasta este cea mai mare îmbunătățire pe care mi-o pot imagina.

Restricții

Căutarea de fațete implementată în acest articol are limitări serioase (care se pot aplica și altor implementări de căutare de fațete):

Preluăm date de la MySQL de fiecare dată

Această aplicație folosește cadrul Silex. Ca și în cazul oricărui cadru cu punct de intrare unic, cum ar fi Silex, Symfony, Laravel, fișierul său index.php (sau app.php) este apelat de fiecare dată când o rută este analizată și sunt executate funcțiile controlerului.

Dacă te uiți la codul din index.php nostru, vei observa că următoarea linie de cod:

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

este apelat de fiecare dată când pagina aplicației este redată, ceea ce înseamnă că următoarele linii de cod sunt executate de fiecare dată:

Demo clasă ( private $books = ""; funcția publică __construct($app) ( $sql = "selectați * din book_book order by id"; $this->books = $app["db"]->fetchAll($sql )

Va fi mai bine dacă nu folosim un cadru? Ei bine, în ciuda faptului că dezvoltarea de aplicații fără cadre nu este o idee bună, pot spune că ne vom confrunta cu aceleași probleme: datele (și starea) nu sunt păstrate între diferite solicitări HTTP. Aceasta este o caracteristică fundamentală a HTTP. Acest lucru poate fi evitat prin utilizarea mecanismelor de stocare în cache.

Am salvat câteva interogări SQL folosind aspecte. În loc să transmitem o interogare de selecție pentru a prelua datele și trei interogări grupate după clauzele corespunzătoare, am rulat doar una interogare unde și am folosit PINQ pentru a obține informațiile agregate.

Concluzie

În această parte, am implementat capacitatea de a căuta fațete într-o colecție de cărți. După cum am spus, acesta este doar un mic exemplu, care are loc de îmbunătățire și care are o serie de limitări.

Navigarea fațetă este o problemă pentru toate site-urile de comerț electronic. Un număr excesiv de pagini care sunt utilizate pentru diferite variații ale aceluiași element reprezintă o amenințare pentru eficiența căutării. Acest lucru poate afecta negativ SEO și experiența utilizatorului. Experții de la blogul SEO Hacker au explicat ce este navigarea fațetă și cum să o îmbunătățim.

Navigare cu fațete: definiție

Acest tip de navigare se găsește de obicei în barele laterale ale site-urilor de comerț electronic și conține filtre și fațete - parametri pe care utilizatorul îi configurează după cum dorește. permite clienților magazinului online să caute produsul pe care îl doresc folosind o combinație de atribute care vor filtra produsele până când utilizatorii găsesc ceea ce au nevoie.

Fațetele și filtrele sunt diferite unele de altele. Iată diferența:

  • Fațetele sunt categorii indexate. Acestea ajută la rafinarea listelor de produse și acționează ca extensii ale categoriilor principale. Fațetele adaugă un sens unic fiecărei alegeri pe care o face utilizatorul. Deoarece fațetele sunt indexate, acestea trebuie să trimită semnale relevante motorului de căutare, asigurându-se că pagina conține toate atributele importante.

  • Filtrele sunt folosite pentru a sorta și rafina elementele din liste. Sunt necesare pentru utilizatori, dar nu pentru motoarele de căutare. Filtrele nu sunt indexate deoarece nu modifică conținutul paginii, ci doar o sortează într-o ordine diferită. Astfel, mai multe adrese URL au conținut duplicat.

Probleme potențiale

Fiecare combinație posibilă de fațete are propriul URL unic. Poate cauza unele probleme din perspectiva SEO. Iată pe cele principale:

  • Conținut duplicat.
  • Risip de buget la scanare.
  • Eliminați diferențele de link-uri.

Pe măsură ce site-ul dvs. crește, crește și numărul de pagini duplicat. Linkurile primite pot ajunge la diferite pagini duplicat. Acest lucru reduce valoarea link-urilor și limitează capacitatea paginilor de a se clasa.

Probabilitatea canibalizării cuvintelor cheie crește și ea. Mai multe pagini încearcă să se claseze pentru aceleași cuvinte cheie, rezultând în clasamente mai puțin consistente și mai scăzute. Această problemă ar putea fi evitată dacă fiecare cuvânt cheie a fost direcționat doar către o singură pagină.

Soluții de navigație cu fațete

Atunci când alegeți o soluție pentru navigarea fațetă, luați în considerare obiectivul final: creșterea numărului de pagini pe care le indexați sau reducerea numărului de pagini pe care nu doriți să le indexați. Iată câteva soluții care vă pot fi utile:

AJAX

Dacă utilizați AJAX, o nouă adresă URL nu este creată atunci când utilizatorul face clic pe o fațetă sau pe un filtru. Deoarece nu vor exista adrese URL unice pentru fiecare combinație posibilă de fațete, problema conținutului duplicat, a canibalizării cuvintelor cheie și a costurilor de indexare irosite este potențial eliminată.

AJAX poate fi eficient doar înainte ca site-ul de comerț electronic să fie lansat. Nu este folosit pentru a rezolva problemele resurselor existente. Această metodă necesită și anumite cheltuieli din partea dvs.

eticheta noindex

Eticheta noindex este folosită pentru a le spune roboților să excludă o anumită pagină din index. În acest fel, nu va apărea în rezultatele căutării Google. Acest lucru ajută la reducerea cantității de conținut duplicat care apare în index și în rezultatele căutării.

Acest lucru nu va rezolva problema bugetului de accesare cu crawlere, deoarece roboții vă vor vizita în continuare pagina. De asemenea, nu ajută la distribuirea valorii link-urilor.

Rel=atributul canonic

Cu acest atribut, îi spuneți Google că aveți o pagină principală preferată de indexat și clasat, iar toate celelalte versiuni de conținut din pagina respectivă sunt doar duplicate care nu trebuie indexate.

Sofia Ibragimova

Marketer de conținut

Dacă aceeași pagină de pe site-ul dvs. poate fi accesată de la mai multe adrese URL, roboții de căutare vor trata fiecare adresă URL ca o pagină separată. Boții vor decide că conținutul de pe site-ul dvs. nu este unic, iar acest lucru va afecta negativ clasamentele și vă va reduce poziția în rezultatele căutării. Pentru a evita acest lucru, specificați pagina canonică principală inserând următoarea secvență de caractere în blocul HEAD:

Puteți folosi pagini canonice pentru a rezolva problema conținutului duplicat, iar linkul de distribuire va fi îmbinat cu pagina dvs. principală. Dar există șansa ca roboții să acceseze cu crawlere paginile duplicate, ceea ce este o risipă de buget de accesare cu crawlere.

Robots.txt

Închiderea unor pagini de la indexare vă permite să obțineți rezultate bune. Acesta este un mod simplu, rapid și fiabil. Cel mai convenabil este să setați un parametru personalizat pentru a specifica tot combinatii posibile fațetele și filtrele pe care doriți să le blocați. Includeți-l la sfârșitul fiecărei adrese URL pe care doriți să o ascundeți (http://full page address/robots.txt) sau utilizați metaeticheta Robots în zona HEAD a codului paginii.

Când faceți modificări ale adresei URL, rețineți că roboții au nevoie de 3-4 săptămâni pentru a observa aceste modificări și a răspunde la acestea.

Există anumite probleme și aici. Valoarea link-urilor va fi limitată, iar o adresă URL blocată poate fi indexată din cauza prezenței unor link-uri externe.

Google Search Console

Aceasta este o modalitate excelentă de a vă rezolva temporar problemele în timp ce lucrați la crearea unui sistem de navigație mai bun și mai ușor de utilizat. Puteți folosi consola Căutare Google pentru a spune motorului de căutare cum să acceseze cu crawlere site-ul dvs.

  • Conectare cont consolă și selectați secțiunea „Crawler”:

  • Faceți clic pe butonul „Parametri URL”:

  • Indicați impactul pe care îl va avea fiecare dintre setările dvs. asupra paginii și modul în care doriți ca Google să trateze acele pagini.

Rețineți că această metodă ascunde doar conținutul duplicat de crawlerele Google. Paginile vor apărea în continuare în Bing și Yahoo.

Cum să îmbunătățiți navigarea fațetă

Să luăm în considerare pe scurt toate metodele care vă permit să creați navigarea fațetă corectă:

  • Folosind AJAX
  • Eliminați sau ascundeți linkurile către categorii sau filtrați paginile din care lipsește conținut.
  • Permite indexarea anumitor combinații de fațete care au un volum mare de trafic de căutare
  • Configurarea unei ierarhii de site prin breadcrumb-uri în categorii și subcategorii.
  • Crearea de pagini canonice (principale) pentru conținut duplicat.
  • Consolidați proprietățile de indexare din paginile componente de-a lungul întregii serii folosind marcarea paginii cu rel="next" și rel="prev" .

Concluzie

Fiecare dintre soluțiile menționate are propriile avantaje și dezavantaje. Nu există o soluție universală; totul depinde de specificul afacerii dvs. și de cazul specific. Navigarea optimizată cu fațete va permite site-ului dvs. să vizeze o gamă mai largă de cuvinte cheie. Pentru a evita riscul, asigurați-vă că navigarea nu numai că îndeplinește cerințele roboților de căutare, ci oferă și o experiență bună pentru utilizator.

Filtrul inteligent sau Căutare cu fațete este un filtru pe categorii de produse, care poate fi văzut în marile magazine online și în același Yandex.market. Vă ajută să sortați produsele în mod constant necesare utilizatorului proprietăți, eliminând tot ce nu este necesar. Aceasta este o opțiune foarte convenabilă care vă permite să găsiți rapid produsul sau materialul dorit pe site.

Deci, să trecem direct la instalarea și configurarea modulelor de care avem nevoie

Mai întâi, va trebui să descarcăm și să instalăm următoarele module: Search API, Search API Database Search, Entity API și Views.

Pe pagina de module activăm:

  • Căutare API
  • Căutați vizualizări
  • Căutare în baze de date
  • Entity API
  • Vizualizări
  • Vizualizări UI
  • Cinstrumente

Crearea unui server de căutare

Să mergem la Configurare > Căutare și metadate > Căutare API(/admin/config/search/search_api) și faceți clic Adaugă server.
Apoi introduceți numele serverului în lista verticală Clasa de serviciu alege Serviciul baze de dateși salvați.

Crearea unui index

Să mergem la Configurare > Căutare și metadate > Căutare API(/admin/config/search/search_api), faceți clic Adaugă server (Adăugați index).
Introduceți numele indexului în câmp Tipul articolului (tip de articol) selectați ‘ Material', pe teren Server alege Server de baze de date, faceți clic Crearea unui index.


În formularul care se deschide, bifați casetele prin care se va efectua sortarea și salvați.
Pentru a putea sorta după numele nodului, activați titlul și selectați tipul vizavi în lista derulantă şir, nu text integral. Nu puteți sorta după textul integral.

În următoarea formă care se deschide Filtre(flux de lucru) Am lăsat totul ca implicit, accesați fila Vedere (Stare), și apăsați Index acum (Index acum).
După finalizarea indexării, vom crea o pagină de căutare.

Crearea unei pagini de căutare

Să mergem la Structură > Vizualizăriși faceți clic Adăugați o nouă vizualizare (Adăugați o vizualizare nouă).
În noua vizualizare din lista derulantă Spectacol (Spectacol) selectați indexul creat anterior, completați câmpurile rămase (nume, titlu și cale) după cum aveți nevoie.


Apoi, faceți clic Salvați și configurați(Continuați și editați) Configurați vizualizarea ca de obicei. În criteriile de filtrare am adăugat afișarea doar materialelor publicate și tipul de nod dorit și am configurat afișarea câmpurilor necesare (trebuie să adăugați aceste câmpuri la index pentru a putea filtra după ele).

În această etapă, am terminat cu configurarea vizualizării, acum să trecem direct la filtrul de fațete.

A/search_api_ranges.module +++ b/search_api_ranges.module @@ -144,11 +144,8 @@ function search_api_ranges_minmax($variables, $order = "ASC") ( // altfel min/max ar fi întotdeauna egal cu utilizatorul input $filters = &$query->getFilter()->getFilters(); - dacă (este_matrice($filtru)) ( - dacă ($filtru == $variabile["câmp_gamă"] || ($filtru != $variabile["câmp_gamă"] && $filtru == "")) ( - $ curent_filtru = $filtre[$key]; + if(isset($filter->tags) && is_array($filter->tags))( + if(in_array("facet:".$variables["range_field"]), $ filtru->etichete))( unset($filtre[$cheie]); ) )

Patch JQuery UI Slider: configurarea unei redirecționări

În versiunea 7x-1.5 a modulului, am întâlnit faptul că, dacă widget-ul slider era situat pe o altă pagină decât pagina de căutare, atunci după modificarea intervalului de preț, direcția a fost redirecționată către pagina curentă și nu către căutare. pagină.
Eroarea constă în funcție search_api_ranges_block_slider_view_form_submit()(fișier search_api_ranges.module, linia 364).
Nu m-am uitat cu adevărat la ce era acolo și de ce, doar am schimbat puțin codul pe linia 427:

Drupal_goto($cale, array("query" => array($params), "language" => $limba)); + drupal_goto($values["cale"], array("query" => array($params), "language" => $limba));

dupa care s-a rezolvat problema.

© 2024 ermake.ru -- Despre repararea PC-ului - Portal de informații