ЧПУ для Virteumart а - router.php | Блог о Joomla, Wordpress и SEO

14 Мар

ЧПУ для Virteumart а - router.php

Автор:  Administrator
Оценить
(12 голоса)

virtuemart seo чпу router.php

Итак, многие из Joomla водов знают, что такое virtuemart. И многим, кто знаком с созданием сайтов и интернет – магазинов приходилось иметь дело с этим скриптом. Его слабым местом является полное отсутствие SEO ЧПУ. Вот нет ЧПУ, да и все тут. В итоге страницы индексируются «со скрипом». Ибо особенно яндекс очень плохо относится к url без чпу и к «длинным» адресам.

Сегодня мы поговорим о построении ЧПУ для virtuemart 1.1 и Joomla 1.5. А в ближайших статьях я приведу Вам решение для virtuemart 2.0 и joomla 2.5. Буквально через неделю:)

Итак, решение для ЧПУ для Virtuemart 1.1 и Joomla 1.5 на основании router.php (написано и проверено на virtuemart 1.1.9, но должно работать и на более ранних версиях) без внедрения сторонних компонентов, всего лишь добавлением одного файла router.php в директорию /components/com_virtuemart/.

Каковы преимущества router ЧПУ Virtuemart?

Итак, что же делать? Спросите Вы? Вариантов, к сожалению, немного. Первым из них является способ «использования» стороннего расширения, и здесь нам могут придти на помощь компоненты: sh404SEF, artio joomSef и т.п.

Но, сколько же неоправданной мороки с этими компонентами, да и расширения для ЧПУ у VM стоят денег (основная морока с глючными, неработающими страницами, и отсутствием redirect а для страниц без ЧПУ, в итоге с огромной базой ссылок, по пять-шесть ссылок на один и тот же товар, а дальше проблемы с: vmchk = 1 и т.п. и т.д.).

Еще очевидным преимуществом является то, что, благодаря router.php абсолютно все ссылки в практически любом компоненте/модуле, отображающем товары для Virtuemart, даже сторонних разработчиков, превращаются в SEO ЧПУ ссылки (там, где используется ст. функция JRoute::_())

Но, вот чудо! С начала версии virtuemart 1.1.9 предложили router.php (который входит в поставку стандартного пакета). Заглянул я в этот роутер, и (извините), чур меня! ЧПУ ссылки там формируются перечислением параметров, например /page/shop.browse/ и куча мусора. В итоге – одни и те же страницы имеют огромную массу дублей (по разным адресам открывается одна и та же страница) и вообще не предназначены для «понимания» посетителем.

В итоге пришлось написать самому router.php для применения в SEF ЧПУ Virtuemart.

Какие ЧПУ ссылки в Virtuemart Вы получите, использовав мое решение?

  1. Ссылка категории товаров для ЧПУ Virtuemart: [адрес Вашего сайта]/category/[id-категории]-имя категории[в транслите].html
  2. Ссылка для сведений о продукте для ЧПУ Virtuemart: [адрес Вашего сайта]/product-details/[id-товара]-имя товара[в транслите].html

    Примечание автора: возможно также включение ссылок вида /product-details/[id-категории]-имя категории[в транслите]/[id-товара]-имя товара[в транслите].html, для этого требуется установить константу в файле router.php

    define("DETAIL_PAGE_EXLUDE_CATEGORIES",false);
    

    Но, учтите, наряду с тем Virtuemart будет сам создавать две ссылки на одно и то же детальное описание товара: [адрес Вашего сайта]/product-details/[id-товара]-имя товара[в транслите].htmlнапример: для страниц следующий/предыдущий товар в категории Virtuemart. А в категориях товаров будет формироваться ссылка : [адрес Вашего сайта]/product-details/[id-товара]-имя товара[в транслите].html, что влечет за собой появление дублей.

  3. Ссылка на производителя для ЧПУ Virtuemart: [адрес Вашего сайта]/manufacturer/[id-производителя]-имя производителя[в транслите].html
  4. Ссылка на RSS ленту для ЧПУ Virtuemart: [адрес Вашего сайта]/feed/[id-категории]-имя категории[в транслите].html
  5. Ссылка задать вопрос о товаре в ЧПУ Virtuemart (товар в наличии?): [адрес Вашего сайта]/ enquiry/[id-товара]-имя товара[в транслите].html
  6. Cсылка на расширенный поиск по характеристикам и типам товара для ЧПУ Virtuemart: [адрес Вашего сайта]/component/virtuemart/search
  7. Адрес оформления заказа в ЧПУ Virtuemart: [адрес Вашего сайта]/component/virtuemart/checkout/

Выше пречисленные настройки Вы можете изменить при помощи констант, указав любой другой префикс, состоящий из букв английского алфавита нижнего регистра (маленьких букв), цифр, тире и подчеркивания в router.php:

$table_prefix								= 'vm';
//если префикс таблиц virtuemart а отличается от 
//vm - исправьте его здесь на правильный 
//см. /administrator/components/com_virtuemart/virtuemart.cfg.php VM_TABLEPREFIX
if(!defined('DETAIL_PAGE_EXLUDE_CATEGORIES'))
define('DETAIL_PAGE_EXLUDE_CATEGORIES',true); 
//исключить категории из /product-details? ссылок? 
//Уменьшит количество дублей
if(!defined('REDIRECT_WITHOUT_SEO_URLS'))
define('REDIRECT_WITHOUT_SEO_URLS',true);
//true - автоматически перенаправлять со ссылок без ЧПУ 
//на ссылки с ЧПУ: true - разрешить, false - запретить, 
//тоесть при заходе на ссылку page=shop.browse&category_id=6987 
//301 редирект на category/6987-elektronnye-knigi.html 
//и у посетителя откроется та же страница но с ЧПУ ссылкой: 
//category/6987-elektronnye-knigi.html 
if(!defined('SIMPLE_SEO'))
define('SIMPLE_SEO',false); 
//false - включить простой режим seo, без альясов, 
//только с id: ссылки вида category/6987, product-details/6987 
//и т.п., если хотите включить, назначьте true  
if(!defined('CHECK_IF_CAN_REDIRECT'))
define('CHECK_IF_CAN_REDIRECT',true); 
//проверять перед редиректом 301, не приведет ли это к 
//бесконечному редиректу, при помощи curl? избегаем 
//циклических редиректов 	
//еще не написано))
if(!defined('PAGE_SHOP_BROWSE'))
define('PAGE_SHOP_BROWSE', 'category'); 
//префикс категорий /category - меняем на любой 
//нужный английский префикс из английских букв и цифр 
//(можно использовать также -_)
if(!defined('PAGE_SHOP_MANUFACTURER'))
define('PAGE_SHOP_MANUFACTURER', 'manufacturer');
//префикс производителя /manufacturer - меняем на любой 
//нужный английский префикс из английских букв и цифр 
//(можно использовать также -_)
if(!defined('PAGE_SHOP_FEED'))
define('PAGE_SHOP_FEED', 'feed'); 
//префикс RSS ленты /feed - меняем на любой нужный 
//английский префикс из английских букв и цифр 
//(можно использовать также -_)
if(!defined('PAGE_PRODUCT_DETAILS'))
define('PAGE_PRODUCT_DETAILS', 'product-details'); 
//префикс детального описания продукта /product-details - 
//меняем на любой нужный английский префикс из английских букв и цифр 
//(можно использовать также -_)
if(!defined('PAGE_PRODUCT_ENQUIRY'))
define('PAGE_PRODUCT_ENQUIRY', 'enquiry'); 
//префикс страницы запроса наличия товара  /enquiry - 
//меняем на любой нужный английский префикс из английских букв и цифр 
//(можно использовать также -_)
if(!defined('PAGE_CHECKOUT_INDEX'))
define('PAGE_CHECKOUT_INDEX', 'checkout'); 
//префикс страницы оформления заказа?  /checkout - 
//меняем на любой нужный английский префикс из английских букв и цифр 
//(можно использовать также -_)
if(!defined('PAGE_ADVANCE_SEARCH'))
define('PAGE_ADVANCE_SEARCH', 'search'); 
//префикс страницы поиска (по параметрам?) /search - 
//меняем на любой нужный английский префикс из английских букв и цифр 
//(можно использовать также -_)
	
if(!defined('MB_ARRAY_TO_CONVERT'))
define('MB_ARRAY_TO_CONVERT','а|a, б|b, в|v, г|g, д|d, е|e, ё|yo, з|z, и|i, й|j, к|k, л|l, м|m, н|n, о|o, п|p, р|r, с|s, т|t, у|u, ф|f, х|x, ъ|, ы|y, э|e, _|-,  |-, ж|zh, ц|c, ч|ch, ш|sh, щ|shh, ь|, ю|yu, я|ya, ї|yi, є|ye, ґ|g, ў|u'); //массив перекодировки, вида: б|b - где, б - буква для конвертации в транслит, 
//разделитель |, b - буква, в которую будет перекодирован симнвол (английские 
//буквы от a до z, можете указывать несколько символов до или после, 
//после каждой строчки обязательно ставить , для указания следующей 

Продвижение сайта в Одессе

Также будут сформированы ссылки для SEO Virtuemart страниц аккаунта, информации о заказах, регистрации через virtuemart для посетителя,/корзины/, информации о магазине и главной страницы с перечислением всех товаров 

Перенаправление со ссылок без ЧПу на ссылки с ЧПУ для Virtuemart

Это все конечно хорошо, но что же делать со старыми страницами? Ведь тоже хотелось бы преподать их в виде ЧПУ для посетителей и поисковиков.

О чем это я?

Вот, например, ссылка проиндексировалась до этого Поисковым Роботом так: http://powercomp.com.ua/produkcziya-apple.html?page=shop.browse&category_id=6987

А при переходе на указанную страницу она для посетителя будет отображаться в адрессной строке браузера уже с применением ЧПУ: http://powercomp.com.ua/produkcziya-apple/category/6987-elektronnye-knigi.html

Зачем это нужно?

Исключаем дубли страниц при помощи 301 redirect а: 1 товар, 1 категория = 1 ссылка, у уже существующих товаров и категорий в магазине, и делаем старые ссылки Virtuemart понятными для посетителей

Для этого я написал несколько строк кода, которые срабатывают при подключении router.php и делают редирект 301 на ЧПУ преобразованную страницу Virtuemat, если посетитель/поисковой робот пришли по ссылке без ЧПУ.

Для этого необходимо включить:

define('REDIRECT_WITHOUT_SEO_URLS',true);

Как же установить router.php SEF ЧПУ для Virtuemart?

Достаточно скачать router.php, открыть, настроить его, пользуясь предыдущей инструкцией, после чего скопировать router.php в папку /components/com_virtuemart, зайти в панель администрирования [адрес Вашего сайта]/administrator/. Далее: в верхнем меню выбрать СайтОбщие настройки - Включить SEO - да, использовать mod_rewriteда, Добавить суффикс к URLда. Кроме этого в корневой папке Вашего сайта должен присутствовать файл .htaccess. Если его нет, переименуйте htaccess.txt в .htaccess (для серверов Apache)

Теперь префикс таблиц vm вычисляется автоматически на основании файла конфигурации virtuemart, но если возникнут ошибки базы данных, тогда переопределите вручную

В том случае, если префикс таблиц баз данных для Virtuemart а отличен от vm: переопределите переменную вначале route.php

$table_prefix								= 'vm';

Как узнать префикс таблицы Virtuemart?

Откройте файл /administrator/components/com_virtuemart/virtuemart.cfg.php и найдите значение константы VM_TABLEPREFIX

define('VM_TABLEPREFIX', 'vm'); //в данном случае это vm

Итак, где же тестировалось ЧПУ для Virtuemart (router.php)?

Магазин компьютерной техники powercomp.com.ua

С какими языками будет работать router.php: русский, украинский, английский, белорусский (хороший транслит чпу)

Снижаем нагрузку для router.php при генерации ЧПУ

Категории и производители выгружаются в массив одним запросом к базе данных. Так как по сути нам нужно только имя/идентификатор производителя/категории, то даже для большого количества таких данных занимаемая память будет несущественна, а нагрузка на базу данных упадет в разы: в результате всего два запроса вместо: по одному запросу на Категорию и по одному на производителя, а если учесть, что на каждой странице формируется еще и дерево категорий товаров, то экономим от 50 до 100 запросов на страницу при таком подходе.

Для избежания дублирования запросов, связанных с формированием ЧПУ товаров после запроса о конкретном товаре данные о имени товара выгружаются в массив, после чего массив проверяется на присутствие идентификатора товара, в этом случае данные берутся из массива без повторного запроса к Б.Д., что также помогает нам сэкономить пару запросов при повторении товаров на одной странице.

Ошибки и баги router.php для Virtuemart:

На данный момент 12.07.2012 не выявлено

12.07.2012 router был обновлен, добавлено несколько новых настроек, убраны все баги, известные на данный момент, добавлено добавление канонической ссылки, добавлена возможность включения простого seo (только id ссылки, без alias), написан дополнительно плагин настроек нашего router - vm_seo, который решает следующие проблемы: дает настроить роутер без правки кода, дает изменить массив транслитерации, позволяет включить исключение дублей страниц (на данный момент исключены все известные дубли со строгим редиректом и добавления ссылки rel="canonical" в секцию <head>, решает проблему с редактированием с лицевой части, и всплывающими окнами печати, замените роутер и скачайте и установите плагин vm_seo, следующая версия будет переложена на 2.5. Файл router.php теперь в кодировке utf-8 изначально.

Плагин vm_seo, настраиваем router virtuemart

Скачайте и установите плагин seo, для этого зайдите в панель администрирования, перейдите в Расширения - Установить/Удалить - нажмите кнопку Обзор, укажите путь к архиву vm_seo.zip, установите, после установки перейдите в панели администрирования в Расширения - Плагины, найдите vm_seo (по названию), щелкните по ссылке в столбце Название Плагина, и сохраните

Обратите внимание: кроме настроек, плагин vm_seo решает следующие проблемы (они не связаны с роутером, это баги virtuemart, но удалось их исправить средствами плагина): редактирование товаров с лицевой части магазина, окна печати и другие окна virtuemart, открывающиеся через index2.php

Какие настройки router вынесены в плагин vm_seo?

Исключить категории из product-details ссылок - исключить alias категорий из ссылок на подробные товары (по умолчанию - исключить), сократит дубли ссылок для товаров, которые находятся в разных категориях, а также при формировании ссылок на следующий, предыдущий товар одной категории

Исключить дубли страниц: со страниц без чпу, со страниц с неполными ссылками, или устаревшими ссылками (если, например, имя товара изменилось), будут обязательно преобразованы с перенаправлением к единственной полной ссылке, содержащей новый альяс, такая ссылка будет считаться канонической. И будет добавлена ссылка <rel="canonical" href="/product-details/24533-printer-samsung-ml-1861.html" />, которая является авторитетной ссылкой на первоисточник для yandex, google поисковых систем. При этом router не генерирует ни одного дополнительного запроса к б.д., а разбирается с тем, что у него под рукой. В ссылку также будет включен домен Вашего сайта. Проверка текущего url включается по событию onAfterRoute до вывода основного содержимого, так что ни пользователь, ни поисковик теперь ничего лишнего не увидят.

Примечание автора: все не преобразованные в чпу параметры будут при этом сохранены в ссылке

Включить сео без альясов: по просьбам трудящихся предусмотрен вариант без альясов, не производит ни одного запроса к базе данных, но при этом довольно сложен в понимании, ссылки выглядят вида: /[id-категории]/[id-товара].html. Ссылки более короткие, но менее понятные

Массив для перекодировки: теперь мы даем Вам полностью возможность управлять транслитерацией на Ваш вкус и делаем возможной поддержку любых языков в транслитерации. Для этого Вам достаточно составить пары значения вида символ-для-транслитерации|замена-на-английском (разделенные |, например: б|b), и разделить эти пары значений запятой. Чтобы увидеть массив по умолчанию, достаточно один раз сохранить плагин.

По умолчанию массив транслитерации для русского, английского, украинского языков:

а|a, б|b, в|v, г|g, д|d, е|e, ё|yo, з|z, и|i, й|j, к|k, л|l, м|m, н|n, о|o, п|p, р|r, с|s, т|t, у|u, ф|f, х|x, ъ|, ы|y, э|e, _|-,  |-, ж|zh, ц|c, ч|ch, ш|sh, щ|shh, ь|, ю|yu, я|ya, ї|yi, є|ye, ґ|g, ў|u

- если оставить поле пустым, будет восстановлено значение по умолчанию

Префикс ссылки страницы категорий: category - префикс url для категорий (по умолчанию: category)

Префикс ссылки страницы производителя: manufacturer - префикс url для производителей (по умолчанию: manufacturer)

Префикс ссылки страницы RSS ленты: feed - префикс url для лент новостей(по умолчанию: feed)

Префикс ссылки страницы продукта: product-details - префикс url для страницы детальной информации о продукте(по умолчанию: product-details)

Префикс ссылки страницы запроса наличия товара: enquiry - префикс url для страницы запроса наличия товара (по умолчанию: enquiry)

Префикс ссылки страницы оформления заказа: checkout - префикс url для страницы оформления заказа (по умолчанию: checkout)

Префикс ссылки страницы поиска (по параметрам): search - префикс url для поиска по параметрам (по умолчанию: search)

Настройки плагина для router а virutemart

роутер virtuemart joomla

[update] - 16.07.2012 - vmcheck - удаляем из rel="canonical", next_page - небольшой фикс;

Комментарии   

 
0 #38 Administrator 19.07.2012 13:43
Цитирую Alex:
Обнаружил данную проблемку, которую указывал уважаемый ikea market, но только в управлении учетной записи. Если заказов у постоянного покупателя много и он захочет их просмотреть, то с первой страницы на последующие перейти не получается, т.е. не работает пагинация полностью (поле показать 20,30,50 тоже не работает). При попытке перейти на последующие страницы адрес вида site.ru/catalog/account.html остается неизменным.

Это не ко мне. И дело здесь не в роутере. Страницы там и будут неизменными, так как каждый щелчок по форме пагинации вызывает submit формы и установку limitstart,limi t (переустановку) , в моем случае все это замечательно работает и переходит по следующим страницам заказа. Почему в этом случае они сделали формой пагинацию, я не знаю. Наверно, так захотели. Оба параметра передаются через post. Я же прошу: указывайте версию Virtuemart, Joomla. У меня: virtuemart 1.1.9, joomla 1.5.26 (на 4 сайтах, магазины модификации не подвергал).
Цитировать
 
 
0 #37 Alex 19.07.2012 11:56
Обнаружил данную проблемку, которую указывал уважаемый ikea market, но только в управлении учетной записи. Если заказов у постоянного покупателя много и он захочет их просмотреть, то с первой страницы на последующие перейти не получается, т.е. не работает пагинация полностью (поле показать 20,30,50 тоже не работает). При попытке перейти на последующие страницы адрес вида site.ru/catalog /account.html остается неизменным.
Цитировать
 
 
0 #36 Administrator 18.07.2012 16:08
Цитирую ikea market:
У меня вопрос, все отлично работает, но есть одно большое НО -- если в разделе товара много товаров (больше одной страницы), то на другие страницы перейти невозможно ???

http://powercomp.com.ua/portativnaiatexnika/noutbukiiplanshetu/category/7038-noutbuki-i-netbuki.html?limit=15&limitstart=15
все работает отлично. Версия virutemart, joomla, ваш сайт? Давайте более подробную информацию.
Цитировать
 
 
0 #35 ikea market 18.07.2012 13:34
У меня вопрос, все отлично работает, но есть одно большое НО -- если в разделе товара много товаров (больше одной страницы), то на другие страницы перейти невозможно ???
Цитировать
 
 
0 #34 Administrator 12.07.2012 22:35
Цитирую Alex:
Замечен небольшой косячок. Мягкий знак в алиасах генерируется в тире, т.е. алиас из допустим из слова бульдог - /buldog получается /dul-dog.

Это не косячок. Это ГОСТ 7.79-2000, поправьте на Ваш вкус в настройках плагина. Напротив мягкого знака стоит -, поставьте любой другой знак или исключите мягкий знак.
Цитировать
 
 
0 #33 Alex 12.07.2012 22:21
Замечен небольшой косячок. Мягкий знак в алиасах генерируется в тире, т.е. алиас из допустим из слова бульдог - /buldog получается /dul-dog.
Цитировать
 
 
0 #32 Administrator 12.07.2012 20:42
Цитирую Клара:
А обещанное решение для virtuemart 2.0 и joomla 2.5 уже есть?

Скрипт достиг логического завершения в плане возможностей, в ближайшее время перенесу на 2.5 и 2.0.
Цитировать
 
 
0 #31 Administrator 12.07.2012 20:41
Обновлен router.php. Настройки вынесены в plugin vm_seo. Все, указанные ниже дубли перенаправляютс я на полную страницу с ЧПУ (дубли неполных страниц, дубли неправильных страниц, дубли страниц без ЧПУ), добавлена возможность включить ЧПУ без альясов, при помощи плагина решены вопросы с редактированием товаров с лицевой части сайта, с окнами печати и т.п. (проблема не роутера, а joomla + virtuemart, но подключение плагина исправляет эти ошибки), вынесена настройка массива транслитерации в плагин. Вынесены все доступные префиксы url также в плагин.
Цитировать
 
 
0 #30 Administrator 12.07.2012 09:15
Цитирую Alex:
Цитирую Administrator:

а) Эти ссылки никогда не появятся на сайте, и то, что материалы доступны по ним, ничего не значит.
б) Все плагины, которые работают через 301 редирект, могут привести к циклическому перенаправлению, правильное решение здесь кроется в link rel="caonical"

Данные дубли были проиндексированы гуглом и их я взял не из воздуха, а в веб мастере гугул. Это только мальенкая частичка их там много. Да и в яндексе замечал что он индексирует некоторые url обрезая алиасы.
Я имел в виду не плагин, а небольшие внесение изменений в файлы joomla и virtuemart.
У меня все работает на ура.
Вот пример - http://www.kiddywear.ru/catalog/category/56-odegda-dlya-novorogdennih.html попробуйте убрать часть из алиаса или поменять его, либо убрать html. Все работает.

Проверил гугл вэб мастер и яндекс вэб мастер, все хорошо, нет у меня таких дублей на пяти проектах. Но сейчас внесу изменения в роутер для редиректа, если не совпадают url, это вообще не проблема:)
Цитировать
 
 
0 #29 Administrator 12.07.2012 09:13
Цитирую Alex:
Цитирую Administrator:

У меня хмап генерирует нормальные ссылки. И даже если он генерирует ссылки без sef, ничего страшного, так как они будут перенаправлены через 301 редирект на ссылки с SEF

Джанная ссылка не редиректится, потому что она не правильная (почему она формируется так и не понял). Правильная ссылка должна быть - index.php?option=com_ virtuemartI&temid=2, т.е. &temid=2 должен стоять в конце. Либо вообще без него - index.php?option=com_virtuemart.

Это вполне нормальная ссылка:) Какая разница, где стоит Itemid, лишь бы он был. 301 редирект сработает все равно.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

250x250jpg

Авторизация

Sequrity image Обновить изображение

Календарь

« Мая 2013 »
Пн Вт Ср Чт Пт Сб Вс
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Облако тегов

Кто на сайте

Сейчас 126 гостей онлайн

Наверх
Яндекс.Метрика