- Зберігання
- Налаштування URL-адрес
- Створення URL-адрес SEO
- Canonicalize всі посилання
- Маршрутизація
- Перенесення URL-адрес
- Налаштувати замінити правила
- Додаткові змінні для шаблону smarty SEO
Термін "SEO" підсумовує різні особливості та функціональні можливості, які спрямовані на підвищення рейтингу даного веб-сайту в пошукових системах. Це, як правило, включає в себе семантичні URL-адреси, багаті фрагменти, мета-теги та оптимізовані для пошукових систем структури HTML і тексти. Хоча більшість цих методів не є цікавими з технічної точки зору, обробка "говорять URL-адреси" ("URL-адреси SEO", "фанзійні URL-адреси") зазвичай передбачає маршрутизацію запитів, а також генерування отриманого HTML-коду, а також є спільною метою розширюваності. З цієї причини цей блог поширюватиметься на обробку URL-адрес Shopware про SEO-генерацію, маршрутизацію та нормалізацію URL-адрес.
Зазвичай в магазині є якесь технічне представлення будь-якої URL. Так, наприклад, SEO URL http://my-shop.com/living-world буде внутрішньо відображатися на подання, як http://my-shop.com/frontend/listing/index/?sCategory=8. Хоча перший приклад оптимізований для читання з людиною і SEO, друге подання може бути оброблено внутрішніми механізмами маршрутизації Shopware. Вона повідомить маршрутизатору, що поточний запит перейде до indexAction контролера лістингу у просторі імен frontend і має параметр sCategory, який у цьому випадку встановлюється рівним 8. \ t Після визначення контролера, контролер буде обробляти запит і генерувати якийсь відповідь, який потім повинен містити SEO URL для наступних запитів.
У той час як відображення представлення SEO та внутрішнього представлення теоретично можна було б генерувати на льоту (наприклад, назва SEO завжди походить від назви категорії), на практиці існують деякі вимоги, які роблять тему трохи складнішою:
- Історія: коли змінюється URL-адреса SEO, старий повинен перенаправлятися з правильним кодом статусу на нову URL-адресу.
- Зменште дубльований вміст: той же вміст не повинен бути доступним під різними URL-адресами, оскільки це може зменшити рейтинг відповідної сторінки результатів. Замість цього завжди повинна бути канонічна адреса вмісту, на яку перенаправлятимуться інші адреси.
- Налаштування: Користувач хоче мати можливість налаштувати URL-адресу SEO у високій мірі.
Зберігання
Shopware зберігає всі URL-адреси SEO в таблиці s_core_rewrite_urls.
Column Usage id Внутрішній ідентифікатор org_path Внутрішнє / технічне представлення URL-адреси, наприклад sViewport = блог & sCategory = 17 шлях Читання, що читається людиною / SEO, наприклад, trend-news / main (Bool) - це канонічне зображення URL. Нематеріальні URL-адреси завжди будуть переадресовані на основний URL-адрес, до якого входить ця URL-адреса (наприклад, 1 = німецький магазин, 2 = англійський магазин)
Залежно від налаштувань для створення цієї таблиці існують "стратегії оновлення":
- У режимі реального часу (під час запитів на інтерфейсах, у налаштованому інтервалі, який називається "Кеш для маршрутизації")
- Вручну (натиснувши кнопку « Відновити індекс SEO »)
- Cronjob (За допомогою cronjob в певному інтервалі)
Налаштування URL-адрес
Коли таблиця побудована, Shopware буде повторювати всі відповідні записи SEO (наприклад, продукти, категорії, cms і сторінки в блогах) і створювати записи SEO в таблиці s_core_rewrite_urls. Як виглядатиме URL, наприклад, продукт, можна налаштувати за допомогою рядків шаблонів smarty:
На наведеному вище знімку вікна шаблонів URL-адрес SEO виділено. Шаблон продукту виглядає так:
{sCategoryPath articleID = $ sArticle.id} / {$ sArticle.id} / {$ sArticle.name}
Вона повідомить Shopware, що URL-адреса SEO для продукту складається з трьох частин:
- канонічна ланка категорії, наприклад, / їжа / хліб /
- ідентифікатор продукту, наприклад, 17
- назва продукту, наприклад, "білий хліб 300 г"
Все це разом створить URL-адресу, подібну до цього:
/ їжа / хліб / 17 / білий-хліб-300г
Пробіли будуть автоматично перетворені в тире. Технічно немає ніякої причини, щоб мати productId в SEO URL. Оскільки URL-адреси SEO повинні бути унікальними по всій системі, це може бути корисним, якщо такий ідентифікатор включений.
У вікі Shopware є кілька прикладів щодо конфігурації шаблону SEO , включаючи приклад для певних URL-адрес SEO.
Створення URL-адрес SEO
У наведених вище розділах ми розглядали, як Shopware ініціює генерацію URL-адрес SEO і як можна налаштувати ці шаблони URL-адрес SEO. Але як / де Shopware фактично генерує ці URL?
Відповідний клас тут: RewriteTable, який можна знайти в движку / Shopware / Core / sRewriteTable.php вашої інсталяції Shopware. Давайте швидко розглянемо відповідну логіку цього класу:
- ReWriteTable :: $ replaceRules: Містить список листів для перекладу, щоб правильно змінювати спеціальні символи (наприклад, ö, ä або ü). Більшість цього списку натхненна slugify проект . Під час генерації SEO, Shopware буде викликати RewriteTable :: sCleanupPath, щоб замінити символи, визначені в властивості sRewriteTable :: $ replaceRules
- RewriteTable :: sCreateRewriteTable: це головна точка входу покоління URL-адрес SEO і ініціювання всіх наступних методів
- RewriteTable :: baseSetup: Буде викликано, перш ніж почнеться фактичне генерування URL-адреси SEO. Ініціалізувати механізм шаблонів smarty, наприклад, об'єкт конфігурації Shopware, зареєструвати деякі додаткові плагіни smarty, а також спробувати встановити конфігураційну конфігурацію memory_limit / max_execution_time
- RewriteTable :: sCreateRewriteTableCleanup: Цей метод видалить URL-адреси SEO продуктів / категорій / блогів / статичних сторінок тощо, де згаданий об'єкт (наприклад, продукт) більше не існує. Shopware ніколи не буде видаляти SEO URL-адреси елементів, які ще існують.
- ReWriteTable :: sCreateRewriteTableStatic: Створюватиме статичні URL-адреси, які можна створити в конфігурації SEO. Статичні URL-адреси дозволять вам додавати URL-адреси SEO для спеціальних контролерів і цільових сторінок
- RewriteTable :: sCreateRewriteTableCategories: буде повторювати всі категорії Shopware, застосовувати до них шаблон категорії та записувати отриману URL-адресу SEO до бази даних
- RewriteTable :: sCreateRewriteTableBlog: Повторює всі блоги Shopware, застосує до них шаблон блогу і запише отриману URL-адресу SEO в базу даних
- RewriteTable :: sCreateRewriteTableCampaigns: буде повторювати всі торгові магазини Shopware, застосувати до них шаблон емоцій і написати отриману URL-адресу SEO в базу даних
- RewriteTable :: sCreateRewriteTableArticles: буде повторювати всі продукти Shopware, застосовувати до них шаблон продукту і писати отриману URL-адресу SEO в базу даних
- RewriteTable :: sCreateRewriteTableContent: буде повторювати всі форми Shopware і статичні сторінки, застосовувати до них відповідний шаблон і записувати отриманий URL-адресу SEO до бази даних
- RewriteTable :: sCreateRewriteTableSuppliers: буде повторювати всіх постачальників Shopware, застосовувати до них відповідний шаблон і записувати отриманий URL-адресу SEO до бази даних
Canonicalize всі посилання
Після створення SEO-посилань, як описано вище, Shopware буде використовувати ці SEO-посилання замість технічних посилань всюди в шаблоні.
Найпоширенішим викликом для створення URL-адреси SEO з технічної інформації є:
$ query = array ('controller' => 'my-controller', 'module' => 'frontend', 'action' => 'my-action', 'some-param' => 123456,); $ url = Shopware () -> Маршрутизатор () -> збирати ($ query);
Це буде внутрішньо шукати SEO URL для маршруту http://my-shop.com/frontend/my-controller/my-action?some-param=123456 і роздрукувати його, якщо він доступний. Під час використання smarty можна також використовувати додаток url - він також подбає про належне перезапис URL-адрес:
{url module = frontend controller = дія мого контролера = моя дія some-param = 123456}
Оскільки це є критичним з точки зору SEO, щоб переконатися, що SEO-маршрути завжди відображаються, Shopware також знайде всі URL-адреси в згенерованому HTML-коді і перепише їх, перш ніж повернути сторінку користувачеві. З цієї причини не потрібно переписувати URL-адреси у вашому коді - Shopware подбає про це автоматично в методі Shopware_Plugins_Core_PostFilter_Bootstrap :: filterUrls, який ініціюватиме компонент маршрутизації Router :: generateList. Весь процес створення URL-адрес SEO зі стека Shopware називається "збирання".
Фактична обробка генерації URL відбудеться в компонентах Shopware Компоненти маршрутизації Router :: assemble - компоненти компонентів Shopware Маршрутизація PreFilterInterface нормалізуватиме вхідні дані, компоненти компонентів Shopware Routing GeneratorInterface генерують URL і Компоненти Маршрутизація PostFilterInterface буде нормалізувати вихід.
Маршрутизація
Ми вже обговорювали генерацію URL-адрес SEO, а також виведення цих URL-адрес у шаблон. Як Shopware обробляє такі URL-адреси, коли запит потрапляє на сервер, наприклад http://my-shop.com/trends-news?
Оскільки Shopware 5 центральним компонентом для цього є компонент маршрутизатора Shopware. Вона має внутрішню колекцію компонентів Shopware, які відповідають даній URL-адресі до внутрішньої URL-адреси. Якщо заданий збіг може маршрутизувати певний URL, він повертає масив результатів, наприклад:
Масив ([module] => віджети [контролер] => емоція [дія] => індекс [emotionId] => 1 [controllerName] => індекс)
Якщо збігник не може обробити запит, він поверне початковий URL. Збіги виконуються в наступному порядку, якщо один збіг повертає дійсний результат, інші матчі взагалі не будуть викликані.
- Компоненти програмного забезпечення Маршрутизація Матчі RewriteMatcher: шукатиме URL у таблиці s_core_rewrite_urls.
- Компоненти програмного забезпечення Маршрутизація Матчі: EventMatcher: буде видавати подію, тому розробники плагінів можуть обробляти запит:
$ event = $ this-> eventManager-> notifyUntil ('Enlight_Controller_Router_Route', ['запит' => $ request, 'context' => $ context]);
- Компоненти програмного забезпечення Маршрутизація Матчі: DefaultMatcher: оброблятиме технічні URL-адреси, як / frontend / listing / sCategory = 3
Перенесення URL-адрес
Перехід від існуючих магазинів до Shopware часто ставить питання, як імпортувати існуючі URL-адреси. Як правило, це чотири способи:
- Імпортуйте старі URL-адреси SEO у таблицю s_core_rewrite_urls. Оскільки Shopware не буде видаляти ці URL-адреси SEO, доки відповідні продукти існують, ці URL-адреси залишаться, навіть якщо ви регенеруєте URL-адреси SEO в межах Shopware. Зазвичай ви встановите main до 0, щоб Shopware перенаправляв старі URL-адреси SEO до нових URL-адрес SEO у стилі Shopware.
- Використання події Enlight_Controller_Router_Route: Як описано вище, компонент Shopware Routing Matchers EventMatcher буде використовуватися, якщо Shopware не може обробляти URL самостійно, тому плагін може обробляти ці URL-адреси.
- Компоненти Shopware Маршрутизація Маршрутизатор :: setMatchers: Якщо ви віддаєте перевагу більш орієнтованому OOP на подію, ви також можете додати свій власний збірка до внутрішньої колекції збігу маршрутизатора і дозволити вашому збіжнику обробляти старі URL-адреси SEO.
- Запуск циклу PreDispatch / Dispatch: Якщо ваші старі URL-адреси містять унікальний ідентифікатор - наприклад, ідентифікатор продукту або номер замовлення - ви можете також написати плагін, який виявляє такі URL-адреси в ранній події, робить динамічний пошук нової URL-адреси та переадресовується на цей URL використовує відповідний код стану. Однак описані розчини є більш очевидними, і вони повинні бути кращими.
Налаштувати замінити правила
ChangeRules в класі sRewriteTable не може бути змінений безпосередньо, ви можете створити до або після крюка для методу RewriteTable :: sCleanupPath, щоб змінити результуючу URL-адресу для ваших потреб.
Додаткові змінні для шаблону smarty SEO
Дивлячись на описані вище способи генерації SEO, ви побачите, що Shopware зазвичай викликає функцію сховища, яка повертає всім блогам всі необхідні відомості.
/ ** @var $ сховище Магазини Моделі Блог Сховище * / $ blogArticlesQuery = $ this-> modelManager-> getRepository ('Shopware Моделі Блог') -> getListQuery ($ blogCategoryIds, $ offset, $ $ межа);
Або:
$ suppliers = $ this-> modelManager-> getRepository ('Моделі Shopware') -> getFriendlyUrlSuppliersQuery ($ offset, $ limit) -> getArrayResult ();
Підключення цих методів до відповідного сховища дозволить вам розширити поля, доступні для шаблону блогу. Для продуктів існує користувальницький контекстний запит SEO, ви можете підключити: RewriteTable :: getSeoArticleQuery, але є навіть більш зручна подія фільтра, яку можна використовувати, щоб маніпулювати полями і змінними для будь-якого продукту:
$ result = Shopware () -> Події () -> фільтр ('Shopware_Modules_RewriteTable_sCreateRewriteTableArticles_filterArticles', $ result, масив ('shop' => Shopware () -> Shop () -> getId ()));
Тому, загалом кажучи, підключення сховищ або методів sCreateRewriteTable * дасть вашому хорошому доступу до генерації SEO, вам слід віддати перевагу відповідним подіям, якщо вони є, звичайно.
Com/frontend/listing/index/?Але як / де Shopware фактично генерує ці URL?
Com/frontend/my-controller/my-action?
Com/trends-news?