Opencart 1.5.1.3: добавляем главную страницу в sitemap.xml

- Posted in Uncategorized by

Оказывается, в sitemap.xml (Google sitemap) нет ссылки на главную страницу сайта. Добавляем несколько строк в catalog/controller/feed/google_sitemap.php:

commit acf2aa3f70fdb171846ffe81b74f2682cce8e639
Author: Ruslan Brest <rb@labtodo.com>
Date:   Wed Feb 22 13:09:20 2012 +0200
    [+] Add home page address to sitemap.xml
diff --git a/upload/catalog/controller/feed/google_sitemap.php b/upload/catalog/controller/feed/google_sitemap.php
index 3d6d475..7a3f750 100644
--- a/upload/catalog/controller/feed/google_sitemap.php
+++ b/upload/catalog/controller/feed/google_sitemap.php
@@ -5,6 +5,12 @@ class ControllerFeedGoogleSitemap extends Controller {
         $output  = '<?xml version="1.0" encoding="UTF-8"?>';
         $output .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
 
+       $output .= '<url>';
+       $output .= '<loc>' . HTTP_SERVER . '</loc>';
+       $output .= '<changefreq>weekly</changefreq>';
+       $output .= '<priority>1.0</priority>';
+       $output .= '</url>';
+
         $this->load->model('catalog/product');
 
         $products = $this->model_catalog_product->getProducts();

Opencart 1.5.1.3: выдача HTTP/404 для товаров, которые отключены администратором

- Posted in Uncategorized by

В Опенкарт, если товар отключен, а внешняя ссылка на него где-то сохранилась, при переходе по ней будет отдан HTTP код 200 (OK) вместо более правильного 404 (Not Found).

Эту ситуацию исправляет одна строчка, см. патч ниже.

Спасибо: molotochek, см. http://opencartforum.ru/topic/418-%d0%bd%d0%b5-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%b5%d1%82-404/page__view__findpost__p__46795

commit 6ef5a39e9e82c4e82901ce47d5304313867afb83
Author: Ruslan Brest <rb@labtodo.com>
Date:   Tue Feb 21 17:03:00 2012 +0200
    [!] HTTP/200 => HTTP/404 для товаров, которые отключены администратором
    и других страниц с ненайденными сущностями
    
    by: molotochek
    http://opencartforum.ru/topic/418-%d0%bd%d0%b5-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%b5%d1%82-404/page__view__findpost__p__46795
diff --git a/upload/catalog/controller/product/product.php b/upload/catalog/controller/product/product.php
index c39ad77..c5579db 100644
--- a/upload/catalog/controller/product/product.php
+++ b/upload/catalog/controller/product/product.php
@@ -414,15 +414,13 @@ class ControllerProductProduct extends Controller {
            );
 
            $this->document->setTitle($this->language->get('text_error'));
-
            $this->data['heading_title'] = $this->language->get('text_error');
-
            $this->data['text_error'] = $this->language->get('text_error');
-
            $this->data['button_continue'] = $this->language->get('button_continue');
-
            $this->data['continue'] = $this->url->link('common/home');
 
+           $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
+
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
            } else {
diff --git a/upload/catalog/controller/account/download.php b/upload/catalog/controller/account/download.php
index 7b736d2..4cb0a0d 100644
--- a/upload/catalog/controller/account/download.php
+++ b/upload/catalog/controller/account/download.php
@@ -120,12 +120,11 @@ class ControllerAccountDownload extends Controller {
            $this->response->setOutput($this->render());
        } else {
            $this->data['heading_title'] = $this->language->get('heading_title');
-
            $this->data['text_error'] = $this->language->get('text_empty');
-
            $this->data['button_continue'] = $this->language->get('button_continue');
-
            $this->data['continue'] = $this->url->link('account/account', '', 'SSL');
+           
+           $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
diff --git a/upload/catalog/controller/account/order.php b/upload/catalog/controller/account/order.php
index cb49bef..5006970 100644
--- a/upload/catalog/controller/account/order.php
+++ b/upload/catalog/controller/account/order.php
@@ -434,6 +434,8 @@ class ControllerAccountOrder extends Controller {
            );
 
            $this->data['continue'] = $this->url->link('account/order', '', 'SSL');
+           
+           $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
diff --git a/upload/catalog/controller/account/return.php b/upload/catalog/controller/account/return.php
index 1575ff0..b9add37 100644
--- a/upload/catalog/controller/account/return.php
+++ b/upload/catalog/controller/account/return.php
@@ -283,12 +283,11 @@ class ControllerAccountReturn extends Controller {
            );
 
            $this->data['heading_title'] = $this->language->get('text_return');
-
            $this->data['text_error'] = $this->language->get('text_error');
-
            $this->data['button_continue'] = $this->language->get('button_continue');
-
            $this->data['continue'] = $this->url->link('account/return', '', 'SSL');
+           
+           $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
diff --git a/upload/catalog/controller/checkout/cart.php b/upload/catalog/controller/checkout/cart.php
index afc8660..964c180 100644
--- a/upload/catalog/controller/checkout/cart.php
+++ b/upload/catalog/controller/checkout/cart.php
@@ -277,12 +277,11 @@ class ControllerCheckoutCart extends Controller {
            $this->response->setOutput($this->render());
        } else {
            $this->data['heading_title'] = $this->language->get('heading_title');
-
            $this->data['text_error'] = $this->language->get('text_empty');
-
            $this->data['button_continue'] = $this->language->get('button_continue');
-
            $this->data['continue'] = $this->url->link('common/home');
+           
+           $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
diff --git a/upload/catalog/controller/error/not_found.php b/upload/catalog/controller/error/not_found.php
index 251a745..ab0758a 100644
--- a/upload/catalog/controller/error/not_found.php
+++ b/upload/catalog/controller/error/not_found.php
@@ -22,15 +22,12 @@ class ControllerErrorNotFound extends Controller {
        }
 
        $this->data['heading_title'] = $this->language->get('heading_title');
-
        $this->data['text_error'] = $this->language->get('text_error');
-
        $this->data['button_continue'] = $this->language->get('button_continue');
+       $this->data['continue'] = $this->url->link('common/home');
 
        $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
-       $this->data['continue'] = $this->url->link('common/home');
-
        if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
            $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
        } else {
diff --git a/upload/catalog/controller/information/information.php b/upload/catalog/controller/information/information.php
index e3b52ce..38df1c7 100644
--- a/upload/catalog/controller/information/information.php
+++ b/upload/catalog/controller/information/information.php
@@ -62,14 +62,12 @@ class ControllerInformationInformation extends Controller {
            );
 
            $this->document->setTitle($this->language->get('text_error'));
-
            $this->data['heading_title'] = $this->language->get('text_error');
-
            $this->data['text_error'] = $this->language->get('text_error');
-
            $this->data['button_continue'] = $this->language->get('button_continue');
-
            $this->data['continue'] = $this->url->link('common/home');
+           
+           $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
diff --git a/upload/catalog/controller/product/category.php b/upload/catalog/controller/product/category.php
index f30cb53..4ffea91 100644
--- a/upload/catalog/controller/product/category.php
+++ b/upload/catalog/controller/product/category.php
@@ -379,14 +379,12 @@ class ControllerProductCategory extends Controller {
            );
 
            $this->document->setTitle($this->language->get('text_error'));
-
            $this->data['heading_title'] = $this->language->get('text_error');
-
            $this->data['text_error'] = $this->language->get('text_error');
-
            $this->data['button_continue'] = $this->language->get('button_continue');
-
            $this->data['continue'] = $this->url->link('common/home');
+           
+           $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
diff --git a/upload/catalog/controller/product/manufacturer.php b/upload/catalog/controller/product/manufacturer.php
index 7dd5359..3ce6a78 100644
--- a/upload/catalog/controller/product/manufacturer.php
+++ b/upload/catalog/controller/product/manufacturer.php
@@ -414,14 +414,12 @@ class ControllerProductManufacturer extends Controller {
            );
 
            $this->document->setTitle($this->language->get('text_error'));
-
            $this->data['heading_title'] = $this->language->get('text_error');
-
            $this->data['text_error'] = $this->language->get('text_error');
-
            $this->data['button_continue'] = $this->language->get('button_continue');
-
            $this->data['continue'] = $this->url->link('common/home');
+           
+           $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
diff --git a/upload/catalog/controller/product/shoppica.php b/upload/catalog/controller/product/shoppica.php
index cf31414..0eb7eb0 100644
--- a/upload/catalog/controller/product/shoppica.php
+++ b/upload/catalog/controller/product/shoppica.php
@@ -338,6 +338,8 @@ class ControllerProductShoppica extends Controller
         $this->data['button_continue'] = $this->language->get('button_continue');
 
         $this->data['continue'] = HTTP_SERVER . 'index.php?route=common/home';
+        
+        $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
         if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
             $this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
diff --git a/upload/catalog/model/checkout/order.php b/upload/catalog/model/checkout/order.php
index 8e8d414..afeb625 100644
--- a/upload/catalog/model/checkout/order.php
+++ b/upload/catalog/model/checkout/order.php
@@ -566,4 +566,4 @@ class ModelCheckoutOrder extends Model {
        }
    }
 }
-?>
+?>
\ No newline at end of file

Opencart 1.5.x (catalog): SEO - автоматическое заполнение meta keywords

- Posted in Opencart by

Если поле "meta keywords" не заполнено в админке, Опенкарт его не выводит. Для улучшения ситуации заполним его автоматически, продублировав слова из названия товара.

В результате у нас будет что-то вроде:


Аппарат для приготовления блинов Bomann CM 2221 CB

Не идеал, но вроде бы лучше, чем ничего. Или ручное прописывание у всех товаров, хи-хи. В то же время вручную описать эти поля никто не мешает, и в случае их заполненности автоматика не вмешивается. Делать автозаполнение для "meta description" не решился, потому что одинаковое название и описание не приветствуется. Но кому хочется - могут дописать if( empty($this->data['description']) ) $this->data['description'] = $this->data['title'];

Для версий Opencart 1.5.x, включая 1.5.1.3; ocStore 1.0.1.

diff --git a/public_html/catalog/controller/common/header.php b/public_html/catalog/controller/common/header.php
index 79bf735..1904774 100644
--- a/public_html/catalog/controller/common/header.php
+++ b/public_html/catalog/controller/common/header.php
@@ -18,6 +18,15 @@ class ControllerCommonHeader extends Controller {
                $this->data['direction'] = $this->language->get('direction');
                $this->data['google_analytics'] = html_entity_decode($this->config->get('config_google_analytics'), ENT_QUOTES, 'UTF-8');
 
+               // SEO improvements:
+               // If keywords and description not set - use title here too
+               if( empty($this->data['keywords']) )
+               {
+                       $words = explode(' ', $this->data['title']);
+                       if(count($words) > 1) $this->data['keywords'] = implode(',', $words) . ',';
+                       $this->data['keywords'] .= $this->data['title'];
+               }
+
                $this->language->load('common/header');
 
                if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS']

Яндексу потребовалось 12 дней, чтобы проиндексировать наш интернет-магазин

- Posted in Webdev by

Я удивлён таким чудовищным сроком. Sitemap.xml был добавлен 11-го числа на http://webmaster.yandex.ua/, и только сегодня (23 сентября) наконец-то сайт попал в поисковую выдачу, а надпись про "сайт успешно добавлен в очередь, ждите" сменилась информацией о том, что столько-то страниц проиндексировано.

Обычно люди говорят о 2-3 днях на индексацию.

Я уж думал, что мы попали в немилость -- предположим, посчитали злостными копипастерами. В той области, кстати, которой мы занялись, выглядеть оригинально по части текстов весьма затруднительно. По фотографиям тоже, поскольку основная масса фото берётся с сайтов производителей и, разумеется, в сотнях магазинов одинаковые. Но мы над этим работаем.

Для сравнения: Google понадобилось меньше дня. Я даже не собирался проверять раньше, чем через сутки, но приятель накатал всем членам команды вопль радости по email :) Мол, ура, всем радоваться - мы попали в поисковую выдачу. Он случайно обнаружил, я даже не успел сказать ему, что занялся поисковиками.

Google Webmaster Tools

Яндекс.Вебмастер