Перейти к содержанию
Alexandr

SEO Title и H1 тэги - ГОТОВО. [Доработка]

Рекомендуемые сообщения

Добрый день всем!

Уже не раз обсуждался крупный недостаток в OpenCart для SEO специалистов - это отсутствие возможности настроить самому содержимое тэгов TITLE и H1.

Довольно серьёзная причина почему многие SEO специалисты отказывались работать с ней.

По моему заданию это было исправлено и работает - если поля TITLE и H1 не заполнены то значения берутся как раньше из названия товара, а если заполнены то из заполненных значений. Теперь выкладываю БЕСПЛАТНО на всеобщее обозрение, надеюсь babushka и те кто отвечают за обновление русского OpenCart. добавят это в русскую сборку.

Кодер буржуйский, поэтому комменты на английском:

Added two fields in tables :

1. oc_product_description

2. oc_category_description

meta_title

h1tag

Changes :

admin/view/template/catalog/category_form.tpl

44 line to line 54

_______Added _______<tr>              <td>Meta Title</td>              <td><input name="category_description[<?php echo $language['language_id']; ?>][meta_title]" size="100" value="<?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['meta_title'] : ''; ?>" />              </td>            </tr>	   <tr>              <td>H1 tag</td>              <td><input name="category_description[<?php echo $language['language_id']; ?>][h1tag]" size="100" value="<?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['h1tag'] : ''; ?>" />               </td>            </tr>_______Added____

admin/view/template/catalog/product_form.tpl

44 line to line 57

_______Added _______<tr>              <td>Meta Title</td>              <td>	      <input type="text" name="product_description[<?php echo $language['language_id']; ?>][meta_title]" value="<?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['meta_title'] : ''; ?>" size="80"/>	</td>            </tr>		<tr>              <td>H1 tag</td>              <td>	       <input type="text" name="product_description[<?php echo $language['language_id']; ?>][h1tag]" value="<?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['h1tag'] : ''; ?>" size="80"/>		</td>            </tr>_______Added____

admin/model/catalog/category.php

Line 12 - changed from

foreach ($data['category_description'] as $language_id => $value) {			$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "'");		}

To

foreach ($data['category_description'] as $language_id => $value) {			$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', h1tag = '" . $this->db->escape($value['h1tag']) . "'");		}

Line 38 From

foreach ($data['category_description'] as $language_id => $value) {			$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "'");		}

To

foreach ($data['category_description'] as $language_id => $value) {			$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', h1tag = '" . $this->db->escape($value['h1tag']) . "'");		}

Line 123 From

$category_description_data[$result['language_id']] = array(				'name'             => $result['name'],				'meta_keywords'    => $result['meta_keywords'],				'meta_description' => $result['meta_description'],				'description'      => $result['description']			);

To

$category_description_data[$result['language_id']] = array(				'name'             => $result['name'],				'meta_keywords'    => $result['meta_keywords'],				'meta_description' => $result['meta_description'],				'description'      => $result['description'],				'meta_title'      => $result['meta_title'],				'h1tag'      => $result['h1tag']			);

admin/model/catalog/product.php

Line 12 From

foreach ($data['product_description'] as $language_id => $value) {			$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "'");		}

To

foreach ($data['product_description'] as $language_id => $value) {			$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', h1tag = '" . $this->db->escape($value['h1tag']) . "'");		}

Line 107 From

foreach ($data['product_description'] as $language_id => $value) {			$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "'");		}

To

foreach ($data['product_description'] as $language_id => $value) {			$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', h1tag = '" . $this->db->escape($value['h1tag']) . "'");		}

Line 388 From

$product_description_data[$result['language_id']] = array(				'name'             => $result['name'],				'meta_keywords'    => $result['meta_keywords'],				'meta_description' => $result['meta_description'],				'description'      => $result['description']			);

To

$product_description_data[$result['language_id']] = array(				'name'             => $result['name'],				'meta_keywords'    => $result['meta_keywords'],				'meta_description' => $result['meta_description'],				'description'      => $result['description'],				'meta_title'      => $result['meta_title'],				'h1tag'      => $result['h1tag']			);

catalog/controller/product/category.php

Line 48 from

$this->document->title = $category_info['name'];

To

if($category_info['meta_title'] == "")			{	  		$this->document->title = $category_info['name'];			}			else			{				$this->document->title = $category_info['meta_title'];			}

catalog/controller/product/product.php

Line 113 from

$this->document->title = $product_info['name'];

To

if($product_info['meta_title'] == "")			{	  		    $this->document->title = $product_info['name'];			}			else			{				$this->document->title = $product_info['meta_title'];			}
Изменено пользователем afwollis
code
  • +1 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо бы написать еще как добавлять в базу поля, я вроде сделал varchar 64 -работает,правильно ли я сделал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где редактировать текст "Ключевые слова мета-теги", "Мета-теги" при добавлении товара/категории? Так как не правильно написано (возможно переведено). Есть "ключевые слова", а есть "описание". В ocStore v0.1.3 все перепутано

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Меня заинтересовал выложеный Вами код.Но есть вопрос:если добавлять поля, то какой тип, формат, длина?Спасибо заранее!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за доработку, но давайте немного доточим инструкцию.

Что касается полей в БД, то нужно добавлять оба поля meta_title и h1tag в обе таблицы oc_product_description и oc_category_description (ОС префикс, у вас он может быть другой). Поля создаем varchar(80) (255 максимальная длина поля)

Что бы все таки поддерживать многоязычность я бы в коде исправил бы:

admin/view/template/catalog/category_form.tpl и admin/view/template/catalog/product_form.tpl

<td>Meta Title</td>    =>    <td><?php echo $entry_meta_title ?></td><td>H1 tag</td>   =>     <td><?php echo $entry_h1_tag ?></td>

В файлах /admin/controller/catalog/category.php и /admin/controller/catalog/product.php

После

$this->data['entry_status'] = $this->language->get('entry_status');
Добавляем

$this->data['entry_meta_keywords'] = $this->language->get('entry_meta_keywords');$this->data['entry_meta_title'] = $this->language->get('entry_meta_title');

После чего в языковых файлах /admin/language/ваш_язык/catalog/category.php и /admin/language/ваш_язык/catalog/product.php

в конце // Entry добавляем (и во всех языках которых вам нужно с соответствующим переводом)

$_['entry_meta_title']       = 'Мета-название:';$_['entry_h1_tag']            = 'Заголовок H1';

Так же код который нужно добавить в admin/view/template/catalog/category_form.tpl и admin/view/template/catalog/product_form.tpl, нужно добавлять не именно начиная со строки 44 а в таблице, которая там находится, и не обязательно в конец, а в удобное для вас место

З.Ы. первый раз такое пишу, так что если что вдруг что не так, сильно не пинайте, пока все )

Изменено пользователем afwollis
code

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поля создаем varchar(80) (255 максимальная длина поля)

мистика прям =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Fix305 Почему мистика? Просто в доработке поля Meta Title'a и H1 tag'а в категории ограничены 100й символов для ввода, а в продукте 80 символов. По этому я решил поставить минимальное. Хотя можно поставить 255 и изменить в доработке size="80" и size="100" на size="255"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

извиняюсь, неправильно понял текст. Складывается впечатление что varchar(80) подразумевает под собой 255 максимальную длину поля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, если не затруднит, а как эти поля при экспорте добавить в xls?Ну и соответственно импортировать тоже =)С уважением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Действительно актуальный вопрос экспорта. Нужно будет посмотреть самому, может быть там все просто.И еще такой вопрос, вот смотрю я и все вроде бы хорошо, но что то я не совсем понимаю как работает в данной доработке Н1, где выводится или вообще что с ним делается

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

где выводится или вообще что с ним делается

Кстати, присоединюсь к вопросу.С уважением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю как у остальных,а у меня ни title ни h1 при произведенных изменениях не меняются.Сделал пока так - viewtopic.php?f=15&t=105&start=30Буду рад, если кто-нибудь меня поправит или дополнитЗЫ Вру - title через раз стал срабатывать, h1 точно не работает. Доработка сырая...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит Вы сделали что-то не так =]

ps Работает лишь когда в категории есть хотя бы какой-то товар!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Логично что не работает H1 тег, ибо инструкция недописана!!!

Нужно дописать:

catalog/controller/product/category.php
Line ~61 from

$this->data['heading_title'] = $category_info['name'];
To

if($category_info['h1tag'] == "")
{
$this->data['heading_title'] = $category_info['name'];
}
else
{
$this->data['heading_title'] = $category_info['h1tag'];
}
catalog/controller/product/product.php
Line ~133 from

$$this->data['heading_title'] = $product_info['name'];
To

if($product_info['h1tag'] == "")
{
$this->data['heading_title'] = $product_info['name'];
}
else
{
$this->data['heading_title'] = $product_info['h1tag'];
}
У меня работает отлично.

Админы, будет время добавьте в шапку

Изменено пользователем afwollis
как мне нравится прятать за всех код в CODE...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

народ, чего паритесь?

чтобы не изменять базу (для последующей совместимости с будущими обновлениями)

достаточно писать тег H1 из meta-description.

В этом случае и потребности seo удовлетворены, и структура базы не нарушается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Товарищи, а может кто выложит измененные файлы, а то возился, исправлял, повылетали ошибки. Возможно ли?

пс. разобрался, с 3го раза) всё заработало.

Изменено пользователем spoon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может ктонибудь выложит готовое решение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В версии 1.4.9.4 имеет мета тег Ключевые слова: и метатегов Описание: тэг H1 и ... сделать, Вам нужен ремонт, чтобы сделать его в версии 1.4.9.4, будет ли он улучшить свою SEO, если я сделаю это исправление в код

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

господа, большая просьба - помогите уж людям несведущим и выложите пожалуйста изменённые файлы, а то как их не менял, не выходит, мож чегото не то менял или недоперепонял аглицкий язык.... :blink: И, я думаю не я один такой.

Заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

похоже ветка форума умерла.... :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

обновляемся до Version 0.2.0 и всё будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да.. в новых версиях OcStore все это есть, но совместимости с модулем экспорта/импорта мы так и не дождались..

Эх! Мне все-равно скоро придется с этим столкнуться. Видимо, напишу мануал по прицеплению.

С уважением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не знаю насколько актуально или нет, но вот ссылка на seo pack, для прописания Title H1 и Н2 тегов. Работает для товаров и категорий, не забывайте говорить автору сего чуда спасибо...Надеюсь поможет кому нибудь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×