«Как привести в Joomla адрес страницы к желаемому виду?» – вопрос, казалось бы, очень простой, но судя по количеству запросов на форуме, это не так. Те люди, которые давно работают с Joomla и используют CMS во многих своих проектах, наверняка знают, как правильно настраивать SEF-url в Joomla. Новички же зачастую прибегают к помощи громоздких сторонних расширений, не догадываясь, что почти всё можно сделать стандартными инструментами Joomla. В этой статье я расскажу, как сделать для любой страницы сайта желаемый адрес, не прибегая к помощи сторонних расширений.
Содержание
SEF-ссылки в Joomla
Прежде всего, давайте разберемся, что же такое SEF-ссылки и для чего они вообще нужны. SEF – аббревиатура от «Search Engine Friendly», или «дружественные для поисковых систем». Википедия нам подсказывает:
Концепция SEF предполагает максимально лаконичные и интуитивно понятные адреса, которые показывают естественную для человека логическую структуру данных на сервере, а не её программный интерфейс с модулями и параметрами. Структуру обычно представляют в виде иерархии как в обычной файловой системе, к которой привык пользователь:
/articles/tags/summer/ — статьи по меткам, метка summer (лето).
/news/sport/2003/10/ — новости спорта, 2003 год, октябрь.
/catalogue/light/bulbs/GE/ — каталог товаров, отдел «Свет», лампочки, производитель GE.
Или, так:
/статьи/метки/лето/ — статьи по меткам, метка summer (лето).
/новости/спорт/2003/10/ — новости спорта, 2003 год, октябрь.
/каталог/свет/лампочки/GE/ — каталог товаров, отдел «Свет», лампочки, производитель GE.
Т.е. концепция SEF не только дает поисковым роботам больше информации о странице, но и помогает людям ориентироваться на сайте. Пренебрегать SEF-ссылками сегодня просто глупо. Основной вопрос в том, как все грамотно настроить при использовании CMS Joomla.
Активация SEF в Joomla
Для того чтобы активировать функционал SEF в Joomla, необходимо выполнить несколько простых шагов:
- в корне сайта переименовать htaccess.txt в .htaccess ;
- Зайти в общие настройки Joomla («Система» –> «Общие настройки») и в разделе «Настройки SEO» активировать три опции:
- Включить SEF (ЧПУ);
- Перенаправление URL;
- Добавлять суффикс к URL;
После этого сохраняем настройки и идем на главную страницу сайта. SEF-ссылки активированы.
Настройка вида SEF-ссылок в Joomla
Общие принципы
Теперь, наконец, перейдем к самому интересному. Одной активации SEF в Joomla зачастую бывает недостаточно. Всё зависит от того, URL какого вида вы хотите получить.
Есть несколько видов SEF URL, обычно используемых на сайте:
- http://site.ru/article.html
- http://site.ru/id-article.html
- http://site.ru/category/article.html
- http://site.ru/id-category/id-article.html
- http://site.ru/category/id-article.html
Каждый из представленных видов хорошо подходит в том или ином случае. Использование ID в URL оправданно тем, что при таком подходе вы можете не беспокоиться о том, что две статьи с одинаковым названием (псевдонимом) будут иметь одинаковые URL, т.к. ID для каждой статьи строго уникален.
Я обычно использую конструкцию:
http://site.ru/article.html
для основных страниц меню сайта, таких как «О нас», «Контакты» и т.д. и конструкцию:
http://site.ru/category/article.html
для остальных материалов сайта. Во втором случае приходится самостоятельно следить, чтобы псевдонимы заголовков были уникальны.
Псевдонимы
Псевдонимы – это как раз тот самый текст, который будет показан в URL. Начиная с Joomla 2.5, псевдонимы генерируются автоматически на основе заголовков материалов, категорий и пунктов меню с использованием транслитерации. Так, к примеру, если вы написали заголовок «Статья», при сохранении автоматически будет сгенерирован псевдоним «statya». Он и будет показываться в URL на нужной позиции. Никто не запрещает задать псевдоним вручную. В статьях, категориях, пунктах меню есть соответствующее поле «Псевдоним». Единственное, я советую вас не заполнять его русскими буквами. Ничего хорошего из таких ссылок не получится, разве что при использовании домена зоны .рф.
URL типа http://site.ru/article.html
Теперь перейдем непосредственно к созданию ссылок разных типов. Первым типом будет наиболее простой и удобный:
http://site.ru/article.html
Для создания такой ссылки недостаточно просто создать материал. В Joomla все материалы в обязательном порядке должны иметь категорию. Если категория не указана, то материал будет помещен в категорию uncategorized. В таком случае по умолчанию ссылка будет иметь вид:
http://site.ru/2-uncategorised/2-article.html
где 2 и 2 – ID категории и материала соответственно.
Для того чтобы придать URL красивый вид, необходимо создать пункт меню типа «Материал», выбрать необходимый материал из списка и указать для пункта меню псевдоним «article». После этого URL примет тот самый вид, что описан в начале.
URL типа http://site.ru/category/id-article.html
URL материалов категории лучше представлять в виде:
http://site.ru/category/id-article.html
По умолчанию, URL будут иметь вид:
http://site.ru/id-category/id-article.html.Обычно категорий на сайте не так много и можно не волноваться о том, что их названия могут повториться. Поэтому имеет смысл избавиться от ID категории в URL. Для этого, опять же, создаем пункт меню типа «Блог категории» и выбираем из списка нужную категорию. URL’ы всех материалов категории будут преобразованы к виду
http://site.ru/menualias/id-article.html
menualias – это псевдоним пункта меню, который был создан.
Кроме очевидной выгоды для URL создание пункта меню блога категории имеет и другие плюсы. Так для всех материалов категории при переходе в любой из них будет активироваться соответствующий пункт меню на сайте (если это предусмотрено шаблоном). Также для всех материалов категории можно выбрать уникальное отображение модулей, т.к. модули привязываются к пунктам меню и, привязанные к созданному пункту, будут отображаться/скрываться для всех материалов данной категории.
А как же создать URL вида http://site.ru/category/article.html
Вопрос в том, как создать URL, содержащий только псевдонимы, но не ID. Интересно, но это, как оказывается, достаточно сложная задача. Если кратко, то нужно переопределять файл router.php в шаблон Joomla и вносить в него исправления. На просторах Интернета по этому вопросу есть несколько подробных инструкций. Но не думаю, что стоит с этим связываться. URL-адреса – это такая вещь, настроить которую можно только при создании сайта. Если что-то изменять во время его работы, это может привести к печальным последствиям вплоть до временного выпадения из индекса поисковых систем большей части страниц. Неизвестно, что будет с таким файлом при обновлении версии Joomla, например, с выходом Joomla 3.2. Я считаю, что лучше не рисковать и оставить ID в URL материала.
Еще одним выходом будет являться установка стороннего SEF-компонента, например, SH404SEF.
UPD.: 19.09.2017. Привет из будущего! Теперь у Joomla новый роутер, позволяющий делать адреса такого вида!
Скрытое меню
Еще один частый вопрос: что делать, если нужно только создать правильный URL, но не показывать пункт меню на сайте? В этом случае все просто. Нужно создать в менеджере меню скрытое меню. «Скрытое» – это просто такое название для удобства. На самом деле оно ничем не отличается от обычного меню. Разница лишь в том, что обычное меню вы показываете на сайте через модуль Joomla. Для скрытого меню просто не публикуйте этот модуль и его никто не увидит. Оно будет использоваться только для служебных целей, а именно создания правильных URL и привязки модулей к определенным страницам сайта.
Сторонние компоненты
Всё, что было описано выше, относится только к основным расширениям Joomla, которые предустановленны сразу с CMS. Для сторонних компонентов SEF делают разработчики этих компонентов. Весь код, относящийся к формированию ссылок, находится в папке с компонентом, в файле router.php. Этот файл можно переопределить в шаблон Joomla и доработать под себя. Хотя потребуются приличные знания PHP. Иначе, либо искать готовый переделанный router, либо использовать то, что есть.
Вот так обстоят дела в SEF URL в Joomla. Надеюсь, для кого-то процесс формирования таких ссылок стал понятнее, и теперь создать красивые читаемые URL для страниц своего сайта будет проще.
тоже пользуюсь скрытым меню
Было бы не плохо ещё упомянуть, что будет если разные пункты меню типа "Блог категории" ссылаются на одну категорию и как такой конфликт имён выявить и устранить.
У меня это впервые за последние семь лет! Кто сталкивался с такой проблемой? Отпишитесь пожалуйста!
Вы не первый, кто задает мне подобный вопрос и, честно говоря, причина возникновения таких URL мне неизвестна. Вы выяснили, что виноват Xmap. Возможно это так. И уже хорошо, что это известно. Но лично я, сколько не использовал Xmap, подобного не встречал. Возможно, дело в настройках. Возможно, в сочетании с каким-то другим компонентом. Копайте глубже. Если удастся выяснить причину - напишите, пожалуйста, ее сюда. Этим вы поможете и другим людям сталкивающимся с этой проблемой.
Если вы такой не устанавливали, то возможно дело в шаблоне. Попробуйте проверить с другим шаблоном.
И оказывается что Xmap тоже влияет на формирование урла. Тоже нагуглил.Может быть оно всё вкупе - ?
Еще хочу добавить что данный конфликт (плавающий урл)оказывается никак не влияет на индексацию и продвижение теоретически и по своему опыту(практически все мои сайты в десятке по своему региону), но погрешность есть!Будем дальше разбираться!
Большое спасибо за внимание и помощь!
Дмитрий.
Joomla 3.
При создании категорий и меню в некоторых url появились такие тексты вида "wf-menu-config" или "wf-menu-cpanel".
Например: http://мой_сайт/wf-menu-cpanel/menu1/1-poryadok.
Подскажите, как можно убрать данный текст "wf-menu-cpanel" и "wf-menu-config"?
Спасибо.
Николай.
Спасибо!
У меня почему между доменом и материалом вставляется еще и родительский пункт меню.
Например создал я пункт меню "машины". В нем создал подменюшку "легковые машины" и создал тип материала,и выбрал из списка нужную статью. В итоге у меня получается ссылка ввида site.ru/mashini/legkovie-mashini.html. Как сделать такого вида site.ru/legkovie-mashini.html
По вашей проблеме. Варианты:
1) Создавать пункты меню без вложенности.
2) Использовать стороннее расширение, например, SH404SEF.
В вашем случае исправлять алиасы вручную будет очень неудобно. Лучше все-таки подобрать какое-то SEF-расширение. Правда там есть сложности с тем, что потом придется тащить его при всех обновлениях Joomla следом, поскольку адреса формируются именно в нем и потерять формат нельзя.
Подскажите, пожалуйста.
Есть модуль Каталог товаров (список категорий) на главной странице.
У половины категорий есть привязка к пунктам меню.
Далее говорю про категории с привязкой к меню:
Если кликаю на пункт меню, то открывается страница с товарами НЕ на главной странице.
Если кликаю на ту же категорию в модуле - открываются товары на той же главной странице.
Как исправить??? Надо чтобы не на главной странице открывались :( поискала в инете, поняла, что всё должно работать как надо, тк привязка к пункту меню есть.
SEF включен, алиасы прописаны на транслите.
из категории получается такая ссылка:
http://localhost/tdlira/index.php/view/category/virtuemart_category_id/5
хотя должна быть такая: http://localhost/tdlira/index.php/detskaya
изначально всё работало, когда перестало работать, не могу сказать :(
Помогите , пожалуйста, уже весь инет почитала, понять не могу что случилось и как исправить.
И да, посмотрите этот кейс: http://wedal.ru/joomla/joomla-kak-ubrat-index-php-iz-ssylok-sajta-kejs-1.html.
Спасибо за полезную статью!
Только я столкнулась с тем, что при добавлении статьи (article.html) в категорию (papka) в урле категория не отображается. Выглядит это так site.com/article.html, а должно быть site.com/papka/article.html
Почему так может быть? Какие настройки надо посмотреть?
Буду очень благодарна!
Чтобы получить нужный вам адрес:
1) Создайте пункт меню типа Блог категории с псевдонимом papka
2) Удалите пункт меню типа Материал, с которым связана статья
3) Поместите статью в категорию из пункта 1.
Я проделала все шаги, описанные Вами, но!
Теперь появилась ссылка вида
site.com/papka.html, которая выводит все статьи из данной категории, а не определенную article.html
Что я делаю опять не так? :(
Спасибо!
Если вам нужно поместить ссылку на материал именно в меню, то создайте пункт меню с типом "Внешний URL" укажите в качестве этого URL ссылку papka/article.html.
Так работает router Joomla. Если вы создадите пункт меню прямо на материал Joomla, то URL будет:
site.com/alias.html и не будет содержать категории. Если вы хотите, чтобы адрес содержал категорию, материал не должен быть прямо привязан к пункту меню. К пункту меню должна быть привязана категория, которая содержит этот материал.
При включении SEF с ссылками все нормально, но перестает работать слайдер на главной странице сайта.
Как решить эту проблему?
Нажмите в браузере F12 и посмотрите через web-инспектор ошибки скриптов (вкладка "Консоль") и пути к изображениям на вашем сервере.
Подскажите если в курсе.
Ссылки с главной страницы открывают материал не в отдельной странице материала а на главной, под уже имеющимся контентом на той же главной странице. Такое же чудо и с поисковым результатами сайта, материал открывается на главной странице...
Что может быть причиной этому и как это решить?
Материалы как в категориях так и в подкатегориях меню.
Странно то, что первая ссылка корректно работает и отображает сайт\меню\подменю, и выводит тип материала прикреплённого в этом подменю. Другие ссылки имеют вид сайт\id-категория\id-алиас материала, и открывают материал не там где следует.
Сменил тип материала, в подменю, с материал на блог категорий, ссылки корректно открывают материалы, и тогда меняется отображение материалов в этом подменю согласно общим настройкам блога.
Переназначение главной, как тип блог категорий, не повлияло на корректную работу ссылок. Ссылки опять таки не верно работают когда подменю назначается тип материал.
P.S. Решил проблему копипастом ссылок материалов из браузера, вариант железобетонный.
Спасибо за участие!
Заранее благодарю
1) Материал в категории, когда для категории не назначен пункт меню и для материала не назначен пункт меню
Формат: /category_alias/id-material_alias
2) Материал категории, когда только категории назначен пункт меню, а для материала не назначен.
Формат: /menu_category_alias/id-material_alias
3) Материалу назначен пункт меню (в независимости от того, назначен ли пункт меню категории, содержащей этот материал или нет)
Формат: /material_category_alias
Так было и в Joomla 2.5 и так сейчас в Joomla 3.
Соответственно, если у вас ссылка выглядит как http://...ru/материал то это возможно только в случае №3, когда для этого материала назначен пункт меню.
В 3 аналогично настроено.Но при переходе на материал из категории с главной страницы.
Формат 3. Хотя для материалов нет пунктов меню.
Вот тут я и застрял. Никак решения найти не могу.
Попробуйте создать пункт меню (можно в скрытом меню) типа "Блог категории" и выбрать для него категорию "Новости".
Вообще, роутер Joomla допускает открытие материала по ссылке /id-material_alias и даже по ссылке /id. Есть вероятность, что у вас переопределен в шаблон Joomla макет главной страницы. По-моему, он назывался featured и в этом макете формируются URL на материалы, не содержащие ID категории, к которым эти материалы относятся. Чтобы отсечь эту версию, попробуйте временно изменить шаблон Joomla на стандартный и проверить, останется ли проблема с URL.
Также попробуйте отключить SEF и приведите пример не-SEF ссылки на материал с главной страницы.
При смене шаблона все остается также.
При отключение sef в глобальных настройках joomla, там получается такая ссылка:http://...ru/index.php?option=com_content&view=article&id=248:название_материала&catid=33&Itemid=520
Еще раз: у вас при включении SEF ссылка:
http://domain.ltd/index.php?option=com_content&view=article&id=248:название_материала&catid=33&Itemid=520
выглядит как:
http://domain.ltd/id-material_alias
На странице списка новостей? Не только при переходе, но даже при наведении на ссылку курсора? И при этом пункт меню с ID 520 - это блог категории, в его настройках выбрана категория "Новости" и он опубликован? Помимо этого у вас нет установленных SEF-компонентов?
Если всё так, то я прямо в замешательстве
Я так понимаю, дело в том, что главная страница Joomla является блогом категории и только в этом случае все материалы категории не имеют в URL алиаса самой категории. Я не знаю почему так происходит. Было ли это ошибкой разработчиков или так и задумано.
Решается данная проблема довольно просто:
1) Сделайте пункт меню типа Блог категории для категории новости в любом меню, можно в скрытом, но он не должен быть главной страницей.
2) Главную страницу сделайте типом "Избранные материалы".
3) Перейдите в менеджер материалов Joomla, отфильтруйте только материалы категории Новости, отметьте галочками(прямо списком) и добавьте им отметку Избранное.
4) При добавлении новостей, проставляйте им отметку "Избранное", если хотите, чтобы они отображались на главной странице.
В этом случае на главной в URL будет в том числе алиас категории.
Все категории на rosa-secret.ru имеют нормальные урлы которые я прописываю в алиасе
http://www.rosa-secret.ru/genskie-kupalniki
А в товарах получается непонятный урл http://www.rosa-secret.ru/index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=58&virtuemart_category_id=27&Itemid=982
Хотя в этом товаре прописан алиас fioletovyj-super-mini-bikini-ipanema
В админке сео настроено.
Также в настройках VM, вкладка SEO, нужно снять галочку Перевести строки
Но это так...
А вообще, это странно. Создается впечатление, что у вас переделан макет категории VM и переделан не очень грамотно.
Ссылка index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=58&virtuemart_category_id=27&Itemid=982
это неSEF ссылка на страницу товара Virtuemart. Если в макете категории кто-то формировал ее вручную, он забыл добавить jRoute...
В общем, проверить можно так: выберите стандартный шаблон Joomla, в котором нет переопределенных макетов VM и посмотрите, будет ли наблюдаться проблема. Весь дизайн при этом рухнет, но зато будут использоваться стандартные, не измененные, макеты Virtuemart.
http://www.rosa-secret.ru/index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=58&virtuemart_category_id=27&Itemid=982
Сейчас обнаружила, что на самом деле чпу урл по алиасу формируется. Т.о. один и тот же товар доступен по двум разным урлам.
Короткий чпу http://www.rosa-secret.ru/genskie-kupalniki/gill4
И на этот же товар по длинному урл http://www.rosa-secret.ru/index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=53&virtuemart_category_id=27&Itemid=982
Понятно, что я могу запретить индексацию этого длинного урла в robots, но я не могу понять, почему в категориях при переходе на товар открывается именно длинный урл? Как сделать чтобы открывался короткий чпу урл? Мне кажется нужно где-то код подправить.
Я кстати, выбрала в админке временно другой шаблон, к сожалению, проблема осталась, товары также открываются по длинным урлам. Как и писала раньше, короткие чпу урлы тоже существуют. Товар открывается и по чпу и по длинному урлу, но в первую очередь по длинному.
К сожалению, я не умею это делать. Доработки делали на fl программисты. По этой проблеме сейчас работал один программист, но решение не нашел. Подскажите, можно у вас заказать эту услугу?
Есть ли у вас на сайте информацию по правильному построению меню и категорий меню для отображения материалов? Я допустил ошибку, как мне кажется, но не могу понять в чем заключается эта ошибка. Судя по консоли гугл вебмастера, на сайте присутствуют дубли типа:
site.ru/blog/proizvoditeli/14-xs.html
site.ru/contact/proizvoditeli/14-xs
site.ru/proizvoditeli/14-xs.html
Лучше это посмотреть. Вот адрес страницы категории http://www.volgatrip.ru/trip.html Если кликнуть по ссылке "К черту на кулички", по идее страница должна открыться в данное категории. Но посмотрите, что получается.
Вы сталкивались с подобным? Что это могло бы быть и как с этим бороться? Может есть секретные настройки джумлы, которые я упустил? Спасибо!
В поиске имеются две ссылки:
1) http://site.ru
2) http://site.ru/index.php?option=com_content&view=article&id=1
По обеим ссылкам открывается главная страница. Функция SEF (ЧПУ) включена (joomla 2.5).
Подозреваю, что вторая ссылка – это URL, который прописан в пункте меню «Главная». Он ведет на статью, привязанную к этому пункту меню.
Вопросы:
1) может ли такое быть (присутствие в поиске ссылок с пунктов меню)?
2) можно ли этого избежать?
3) индексируются ли такие ссылки (согласно данным в Яндекс.Вебмастер дубли отсутствуют)?
Заранее благодарен за ответ.
Вы также увидите главную, если наберете:
site.ru/1
site.ru/1-sdfsdf
site.ru/1-fdgdfgkjdfg
и таких страниц-дублей бесконечно много.
Конечно, если на них нет ссылок, поисковые системы не узнают о них и не будут индексировать. Но ссылки, по тем или иным причинам, могут появляться.
Решений я сходу могу назвать только 2:
1) Установить сторонний платный SEF-компонент, например, SH404SEF. С ним проблема дублей будет решена. Но лично мне не нравятся SEF-компоненты. Они платные. Они очень сложно настраиваются. Они тяжелые. Их в будущем всегда придется тянуть с собой, чтобы не потерять страницы в индексе.
2) Я делал самописный плагин, суть которого сводится к следующему:
Он берет не-SEF-ссылку, преобразует ее в стандартную SEF ссылку и сравнивает с SEF-ссылкой, которая была запрошена. Если они не совпадают, то идет переадресация на 404 страницу. Если совпадают, то страница открывается. Таким образом можно избавиться от большинства дублей, но если сайт сложный, то потребуется хорошее тестирование, чтобы убедиться, что какие-то нормальные страницы не будут отдавать 404.
У нас стоять ЧПУ - все хорошо меняется со ссылок типа index.php?option=com_content&view=article&id=№
на нормальные короткие
добавила сегодня вне категорий политику конфидециальности по персональным данным - она доступна только по длинному урл, хотя алиас прописан, пункт меню создан (скрытый, не опубликованный).
Что еще можно сделать? Учитывая, что в основном на сайте статьи и новые товары в магазин добавляются с ЧПУ урл, проблема только в одном конкретном материале
Article - главный родитель, хотелось бы его спрятать, чтобы привести к виду: http://site.ru/subcategory/page. Будет здорово, если вы подскажите как это можно реализовать.
Попробовал для клиентки перебросить (через Filezilla) сделанный одностраничник к ней на сайт, сделанный на Goomla, не тут то было. Сайт открывается, а страницы данной не видится. Где подкрутить, настроить?
Подскажите пожалуйста, как с помощью SEF (или возможно другим способом) реализовать такую задачу:
Есть модуль Floating buttons, в котором можно создать подкнопки, и есть очень хороший модуль регистрации (авторизации) SLogin.
Задача: необходимо прописать в поле подкнопки Floating buttons адрес или ссылку, которая бы вызывала модуль SLogin.
При этом сам модуль SLogin отображаться не должен до его вызова из Floating Buttons.
В идеале, было бы супер если бы Slogin еще выпадал во всплывающем окне....
Буду очень благодарен за подсказку
1) Публикуете модуль Slogin в какой-либо позиции, чтобы он отображался на сайте.
2) Скрываете его через CSS с помощью display: none;
3) Добавляете на кнопку событие JS или jQuery, которые при клике будет показывать блок с модулем SLogin. Если ваш шаблон построен на Bootstrap, там есть готовое решение Bootstrap Modal.
4) SEF-ссылки здесь вообще ни при чем =).