4SEO is a modern, integrated Search Engine Optimization solution for Joomla.
It constantly analyzes your site to detect changes, identifies important pages, adds meta and structured data, optimizes for social sharing and builds your sitemap. It also mesures actual Google Core Web Vitals speed information.
4SEO also provides you with tools for every day SEO work: list of broken links, redirections, content replacement, robots.txt...
MoreK2 supports Google Structured Data (GSD) since version 2.10.x (in the item view). However it does so for the most basic content types of GSD: article, news article & blog post
In the K2 component's Settings you'll notice that 6 more content types are listed there for product, event, video, course, movie and recipe. However these additional content types require data to be output that are not standard in K2, e.g. the start and end dates for an event. Usually K2 integrators will create these as extra fields and display them to one or more K2 categories.
If you've done that step already, then extending K2's GSD output to support additional content types is not hard.
Here are the steps to do so for the "event" content type...
0. Upgrade to K2 v2.10.3 (dev) from https://getk2.org/downloads/?f=K2_Development_Release.zip - this is required to be able to get the raw URL from a "link" type extra field. This step will not be necessary once K2 v2.10.3 is officially released.
1. Create an override for item.php to apply our GSD code for event content types. Copy the file /components/com_k2/templates/default/item.php into /templates/YOUR_TEMPLATE/html/com_k2/events/ (create the additional folders after /templates/YOUR_TEMPLATE/html/). This will only override the item view. If you want to override the category listing as well (for templating reasons), just copy all the files in /components/com_k2/templates/default/ into /templates/YOUR_TEMPLATE/html/com_k2/events/. More info on overriding K2 templates can be found here: https://getk2.org/documentation/tutorials/templating-with-k2-and-the-concepts-of-sub-templates
2. Create a new K2 Extra Fields Group and call it "Events".
3. Create a K2 Category and also call it "Events". Make sure that the new "events" sub-template (created on step 1) as well as the "Events" extra fields group (created on step 2) are both selected.
4. Now create extra fields in K2 for each of the GSD data you wish to add. According to https://developers.google.com/search/docs/data-types/event the bare minimum for a GSD event type are "location" (object), "name" (we can use the K2 item's title here), "startDate" and optionally "endDate" and "offers" (object). The GSD properties "description" and "image" already come with default K2 GSD. For any object element referenced, you'll have to create an extra field for each of its properties. So for "location" and given that GSD guidelines reference this:
"location": { "@type": "Place", "name": "Snickerpark Stadium", "address": { "@type": "PostalAddress", "streetAddress": "100 West Snickerpark Dr", "addressLocality": "Snickertown", "postalCode": "19019", "addressRegion": "PA", "addressCountry": "US" } }
...you would need to add the following ("text" type) extra fields:
- Location Name (with extra field alias 'e_loc_name')
- Location Address (with extra field alias 'e_loc_addr')
- Location Town/City (with extra field alias 'e_loc_city')
- Location Postal Code (with extra field alias 'e_loc_pc')
- Location State/Province (with extra field alias 'e_loc_state')
- Location Country (with extra field alias 'e_loc_country')
Additionally, for the rest of the fields
- Start Date ("date" type extra field and alias 'e_start_date')
- End Date ("date" type extra field and alias 'e_end_date')
- Ticket Price ("text" type extra field and alias 'e_ticket_price')
- Ticket Purchase URL ("link" type extra field and alias 'e_ticket_link')
Make sure the extra field "alias" is inserted exactly as stated in each line above (but without the quotes). This step is important as we will fetch each extra field separately by using this alias.
6. You will now fetch each of these extra fields separately (as described here as well https://getk2.org/documentation/tips-a-tricks/display-single-extra-fields-anywhere-in-your-k2-content) and build your new GSD properties.
Your default K2 GSD look like this: https://jmp.sh/gmcOnu3 (or just do a view source on https://getk2.org/blog/k2-v2102-released-now-with-a-100-mobile-friendly-backend-user-interface).
We will change and extend these using the following PHP code added in your item.php override, right after the "defined('_JEXEC') or die;" part:
// Get current GSD $getItemGSD = $this->params->get('itemGoogleStructuredData'); // Search and extend/replace GSD $document = JFactory::getDocument(); foreach ($document->_script as $type => $script) { if ($type == 'application/ld+json' && $script == $getItemGSD) { // Remove current GSD from the unset($document->_script['application/ld+json']); $itemGSD = json_decode($getItemGSD); // Remove any default K2 GSD properties we don't want for the GSD "event" content type unset($itemGSD->articleBody); unset($itemGSD->articleSection); unset($itemGSD->author); unset($itemGSD->dateModified); unset($itemGSD->datePublished); unset($itemGSD->headline); unset($itemGSD->keywords); unset($itemGSD->publisher); // Append new GSD data as object properties to '$itemGSD' $itemGSD->location = new stdClass; $itemGSD->location->{'@type'} = 'Place'; $itemGSD->location->name = $this->item->extraFields->e_loc_name->value; $itemGSD->location->address = new stdClass; $itemGSD->location->address->{'@type'} = 'PostalAddress'; $itemGSD->location->address->streetAddress = $this->item->extraFields->e_loc_addr->value; $itemGSD->location->address->addressLocality = $this->item->extraFields->e_loc_city->value; $itemGSD->location->address->postalCode = $this->item->extraFields->e_loc_pc->value; $itemGSD->location->address->addressRegion = $this->item->extraFields->e_loc_state->value; $itemGSD->location->address->addressCountry = $this->item->extraFields->e_loc_state->value; $itemGSD->name = $this->item->title; $itemGSD->startDate = $this->item->extraFields->e_start_date->value; $itemGSD->endDate = $this->item->extraFields->e_end_date->value; $itemGSD->offers = new stdClass; $itemGSD->offers->{'@type'} = 'Offer'; $itemGSD->offers->price = $this->item->extraFields->e_ticket_price->value; $itemGSD->offers->priceCurrency = 'USD'; // Use EUR or other currency here based on your needs $itemGSD->offers->url = $this->item->extraFields->e_ticket_link->rawValue; // Re-insert GSD data with new additions $itemGSD = json_encode($itemGSD, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); $document->addScriptDeclaration($itemGSD, 'application/ld+json'); } }
7. Now start filling up the event data in the K2 items' extra fields of yours "Events" category.
In the end you'll see something like this on each event K2 item's page source: https://jmp.sh/qUvDXud (wherever you see "null" is where I just didn't add data for these demo purposes).
8. Finally test one of your K2 items on: https://search.google.com/structured-data/testing-tool - this tool will tell you if you need to change anything or if some property is missing.
And you're ready!
The code above will work on all Joomla versions that K2 supports by default.
More
SEO content analysis for K2 items powered by the fabulous Yoast SEO engine. Optimize your Joomla K2 pages based on keywords you provide. Check quickly how your page will look in search results using the Snippet preview that Route 66 provides!
Route 66 allows you to define your K2 SEF URLs using patterns and not be restricted by limited URL options! Patterns can include any URL friendly character along with some tokens for generating dynamic variables ( like the item's date for example ). Here are some examples of URL patterns you can use in Route 66:
It's that simple to add SEF URLs to your site with Route 66. Check out the documentation to see a list of all available tokens that Route 66 supports. Last but not least, Route 66 allows you to define different pattern per language when multiple languages are enabled to your site.
Unlike bulky SEF extensions that can store thousands of URLs to your site's database, Route 66 offers dynamic and high performance URL generation. In short, Route 66 will not impact your website’s performance.
If Route 66 detects any duplicate URLs it will redirect to the canonical URL automatically. Let's say for example that you have an item with ID 9 and alias "have-a-nice-day" . Let's also assume that you have set up Route 66 using the pattern story/{itemAlias}. The generated URL will be story/have-a-nice-day . URLs like the following which lead to the same item will get redirected to story/have-a-nice-day:
For optimal SEO, Route 66 automatically adds the canonical url to the page header. This is especially important when pages utilize query and/or anchor variables appended to the URL (story/have-a-nice-day?modal=welcome ).
Route 66 can optimize your site to achieve a high score at Google PageSpeed! Route 66 follows the Google PageSpeed recommendations to make your Joomla K2 site get ranked high by Google.
Route 66 now supports Facebook Instant Articles! It allows you to generate a feed of Facebook Instant Articles based on your site's K2 Items. You can also filter the feed items based on categories. Finally, Route 66 comes with built-in integration for Google Analytics and Google DFP!
Make it easier for Google and other search engines to discover your site content with XML sitemaps. Route 66 can generate those sitemaps for you! It allows you to filter the sitemap content based on categories. The sitemap can include entries from K2 Items and Menu items.
MoreA plugin for supporting K2 in sh404SEF.
Use the plugin to configure K2 URLs when using sh404SEF in a multitude of options.
Unlike the previous built-in implementation for sh404SEF, this new plugin provides new URL manipulation options and it has dual compatibility with K2 versions 2.7.0 or newer.
The plugin has been successfully tested with sh404SEF versions 4.x in Joomla 2.5 and Joomla 3.x.
Improve K2 SEO by giving custom names to your K2 items images! You can enter the desired filename for the item image in the corresponding field that Econa adds in K2 "Image" tab in the item edit form.
The result filename will be the text you entered plus an identification for the image size. If for example you enter the text "apples" to be used as the filename the result for the large image will be "apples_L.jpg" . Note that K2 converts all uploaded images in JPEG format and this cannot be changed by Econa.
In addition to custom image names, Econa makes the K2's image uploading experience even better! All image uploads are now performed using AJAX requests making things even faster.
Econa can optimize the images that users add to K2 items content! You can choose whether you wish to resize those images in the dimensions provided by the WYSIWYG editor or define multiple dimensions and enable HTML5 responsive images ( retina images are also supported ) !
When responsive images are enabled your site will serve automatically the most appropriate image size depending on the visitor's device saving user's bandwidth and thus making your site load faster! If you define an image size for retina displays, devices with retina pixel density will get served with that image automatically.
K2 now gets a great image editor! Econa allows you to perform basic image editing operations like cropping, rotating and flipping directly in the K2 item edit form.
Do you care about SEO? Are you tired of being penalized by Google for having a duplicate content?
With our plugin you will get real canonical links for your K2 articles/tags/categories. We've tried all other solutions, tried Joomla 3 native solution, and found out that they all had some issues, as reported on various forums around the web.
We care about SEO, so we decided to develop our own plugin, to have real K2 canonical links.
Don't worry anymore if you can reach a K2 article with links like:
www.example.com/article
www.example.com/category/article
www.example.com/tag1/article
www.example.com/tag2/article
All of them will have the same canonical link!
Same goes for tags like
www.example.com/tag1
www.example.com/category1/tag/tag1
www.example.com/category2/tag/tag1
or categories
www.example.com/category2
www.example.com/category1/content/category2
etc.
Even user views are supported!
Furthermore, it will detect if an article/tag/category has a direct link in the menu and use it as the canonical version, attention is payed so that the most appropriate link is chosen!
Works with Joomla 2.5 and 3.x!
Recent changes:
3.26 (2016/08/23)
* Encode canonical link parts, improvement for links with utf-8 characters
3.25 (2016/05/02)
+ One click updates using native Joomla interface
3.24 (2016/03/12)
+ Option to enable/disable redirection between slashed and non-slashed page
* K2: Do not redirect ChronoForms for K2
3.23 (2016/02/28)
* Potential infinite redirect loop for the homepage
3.22 (2016/02/27)
* Differentiate links with and without a trailing slash
+ Enable Chronoforms support in item view
3.21 (2016/02/10)
* Full PHP 7 support
* Canonical for tag with own menu would sometimes be incorrect
3.20 (2016/01/30)
+ Added support for 'latest' view
3.19 (2015/12/14)
+ Option to remove trailing slash from canonical links
+ Option to remove canonical link when on canonical page
* Don't execute the plugin if component option was overriden via POST
3.18 (2015/08/09)
* remove possible notice in error log (no negative influence otherwise)
3.17 (2015/08/03)
* make sure the plugin is activated only for html views, and not for json etc
3.16 (2015/07/31)
* fix compatility between date filtering in K2 tools module and permanent redirect
3.15 (2015/06/26)
+ Added full support with pagination for User view in K2
* Fixed a potential issue with redirection and query ignore parameter
3.14 (2015/06/19)
* do not redirect non-sef urls with raw output
3.13 (2015/06/16)
+ Added an option to ignore query in url's for permanent redirection
3.12 (2015/05/14)
+ Added support for itemllist view filtered by date using K2 Tools
3.11 (2015/05/07)
* Improved redirection mechanism
3.10 (2015/05/05)
* Improved compatibility with JotCache and System Language Filter plugin
3.9 (2015/03/26)
* Improved compatibility with Language filter system plugin
More
Get the most advanced glossary to define terms, generate nice and automatic tooltips, showing definition in your Joomla content. With SEO Glossary it's easy to define one or billions terms in your website. Now compatible with Joomla 2.5 and 3.x.
With SEO glossary you can create multilingual dictionary, glossary, glossary of abbreviations, and much more.
Video demo available here: http://www.joomunited.com/products/seo-glossary
- Display definition in jQuery tooltip, in dedicated page, in component view
- Create some inner links with semantic content automatically
- Glossary term is inserted your URL to enhance your website SEO (using joomla native URL optimization)
- 2 additional responsive themes available in the package
- Dedicated search engine and Joomla search plugin
- K2, Zoo (pages & blog), Redshop, Hikashop, Flexicontent compatible and all extension calling content plugin
- Ability to disable SEO Glossary in specific Joomla articles
- Ability to choose how many times your term will be linked to his definition per article
- Ability to show only tooltip definition, not links to glossary
- Add synonyms in tooltips
- Globally disable tooltips
- Disable glossary tooltips by: article categories, menus, Joomla components
- Xmap plugin, Jsitemap compatible, Kunena compatible
- Menu option to show one or all glossaries
- Create unlimited glossaries
- Add custom alphabets for each glossary (ie categories of definition)
- Visually customization available for tooltips (not necessary to change css style)
- The tooltip can be manage with a pickup color (no css used)
- HTML output in tooltips
- Frontend edition
- Search module with filters
- Import/Export tool: export as csv, import or update definitions and glossaries
- Definition module with display as list, intro and both with auto crop
- All element in the glossary view can be shown/hide with parameters (search display, number of terms, glossary list, pagination...)
- The component is translated in English, Dutch, Spanish, French, Sweden, German
- A definition can be linked with others definitions
- Everything is managed from the component (easy to use)
- Use the native joomla multilingual
- Cut your definition in tooltips with a "Read more..."
- Use the Joomla ACL to submit terms definitions from the frontend
- Follow/Nofollow SEO option
- Advanced features to use the non latin characters
- Share on social networks button
- Integration with Disqus (coments)
- Video support in tooltips
- Tested and compatible with Yootheme, Joomlart and rockettheme products