<title> builder for blog, author, and topic listing pages
There has been a lot of chatter regarding using reporting services like SEMRush and Moz which will give you site audits. Usually, these reports give back information such as errors and issues One of the major errors I've seen reported on a lot of HubSpot sites are the Duplication errors for things such as:
Duplicate content: This is usually caused by the /page/1 not being properly redirected from the start. You have to create three directs total to fix that. Another cause for duplicate content is that listing pages do not have the ability to have a self-referencing canonical (which is fixed with some quick HubL in the blog template header).
Duplicate Titles: Caused by all the paginated pages showing the same title.
Duplicate Meta Descriptions: Same cause as above
The first bullet, as mentioned, can be fixed with using URL mapping tool and HubL, the last two, however, we have zero control over. I know we can use JS to change the titles and meta's for the listing and Google's searching should be ok with checking those differences on the page. This can be tedious to do and a much better way would be to allow us to have a "Page Title Builder" in the SEO & Crawlers Tab. This can let us fi page titles and have them render server side rather than relying on JS to fix things and hoping they will be picked up during the next Google crawl.
I have created a mockup below for this (based on Yoast's SEO WP Plugin) to better explain a possible solution:
Also, I think it would be awesome to have Description fields added to the blog topic's so we can create custom Meta Descriptions based on those topics and not have to rely on just the default blog meta description or one that Google pulls automatically (which is usually the post excerpt of the most recent post for that page).
This issue remains one that we plan to fix, but since we don't currently have a clear timeline on the development I'm going to mark it as 'being reviewed'. I will post another update when we have more to share.
I've been chatting with AJ and a few other folks about this, and wanted to update this idea.
The quick answer is that we know that the inability to edit listing pages is a pain point and we're looking to solve for it long term. We plan on making any page editable in the CMS, but getting there is unfortunately non-trivial.
From my research I've only seen this picked up by 3rd party tools like Moz and Screamingfrog. @ravenousblue I'll shoot you an email to see what you're seeing in Google Search Console because my impression has been that this is annoying (clients see errors in other tools) but not actually strongly impacting SEO (Google understands these are listing pages from the rel canonicals).
I believe SEMrush now also correctly ignores listing pages for their duplicate content checks.
Thanks for your patience as we fix this the right way!
Re: builder for blog, author, and topic listing pages - changed to: In Planning
While this is still in the planning phase, I have a workaround for you that will allow you to swap out meta description for blog listing pages based on the type of listing page. To do this navigate to settings > website > blog and use the following as an outline for your meta description.
{% if blog_author %}
{{ blog_author.bio }}
{% elif topic == 'topic1' %}
This is a meta description for the topic "topic1" in the example blog
{% elif topic == 'topic2' %}
This is a meta description for the topic "topic2" in the example blog
{% else %}
Example blog meta description for page {{ current_page_num }}. This is a description of what the blog listing pages are.
{% endif %}
You can use the same logic in the title section. For example
Example blog - Page Number ({{ current_page_num }})
I agree that this is a very frustrating issue and one that is quite surprising that it is not resolved, yet. Please keep us posted about your development progress. Appreciated!
This issue remains one that we plan to fix, but since we don't currently have a clear timeline on the development I'm going to mark it as 'being reviewed'. I will post another update when we have more to share.
This is a much needed solution. And just like MOZ, SEMRUSH also flags listing page duplicates.
On the SEMrush tool, we see a list of pages which have a url slug .com/author & .com/all. So though it doesnt list the pagniated pages and system generated topic pages, it still list the system generated pages blog listing page for the author and all.
It's now August 2020 and still no solution to this issue. That's a very awesome mockup that @AJLaPorte_diagr came up with.
I tried using custom HubL language to change these descriptions but no merit, as blog_author pages are still considered "listing pages". I have the following code added to markup:
<!-- `is_listing_view` is a HubL variable in the developer info pane that checks if the page is a listing view such as blog listing page -->
{% if is_listing_view %}
<!-- Add Canonical to paginated pages, topics, authors, and main blog listing page -->
<link rel="canonical" href="{{canonical_url}}">
<!-- Nested IF statement. -->
{% if current_page_num > 1 %}
<script>
//Append page num to title so you don't have duplicate title tags
document.title += " | Page {{current_page_num}}";
// Replace Current Meta Description with new one that appends page num before it.
document.querySelector('meta[name="description"]').setAttribute("content","Page {{current_page_num}} - {{content.meta_description|escapejs}}");
</script>
{% endif %}
<!-- /Nested IF Statement -->
{% endif %}
<!-- /End listing view IF -->
<!-- `if blog_author` is a HubL variable in the developer info pane that checks if the page is a an author page such as author listing page -->
{% if blog_author %}
<script>
// Replace Current Meta Description with new one that appends page num before it.
document.querySelector('meta[name="description"]').setAttribute("content","{{content.meta_description|escapejs}} | {{ blog_author.display_name }}");
</script>
{% endif %}
<!-- /End listing view IF -->
@AJLaPorte_diagr Do you think there may be a custom fix for this?