SEO-title для вопросов компонента FAQ

+16
2.34K
Всем доброго времени суток.
Компонент Вопрос-ответ — вещь полезная, однако с точки зрения SEO, несколько корявая.
Начнём с добавления возможности задать вопросу "правильный" заголовок.

1) Создадим поле seotitle в таблице cms_faq_quests, выполнив запрос:
  1. ALTER TABLE `cms_faq_quests` ADD `seotitle` VARCHAR( 255 ) NOT NULL ;
2) Откроем файл /admin/components/faq/backend.php
Находим строку
  1. if ($opt == 'submit_item'){
  2. if (!cmsCore::validateForm()) { cmsCore::error404(); }
и ниже вставляем:
  1. $seotitle = $_REQUEST['seotitle'];
Запрос в базу приводим к виду:
  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')";
Находим строки:
  1. if ($opt == 'update_item'){
  2. if (!cmsCore::validateForm()) { cmsCore::error404(); }
  3. if (isset($_REQUEST['item_id'])) {
И ниже добавляем:
  1. $seotitle = $_REQUEST['seotitle'];
Строки
  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";
Заменяем на
  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";
Далее находим
  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>
И ниже добавляем:
  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
Перед
  1. ?>
Вставляем строку
  1. $_LANG['AD_SEO_TITLE'] = 'SEO заголовок';
Сохраняем.

3) Открываем файл /components/faq/frontend.php
Находим:
  1. $inPage->setTitle($shortquest);
  2. $inPage->setDescription($shortquest);
  3.  
  4. $inPage->addPathway($quest['cat_title'], '/faq/'.$quest['cat_id']);
  5. $inPage->addPathway($shortquest);
И заменяем на:
  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 (вместе с краткой версией вопроса).

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

Следующим этапом улучшения будем делать чпу ссылки для вопросов.
+1
Erwin Erwin 11 лет назад #
У меня в моем шаблоне нет
Код PHP:
  1. <table cellspacing="5" cellpadding="0" border="0" width="100%">
Можно над
Код PHP:
  1. <div class="faq_quest">
Вставить
Код PHP:
  1. {if $quest.seotitle}<h2>{$quest.seotitle}</h2>{/if}
0
Петрмаг Петрмаг 10 лет назад #
что думают по этому Fuze и r2 так как -это действительно нужная вещь,во многих проектах вопросы-ответы,то думаю интересно их мнение как авторов системы,возможно что-то поправят или подскажут.
+3
Роман Роман 10 лет назад #
что думают по этому Fuze и r2 так как -это действительно нужная вещь,во многих проектах вопросы-ответы,то думаю интересно их мнение как авторов системы,возможно что-то поправят или подскажут.
Да ничего не скажут... скажут что это не баг и нужно только вам... Сколько уже было доделок по СЕО? и сколько их внесли в релиз?
Олег Васильевич я Олег Васильевич я 10 лет назад #
Комментарий удален
+4
Марат Марат 10 лет назад #
Ошибочку нашел :=)
Не будет работать. Нужно исправить. В таблицу вставляете колонку seotitle2, а везде обращаетесь к ней как seotitle. Думаю, просто очепятка :=)
0
SEOrigin SEOrigin 10 лет назад #
Спасибо, Марат. Действительно мой косяк, проверял всё перед тем как выложить в блог на существующем проекте, где уже seotitle есть. .
0
Марат Марат 10 лет назад #
Бывает :=)
+1
lezginka.ru lezginka.ru 10 лет назад #
Готовить архив для заливки с заменой не стал, т.к. думаю мало кто использует движок без изменений
а зря..по моим антинаучным исследованиям 90% используют дефолт

Еще от автора

Прекращение поддержки микроразметки data-vocabulary.org
Относительно недавно Google анонсировал прекращение использования микроразметки data-vocabulary.org, таким образом data-vocabulary.
SEO предложения для InstantCMS 2
Друзья, команда разработчиков создала действительно мощнейший продукт - InstantCMS 2, потенциал которого просто огромен.
Белая страница при сохрании в InstantMaps 2
В InstantMaps для InstantCMS 2 при включении в настройках типа контента возможность задания специфических SEO title и мета-тегов, при сохрании объекта
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.