Examples
Contents:
- General Notes
- Stack Color Descriptions After Category Description
- Prepend Category Title (
<h1>
) And Meta Title With Color Name - Add Subtitle With Blue Color Slogan
- Advise Search Engine To Index Only Certain Colors
- Provide Custom Descriptions For Exact Filter Combinations In Certain Categories And Only On First Page
General Notes
This article contains examples based on standard Magento sample data, so that you can easily try them on Magento installation containing sample data.
We understand that providing relevant content for brands is in many cases more useful than for colors. However, standard Magento sample data doesn't have brands and we think that being easy to try is more important here. In case it is easier to understand, you can substitute colors with brands in all the examples below.
Examples implement various content strategies which are explicitly defined in the beginning of the example. Please note that these strategies are designed to illustrate different techniques of composing filter-specific content, these strategies are not-necessarily the best in terms of SEO.
You can work with these examples in 2 ways:
- Copy template instructions to to template files in your theme subdirectory and check how it works, in case attribute code or brand names are different, edit them in template instructions as needed.
- Alternatively, you can just read through template instructions and if example has a link to demo, check the result in extension demo.
"Notes" section of each example often explains how template methods are used. Please read method reference for all the details.
Though variable are not used in examples, mainly for being less readable, you may consider using variables as described in variable reference.
Examples also follow recommendation from How It Works article for alternative syntax for control structures in visual content templates and using plain PHP syntax in meta content templates.
Examples also demonstrate usage of indentation, empty lines and comments to increase readability of template instructions.
Stack Color Descriptions After Category Description
Content Strategy
Color-specific description should be rendered after category description. If there are several color filters applied, description of every color should be rendered.
description.phtml
<?php echo $this->originalDescription() ?>
<?php if ($this->filter('color')->contains('Red')): ?>
<p>Red-specific description</p>
<?php endif; ?>
<?php if ($this->filter('color')->contains('Green')): ?>
<p>Green-specific description</p>
<?php endif; ?>
<?php if ($this->filter('color')->contains('Blue')): ?>
<p>Blue-specific description</p>
<?php endif; ?>
Notes
originalDescription()
method is used to render original category description.filter()->contains()
method is used to check whether color filter is applied.- The same technique may be used to display any content: brand banners, links, additional menus, ads, etc
Prepend Category Title (<h1>
) And Meta Title With Color Name
Content Strategy
- On category pages having exactly one color filter applied:
- add color name before category name, so that:
- page
<h1>
should beRed Bags
,Green Jackets
, etc - meta title should be
Red Bags
,Green Jackets
, etc
- page
- in meta title, remove color name from list of applied filters normally displayed in the end of meta title.
- add color name before category name, so that:
- In other cases, do nothing.
Demo:
- http://m2-demo.manadev.com/filter_specific_content/women/tops-women/jackets-women/color/red.html
- http://m2-demo.manadev.com/filter_specific_content/women/tops-women/jackets-women/color/green.html
- http://m2-demo.manadev.com/filter_specific_content/women/tops-women/jackets-women/color/blue.html
h1_title.phtml
<?php if ($this->category() && $this->filter('color')->count() == 1): ?>
<?php echo $this->filter('color')->first() ?>
<?php endif; ?>
<?php echo $this->originalH1Title() ?>
meta_title.phtml
if ($this->category() && $this->filter('color')->count() == 1) {
// prepend meta title with color name and separate them with space
echo $this->filter('color')->first(). ' ';
// remove color filter from list of applied filters, so that it is not
// added after default meta title with the logic in the end of this
// template
$this->filter('color')->exclude();
}
// show default meta title
echo $this->originalMetaTitle();
// Add labels of all applied filters and separators in between
$filterCount = $this->filters()->countIncluded();
foreach ($this->filters()->allIncluded() as $index => $filter) {
if ($index == 0) {
echo __(": ");
}
elseif ($index < $filterCount - 1) {
echo __(", ");
}
else {
echo __(" and ");
}
echo $filter->item_label;
}
// Add page number to page title
if ($this->page() > 1) {
echo __(" (Page %d)", $this->page());
}
In these templates:
category()
method is used to check that category page is being displayedfilter()->count()
method is used to check exactly 1 color filter is appliedfilter()->first()
method is used to get name of first applied color filterfilter()->exclude()
method is used to remove color filter in meta title template. Note that is will still be present when processing other content templates.$this->filters()->countIncluded()
method is used to get number of applied filters to be rendered after standard meta title (that is, those not excluded withfilter()->exclude()
method call).$this->filters()->allIncluded()
method is used to get all applied filters to be rendered after standard meta title (that is, those not excluded withfilter()->exclude()
method call).$this->page()
method is used current product list page which user can change in product list toolbar.originalH1Title()
method is used to render original category name.originalMetaTitle()
method is used to render original category meta title.- in meta title template everything below
echo $this->originalMetaTitle()
is standard logic of adding all applied filters to to meta title which comes with default meta title template.
Add Subtitle With Blue Color Slogan
Content Strategy
Add slogan below page title if blue filter is applied.
Demo: http://m2-demo.manadev.com/filter_specific_content/women/tops-women/jackets-women/color/blue.html
h2_title.phtml
<?php if ($this->filter('color')->contains('Blue')): ?>
<h2>Blue is the new white.</h2>
<?php endif; ?>
Notes
filter()->contains()
method is used to check whether color filter is applied.
Advise Search Engine To Index Only Certain Colors
Content Strategy
- index pages filtered by no more than one color: Red, Green or Blue.
- don't index any other category pages.
- follow pages filtered by exactly one filter
- follow pages filtered by 2 filters one of which is color Red. Green, or Blue.
- don't follow any other filters.
Demo:
- Check page source of http://m2-demo.manadev.com/filter_specific_content/women/tops-women/jackets-women/color/blue.html
- Check page source of http://m2-demo.manadev.com/filter_specific_content/women/tops-women/jackets-women/color/blue/material/cotton.html
Settings
Most of content strategy requiremented can be implemented with settings in Manadev -> SEO -> Global Configuration
:
Apply robots = NOINDEX -> If number of applied filters is equal or more than
set to1
Apply robots = NOFOLLOW -> If number of applied filters is equal or more than
set to2
meta_index.phtml
if ($this->filters()->are(['color' => 'Blue'])) {
echo 'INDEX';
} elseif ($this->filters()->are(['color' => 'Green'])) {
echo 'INDEX';
} elseif ($this->filters()->are(['color' => 'Red'])) {
echo 'INDEX';
} else {
// show default INDEX or NOINDEX
echo $this->originalIndex();
}
meta_follow.phtml
if ($this->filters()->count() == 2) {
if ($this->filter('color')->contains('Blue')) {
echo 'FOLLOW';
} elseif ($this->filter('color')->contains('Blue')) {
echo 'FOLLOW';
} elseif ($this->filter('color')->contains('Blue')) {
echo 'FOLLOW';
} else {
// show default FOLLOW or NOFOLLOW
echo $this->originalFollow();
}
} else {
// show default FOLLOW or NOFOLLOW
echo $this->originalFollow();
}
Notes
filters()->are()
method is used to check for exact filter matchfilters()->count()
method is used to check that number of applied filters is exactly 2filter()->contains()
method is used to check whether color filter is applied.originalIndex()
method is used to render original INDEX or NOINDEX, as specified in SEO configuration.originalFollow()
method is used to render original FOLLOW or NOFOLLOW, as specified in SEO configuration.
Provide Custom Descriptions For Exact Filter Combinations In Certain Categories And Only On First Page
Content Strategy
- Provide unique and relevant descriptions for certain combination of color and style filters in Jacket categories (both men and women)
- Handle both Men Jackets category and Women Jackets category
- Check only exact matches. If there are more filters, don't apply these descriptions
- In other cases, use default descriptions.
- Provide description only on the first page (be it custom or default description). On all subsequent pages, show no description.
Demo:
description.phtml
<?php $continue = false; // introduce custom variable ?>
<?php if ($page < 2): // first page of products ?>
<?php if ($this->category() == 14): // men jackets category ?>
<?php if ($this->filters()->are(['color' => 'Red', 'style_general' => 'Insulated'])): ?>
<p>Description specific to red insulated men jackets</p>
<?php elseif ($this->filters()->are(['color' => 'Red', 'style_general' => 'Hooded'])): ?>
<p>Description specific to red hooded men jackets</p>
<?php // add more men jacket descriptions here ?>
<?php else: ?>
<?php $continue = true; // no unique description provided - render default one ?>
<?php endif; ?>
<?php elseif ($this->category() == 23): // women jackets category ?>
<?php if ($this->filters()->are(['color' => 'Red', 'style_general' => 'Insulated'])): ?>
<p>Description specific to red insulated women jackets</p>
<?php elseif ($this->filters()->are(['color' => 'Red', 'style_general' => 'Hooded'])): ?>
<p>Description specific to red hooded women jackets</p>
<?php // add more women jacket descriptions here ?>
<?php else: ?>
<?php $continue = true; // no unique description provided - render default one ?>
<?php endif; ?>
<?php else: ?>
<?php $continue = true; // no unique description provided - render default one ?>
<?php endif; ?>
<?php if ($continue): // if no unique description provided ?>
<?php echo $this->originalDescription() ?>
<?php endif; ?>
<?php endif; ?>
Notes
category()
method is used to check if specific category page is being rendered. Comparison is made by category ID.filters->are()
method is used to check for exact match of all applied filters.$continue
custom variable is introduced to keep track is custom description have been rendered or not. Later this variable is used to render default description if custom description have not been rendered.- default meta description logic uses
__()
function to translate text to store's language. $page
variable is used to check if first page of product list is being rendered.