Улучшаем SEO для компонента FAQ - шаг 1

Опубликовано:
Просмотров: 2004
+1
Голосов: 1
Всем доброго времени суток.
Компонент Вопрос-ответ - вещь полезная, однако с точки зрения SEO, несколько корявая.
Начнём с добавления возможности задать вопросу "правильный" заголовок.

1) Создадим поле seotitle в таблице cms_faq_quests, выполнив запрос:
Код PHP:
  1. ALTER TABLE `cms_faq_quests` ADD `seotitle2` VARCHAR( 255 ) NOT NULL ;
2) Откроем файл /admin/components/faq/backend.php
Находим строку
Код PHP:
  1. if ($opt == 'submit_item'){
  2. if (!cmsCore::validateForm()) { cmsCore::error404(); }
и ниже вставляем:
Код PHP:
  1. $seotitle = $_REQUEST['seotitle'];
Запрос в базу приводим к виду:
Код PHP:
  1. $sql = "INSERT INTO cms_faq_quests (category_id, pubdate, published, quest, answer, user_id, answeruser_id, answerdate, seotitle)
  2. VALUES ('$category_id', '$pubdate', $published, '$quest', '$answer', $user_id, $answeruser_id, '$answerdate', '$seotitle')";
Находим строки:
Код PHP:
  1. if ($opt == 'update_item'){
  2. if (!cmsCore::validateForm()) { cmsCore::error404(); }
  3. if (isset($_REQUEST['item_id'])) {
И ниже добавляем:
Код PHP:
  1. $seotitle = $_REQUEST['seotitle'];
Строки
Код PHP:
  1. $sql = "UPDATE cms_faq_quests
  2. SET category_id = $category_id,
  3. quest='$quest',
  4. answer='$answer',
  5. user_id='$user_id',
  6. published=$published,
  7. answeruser_id=$answeruser_id,
  8. pubdate='$pubdate',
  9. answerdate='$answerdate'
  10. WHERE id = $id
  11. LIMIT 1";
Заменяем на
Код PHP:
  1. $sql = "UPDATE cms_faq_quests
  2. SET category_id = $category_id,
  3. quest='$quest',
  4. answer='$answer',
  5. user_id='$user_id',
  6. published=$published,
  7. answeruser_id=$answeruser_id,
  8. pubdate='$pubdate',
  9. answerdate='$answerdate',
  10. seotitle='$seotitle'
  11. WHERE id = $id
  12. LIMIT 1";
Далее находим
Код PHP:
  1. <tr>
  2. <td valign="top"><strong><?php echo $_LANG['AD_DATE_REPLY']; ?>: </strong></td>
  3. <td valign="top"><input name="answerdate" style="width:190px" type="text" id="answerdate" <?php if(@$mod['answerdate'] == '00.00.0000') { echo 'value="'.date('d.m.Y').'"'; } else { echo 'value="'.$mod['answerdate'].'"'; } ?>/>
  4.  
  5. <input type="hidden" name="oldanswerdate" value="<?php echo @$mod['answerdate']?>"/>
  6. </td>
  7. </tr>
И ниже добавляем:
Код PHP:
  1. <tr>
  2. <td valign="top"><strong><?php echo $_LANG['AD_SEO_TITLE']; ?>: </strong></td>
  3. <td valign="top"><input name="seotitle" style="width:190px" type="text" id="seotitle" <?php if(@!$mod['seotitle']) { echo 'value=""'; } else { echo 'value="'.$mod['seotitle'].'"'; } ?>/>
  4.  
  5.  
  6. </td>
  7. </tr>
Сохраняем файл.

2) Открываем файл
/languages/ru/admin/components/faq.php
Перед
Код PHP:
  1. ?>
Вставляем строку
Код PHP:
  1. $_LANG['AD_SEO_TITLE'] = 'SEO заголовок';
Сохраняем.

3) Открываем файл /components/faq/frontend.php
Находим:
Код PHP:
  1. $inPage->setTitle($shortquest);
  2. $inPage->setDescription($shortquest);
  3.  
  4. $inPage->addPathway($quest['cat_title'], '/faq/'.$quest['cat_id']);
  5. $inPage->addPathway($shortquest);
И заменяем на:
Код PHP:
  1.  
  2. $inPage->addPathway($quest['cat_title'], '/faq/'.$quest['cat_id']);
  3. if(!empty($seotitle)){
  4. $inPage->setTitle($seotitle);
  5. $inPage->addPathway($seotitle);
  6. $inPage->setDescription($seotitle.'. '.$shortquest);}
  7. else{
  8. $inPage->setTitle($shortquest);
  9. $inPage->addPathway($shortquest);
  10. $inPage->setDescription($shortquest);
  11. }
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
Если вопросу задан SEO тайтл, то он будет использоваться в качестве тега title и в "хлебных крошках" и в мета-теге description (вместе с краткой версией вопроса).

Далее находим строку:
Код PHP:
  1. assign('quest', $quest)->
И после неё добавляем:
Код PHP:
  1. assign('seotitle', $seotitle)->
Находим:
Код PHP:
  1. //SAVE QUESTION
  2. $sql = "INSERT INTO cms_faq_quests (category_id, pubdate, published, quest, answer, user_id, answeruser_id, answerdate, hits)
  3. VALUES ('$category_id', NOW(), '$published', '$message', '', '{$inUser->id}', 0, NOW(), 0)";
И заменяем на:
Код PHP:
  1. //SAVE QUESTION
  2. $sql = "INSERT INTO cms_faq_quests (category_id, pubdate, published, quest, answer, user_id, answeruser_id, answerdate, hits, seotitle)
  3. VALUES ('$category_id', NOW(), '$published', '$message', '', '{$inUser->id}', 0, '', 0, '')";
Сохраняем и закрываем файл.

4) Открываем файл /templates/_default_/components/com_faq_read.tpl
И над строкой:
Код PHP:
  1. <table cellspacing="5" cellpadding="0" border="0" width="100%">
Вставляем:
Код PHP:
  1. {if $quest.seotitle}<h2>{$quest.seotitle}</h2>{/if}
5) Открываем файл /templates/_default_/components/com_faq_view.tpl
Строку:
Код PHP:
  1. <div class="faq_quest_link"><a href="/faq/quest{$quest.id}.html">{$quest.quest}</a></div>
Заменяем на
Код PHP:
  1. <div class="faq_quest_link">{$quest.quest|truncate:140|strip_tags}</div>
И в нужном месте выводим SEO заголовок вопроса
Код PHP:
  1. {if $quest.seotitle}{$quest.seotitle}{/if}
Готовить архив для заливки с заменой не стал, т.к. думаю мало кто использует движок без изменений, а так пошагово можно внести правки. Но если очень нужно - дайте знать.

Следующим этапом улучшения будем делать чпу ссылки для вопросов.
Теги: title, seo, faq
Комментарии (1)
Letsgo #
: +1
Понравился подход. Компонент нужный и явно в нем seo не хватает сильно. Потому и попросил автора запостить и здесь.

Голосуем

Самый нужный компонент