- Przechowywanie
- Konfigurowanie adresów URL
- Budowanie adresów URL SEO
- Kanonizuj wszystkie linki
- Routing
- Migrowanie adresów URL
- Dostosuj zasady zastępowania
- Dodatkowe zmienne dla smarty szablonu SEO
Termin „SEO” podsumowuje różne funkcje i funkcje, które mają na celu zwiększenie rankingu danej witryny w wyszukiwarkach. Zazwyczaj będą to semantyczne adresy URL, fragmenty bogate, znaczniki meta i zoptymalizowane pod kątem wyszukiwarek struktury i teksty HTML. Podczas gdy większość z tych technik nie jest interesująca z technicznego punktu widzenia, obsługa „mówiących adresów URL” („URL-i SEO”, „fanzy URL”) zazwyczaj wiąże się z routingiem żądań, a także generowaniem wynikowego kodu HTML, a także jest powszechnym celem rozszerzalności. Z tego powodu w tym wpisie na blogu znajdą się informacje o obsłudze adresów URL SEO dotyczących generowania, routingu i normalizacji adresów URL.
Zwykle w sklepie istnieje jakiś rodzaj technicznego przedstawienia dowolnego adresu URL. Na przykład adres URL SEO http://my-shop.com/living-world zostanie wewnętrznie odwzorowany na reprezentację, taką jak http://my-shop.com/frontend/listing/index/?sCategory=8. Podczas gdy pierwszy przykład jest zoptymalizowany pod kątem czytelności dla ludzi i SEO, druga reprezentacja może być obsługiwana przez wewnętrzne mechanizmy routingu Shopware. Powie routerowi, że bieżące żądanie przejdzie do indexAction kontrolera aukcji w przestrzeni nazw frontendu i ma w tym przypadku parametr o nazwie sCategory. Po ustaleniu kontrolera kontroler obsłuży żądanie i wygeneruje pewien rodzaj odpowiedzi, który następnie powinien zawierać adresy URL SEO dla kolejnych żądań.
Podczas gdy mapowanie reprezentacji SEO i wewnętrznej reprezentacji można teoretycznie generować w locie (np. Nazwa SEO zawsze pochodzi od nazwy kategorii), w praktyce istnieją pewne wymagania, które sprawiają, że temat jest nieco bardziej złożony:
- Historia: Po zmianie adresu URL SEO stary powinien przekierować z poprawnym kodem stanu na nowy adres URL.
- Zmniejsz liczbę duplikatów: ta sama treść nie powinna być dostępna pod różnymi adresami URL, ponieważ może to zmniejszyć ranking odpowiedniej strony wyników. Zamiast tego zawsze powinien istnieć kanoniczny adres treści, na który będą przekierowywane inne adresy.
- Dostosowywanie: użytkownik chce mieć możliwość dostosowania adresu URL SEO w wysokim stopniu.
Przechowywanie
Shopware przechowuje wszystkie adresy URL SEO w tabeli s_core_rewrite_urls.
Kolumna Identyfikator użycia Identyfikator wewnętrzny org_path Wewnętrzna / techniczna reprezentacja adresu URL, np. SViewport = blog i sCategory = 17 ścieżka Adres URL czytelny dla ludzi / SEO, np. Trendy-news / main (Bool) to kanoniczna reprezentacja adresu URL. Nie-główne adresy URL będą zawsze przekierowywane na główny adres URL podshopID Której podskładni należy ten adres URL (np. 1 = niemiecki sklep, 2 = angielski sklep)
W zależności od konfiguracji istnieją „strategie odświeżania” do zbudowania tej tabeli:
- Live (podczas żądań frontendu, w konfigurowalnym przedziale zwanym „Routing cache”)
- Ręcznie (naciskając przycisk » Przebuduj indeks SEO «)
- Cronjob (przez cronjob w określonym przedziale czasu)
Konfigurowanie adresów URL
Gdy stół zostanie zbudowany, Shopware wykona wszystkie rekordy związane z SEO (np. Produkty, kategorie, cms i strony bloga) i utworzy wpisy SEO w tabeli s_core_rewrite_urls. Jak będzie wyglądał adres URL np. Produktu, można skonfigurować za pomocą smarty ciągów szablonów:
Na powyższym zrzucie ekranu szablony adresów URL SEO są podświetlone. Szablon produktu wygląda tak:
{sCategoryPath articleID = $ sArticle.id} / {$ sArticle.id} / {$ sArticle.name}
Poinformuje Shopware, że URL SEO dla produktu składa się z trzech części:
- link kategorii kanonicznej produktu, np. / żywność / chleb /
- identyfikator produktu, np. 17
- nazwa produktu, np. „biały chleb 300g”
Wszystko to razem utworzy taki adres URL:
/ jedzenie / chleb / 17 / biały chleb-300g
Białe znaki zostaną automatycznie przekonwertowane na myślniki. Technicznie nie ma powodu, aby mieć produkt pod adresem URL SEO. Ponieważ adresy URL SEO muszą być unikalne w całym systemie, pomocne może być posiadanie takiego identyfikatora.
W wiki Shopware są kilka przykładów dotyczących konfiguracji szablonu SEO , w tym przykład adresów URL specyficznych dla produktu.
Budowanie adresów URL SEO
W powyższych sekcjach omówiliśmy sposób, w jaki Shopware uruchamia generowanie adresów URL SEO i jak można konfigurować szablony adresów URL SEO. Ale jak / gdzie Shopware faktycznie generuje te adresy?
Odpowiednia klasa jest tutaj: RegRiteTable, którą można znaleźć w engine / Shopware / Core / sRewriteTable.php instalacji Shopware. Rzućmy okiem na odpowiednią logikę tej klasy:
- sRewriteTable :: $ replaceRules: Zawiera listę tłumaczeń liter, aby poprawnie znakować znaki specjalne (takie jak ö, ä lub ü). Większość tej listy jest inspirowana przez slugify projekt . Podczas generacji SEO Shopware wywoła sRewriteTable :: sCleanupPath w celu zastąpienia znaków zdefiniowanych we właściwości sRewriteTable :: $ replaceRules
- REGULACJATABLICZNA :: sCreateRewriteTable: Jest głównym punktem początkowym generowania adresu URL SEO i wyzwala wszystkie następujące metody
- sRewriteTable :: baseSetup: zostanie wywołany, zanim rozpocznie się faktyczne generowanie adresu URL SEO. Zainicjuje silnik szablonów smarty za pomocą np. Obiektu konfiguracyjnego Shopware, zarejestruje kilka dodatkowych wtyczek smarty, a także spróbuje ustawić vars konfiguracji memory_limit / max_execution_time
- sRewriteTable :: sCreateRewriteTableCleanup: ta metoda usunie adresy URL produktów / kategorii / blogów / stron statycznych itp., w których już nie istnieje wskazany obiekt (np. produkt). Shopware nigdy nie usunie adresów URL elementów SEO, które nadal istnieją.
- sRewriteTable :: sCreateRewriteTableStatic: wygeneruje statyczne adresy URL, które można utworzyć w konfiguracji SEO. Statyczne adresy URL umożliwiają dodawanie adresów URL SEO dla niestandardowych kontrolerów i stron docelowych
- sRewriteTable :: sCreateRewriteTableCategories: sprawdzi wszystkie kategorie Shopware, zastosuje do nich szablon kategorii i zapisze wynikowy URL SEO do bazy danych
- sRewriteTable :: sCreateRewriteTableBlog: sprawdzi wszystkie blogi Shopware, zastosuje do nich szablon bloga i zapisze wynikowy URL SEO do bazy danych
- RestriteTable :: sCreateRewriteTableCampaigns: sprawdzi wszystkie światy zakupów Shopware, zastosuje do nich szablon emocji i zapisze wynikowy URL SEO do bazy danych
- sRewriteTable :: sCreateRewriteTableArticles: sprawdzi wszystkie produkty Shopware, zastosuje do nich szablon produktu i zapisze wynikowy URL SEO do bazy danych
- sRewriteTable :: sCreateRewriteTableContent: sprawdzi wszystkie formularze Shopware i statyczne strony, zastosuje do nich odpowiedni szablon i zapisze wynikowy URL SEO do bazy danych
- sRewriteTable :: sCreateRewriteTableSuppliers: sprawdzi wszystkich dostawców Shopware, zastosuje do nich odpowiedni szablon i zapisze wynikowy URL SEO do bazy danych
Kanonizuj wszystkie linki
Po zbudowaniu linków SEO opisanych powyżej Shopware użyje tych linków SEO zamiast linków technicznych w szablonie.
Najczęstszym wezwaniem do budowania adresu URL SEO z informacji technicznych jest:
$ query = array ('controller' => 'my-controller', 'module' => 'frontend', 'action' => 'my-action', 'some-param' => 123456); $ url = Shopware () -> Router () -> assemble ($ query);
Spowoduje to wewnętrzne sprawdzenie adresu URL SEO dla trasy http://my-shop.com/frontend/my-controller/my-action?some-param=123456 i wydrukowanie go, jeśli jest dostępny. Używając smarty, możesz również użyć wtyczki url - zajmie się również poprawnym przepisaniem adresów URL:
{url module = frontend controller = my-controller action = my-action some-param = 123456}
Ponieważ dla SEO jest bardzo ważne, aby upewnić się, że trasy SEO są zawsze pokazywane, Shopware znajdzie również wszystkie adresy URL w wygenerowanym kodzie HTML i przepisze je przed zwróceniem strony użytkownikowi. Z tego powodu nie jest konieczne przepisywanie adresów URL w kodzie - Shopware zajmie się tym automatycznie w metodzie Shopware_Plugins_Core_PostFilter_Bootstrap :: filterUrls, która uruchomi składniki oprogramowania Routing Routery :: generateList. Cały proces tworzenia adresów URL SEO ze stosu Shopware nazywa się „montażem”.
Rzeczywista obsługa generowania adresu URL nastąpi w komponentach sprzętowych Routing Router :: montaż - Składniki oprogramowania Routing PreFilterInterface normalizuje dane wejściowe, Składniki oprogramowania Routing GeneratorInterface wygeneruje adres URL i oprogramowanie Składniki Routing Interfejs PostFilter normalizuje dane wyjściowe.
Routing
Omówiliśmy już generowanie adresów URL SEO, a także wyjście tych adresów URL w szablonie. W jaki sposób Shopware obsługuje takie adresy URL, gdy żądanie trafia na serwer, np. Http://my-shop.com/trends-news?
Ponieważ Shopware 5 jest głównym komponentem do tego celu, to komponenty sprzętowe Routing Router. Posiada wewnętrzną kolekcję komponentów oprogramowania Routing MatcherInterface, które dopasowują dany adres URL do wewnętrznego adresu URL. Jeśli dany matcher może skierować dany adres URL, zwróci tablicę wyników, taką jak:
Tablica ([moduł] => widgety [kontroler] => emocja [akcja] => indeks [emotionId] => 1 [nazwa kontrolera] => indeks)
Jeśli matcher nie może obsłużyć żądania, zwróci oryginalny adres URL. Matchery są wykonywane w następującej kolejności, jeśli jeden matcher zwróci prawidłowy wynik, inne dopasowania nie zostaną w ogóle wywołane.
- Składniki oprogramowania Routing Użytkownicy RewitMatcher: Sprawdza adres URL w tabeli s_core_rewrite_urls.
- Składniki oprogramowania Routing Użytkownicy EventMatcher: Emituje zdarzenie, więc np. Programiści wtyczek mogą obsłużyć żądanie:
$ event = $ this-> eventManager-> notifyUntil ('Enlight_Controller_Router_Route', ['request' => $ request, 'context' => $ context]);
- Komponenty oprogramowania Routing Narzędzia DefaultMatcher: Obsługuje techniczne adresy URL, takie jak / frontend / listing / sCategory = 3
Migrowanie adresów URL
Migracja z istniejących sklepów do Shopware często rodzi pytanie, jak zaimportować istniejące adresy URL. Ogólnie są cztery sposoby na to:
- Zaimportuj stare adresy URL SEO do tabeli s_core_rewrite_urls. Ponieważ Shopware nie usunie tych adresów URL SEO, dopóki istnieją odpowiednie produkty, te adresy URL pozostaną nawet, jeśli zregenerujesz swoje adresy URL SEO z poziomu Shopware. Zwykle ustawiasz main na 0, aby Shopware przekierował stare adresy URL SEO na nowe adresy URL SEO.
- Używanie zdarzenia Enlight_Controller_Router_Route: Jak opisano powyżej, komponenty sprzętowe Routing Modyfikatory EventMatcher zostaną użyte, jeśli Shopware nie będzie w stanie samodzielnie obsłużyć adresu URL, więc wtyczka będzie mogła obsłużyć te adresy URL.
- Składniki oprogramowania Routing Router :: setMatchers: Jeśli preferujesz podejście bardziej zorientowane na OOP w zdarzeniu, możesz także dodać swój własny matcher do wewnętrznej kolekcji matchera routera i pozwolić matcherowi na obsługę starych adresów URL SEO.
- Uruchomienie pętli PreDispatch / Dispatch: Jeśli twoje stare adresy URL zawierają unikalny identyfikator - np. Identyfikator produktu lub numer zamówienia - możesz również napisać wtyczkę, która wykrywa takie adresy URL we wczesnym zdarzeniu, wykonuje dynamiczne wyszukiwanie nowego adresu URL i przekierowuje do ten adres URL przy użyciu odpowiedniego kodu statusu. Opisane rozwiązania są jednak bardziej oczywiste i powinny być preferowane.
Dostosuj zasady zastępowania
Zastępowanie reguł w klasie sRewriteTable nie może być modyfikowane bezpośrednio, możesz utworzyć przed i za hakiem metodę srewriteTable :: sCleanupPath, aby zmodyfikować wynikowy adres URL do swoich potrzeb.
Dodatkowe zmienne dla smarty szablonu SEO
Patrząc na metody generowania SEO opisane powyżej, zobaczysz, że Shopware zwykle wywołuje funkcję repozytorium, która np. Zwróci wszystkie blogi z wszystkimi potrzebnymi informacjami.
/ ** @var $ repository Oprogramowanie Modele Blog Repozytorium * / $ blogArticlesQuery = $ this-> modelManager-> getRepository ('Shopware Modele Blog Blog') -> getListQuery ($ blogCategoryIds, $ offset, $ limit);
Lub:
$ suppliers = $ this-> modelManager-> getRepository ('Shopware Models Artykuł Dostawca') -> getFriendlyUrlSuppliersQuery ($ offset, $ limit) -> getArrayResult ();
Podłączenie tych metod do odpowiedniego repozytorium pozwoli ci rozszerzyć dostępne pola np. Szablonu bloga. W przypadku produktów istnieje niestandardowe zapytanie kontekstowe SEO, można podłączyć: sRewriteTable :: getSeoArticleQuery, ale istnieje nawet wygodniejsze zdarzenie filtrowania, którego można użyć do manipulowania polami i zmiennymi dowolnego produktu:
$ result = Shopware () -> Events () -> filter ('Shopware_Modules_RewriteTable_sCreateRewriteTableArticles_filterArticles', $ result, array ('shop' => Shopware () -> Shop () -> getId ()));
Mówiąc ogólnie, podłączanie repozytoriów lub metod sCreateRewriteTable * da ci całkiem dobry dostęp do generacji SEO, powinieneś oczywiście wybrać odpowiednie wydarzenia, jeśli są dostępne.
Com/frontend/listing/index/?Ale jak / gdzie Shopware faktycznie generuje te adresy?
Com/frontend/my-controller/my-action?
Com/trends-news?