There is a major issue which has existed since at least V2. One of my stores recently received a Google Penalty because 40% of the site was duplicate content with no canonical tags due to this issue. The Penalty has subsequently been lifted.
Please note I have looked throughout the forum and looked at store owners and even developers own CS-Cart V2.2.X stores and found this issue exists and that they have duplicate content. In quite a few cases, the product pages were ranking well, but the category/subcategory pages were ranking very poorly, probably due to the nature of the duplicate content resulting in a -30 or -40 penalty.
The problem being the pagination SEO URL for category pages is generated even if it is not required. For instance, if you have in Settings>Appearance>“Products per page” a value of '25', once a category page is required to show more than 25 products, a second page should be generated, the URL's of which will be something like so:-
http://www.domain.com/category-name/
http://www.domain.com/category-name/page-2/
This is fine. There's even a few “Canonical URL” addons available for 3rd parties which generate the correct canonical tags for these URL's. This is correct practise only if the page content actually changes between page 1, page 2, etc, however, none of these 3rd party addons resolve this issue…
If you do not show products on the category page - ie. if Settings>General>“Show products from subcategories of the selected category” is unchecked - you will likely still have the problem.
To see the true effect, complete a Google search using the following parameters:-
site:yourdomain.com inurl:page-
You will likely find Google has indexed various “/category-name/page-X” URL's for your store and some are in the supplementary index too. This is very bad news for SEO. This causes Google to believe you are intentionally serving identical pages with slightly different page titles - only “Page X” is added to the Title, the rest of the page content does not change.
You need to close this loophole, so the “pages-X” URL's return a 404 not found error. Google will, eventually, clean up the mess left behind and you will soon be back to one single page which you are trying to rank for, the way it should be. Fail to take heed of this warning…and watch your search rankings fall apart.
CS-Cart Support have said this was fixed in “later editions”, the fix has been applied since 3.0.4. If your version is before 3.0.4, your store does require this fix otherwise you have major duplicate content issues.
Open:-
/controllers/customer/categories.php
Find:-
list($products, $search) = fn_get_products($params, Registry::get('settings.Appearance.products_per_page'));
Add the following code below this line:-
if (isset($search['page']) && ($search['page'] > 1) && empty($products)) {
return array(CONTROLLER_STATUS_NO_PAGE);
}
You should only apply the following .htaccess fix after applying the above fix if you have less products in a single category than the number value for “Products per page” in Appearance Settings. If the pagination is required, do NOT apply these htaccess rules.
In the root of your store, open the .htaccess file and add the following rules below the “RewriteBase” line.
RewriteRule ^(.*)/page-2/(.*)$ $1/$2 [R=301,L]
RewriteRule ^(.*)/page-3/(.*)$ $1/$2 [R=301,L]
RewriteRule ^(.*)/page-4/(.*)$ $1/$2 [R=301,L]
RewriteRule ^(.*)/page-5/(.*)$ $1/$2 [R=301,L]
RewriteRule ^(.*)/page-6/(.*)$ $1/$2 [R=301,L]
RewriteRule ^(.*)/page-7/(.*)$ $1/$2 [R=301,L]
RewriteRule ^(.*)/page-8/(.*)$ $1/$2 [R=301,L]
RewriteRule ^(.*)/page-9/(.*)$ $1/$2 [R=301,L]
Duplicate these rules for each “page-X” number you find in the Google search which results in duplicate content. This will ensure the rankings will be passed on to the main category/subcategory page as well as ensuring your customers are not presented with a 404 error.
That's all folks. If you are reading this and your store runs V2-3.0.4, the chances are I have looked at your store and found you have this problem too and should apply this fix ASAP. Any questions, please feel free to ask and I'll do my best to help.