Search Engine Optimization https://www.zengenuity.com/ en The Week in Drupal: May 11, 2012 https://www.zengenuity.com/blog/2012-05/week-drupal-may-11-2012 <span class="field field--name-title field--type-string field--label-hidden">The Week in Drupal: May 11, 2012</span> <div class="paragraph html"> <div class="container"> <p>A look back at interesting modules, articles and other <a href="https://drupal.org">Drupal</a> news of the last week: May 4 - 11, 2012.  </p> <p><a href="https://www.flickr.com/photos/nidhug/4905457150/" title="Awesomesauce by nidhug, on Flickr"><img src="https://farm5.staticflickr.com/4081/4905457150_c005cd4c2f.jpg" alt="Awesomesauce" width="500" height="348" /></a></p> <h2>Great Posts and Tutorials</h2> <p><strong><a href="https://fourkitchens.com/blog/2012/05/04/migrating-old-html-files-drupal" title="Four Kitchens: Migrating old HTML files into Drupal">Four Kitchens: Migrating old HTML files into Drupal</a></strong></p> <p><strong><a href="https://commerceguys.com/blog/commerce-module-tuesday-commerce-extra-panes" title="Commerce Module Tuesday: Commerce extra panes">Commerce Module Tuesday: Commerce extra panes</a></strong></p> <p><strong><a href="https://larsolesen.dk/content/making-media-gallery-work-media-2x" title="Making Media Gallery work with Media 2.x">Making Media Gallery work with Media 2.x</a></strong></p> <p><strong><a href="https://thereisamoduleforthat.com/content/mediatheque-drupal-media-organizer" title="There is a module for that!: Mediatheque, a Drupal media organizer">There is a module for that!: Mediatheque, a Drupal media organizer</a></strong></p> <p><strong><a href="https://www.agileapproach.com/blog-entry/look-why-big-sites-run-drupal" title="A Look at Georgia.gov and “Why Big Sites Run Drupal”">A Look at Georgia.gov and “Why Big Sites Run Drupal”</a></strong></p> <p><strong><a href="https://www.digett.com/blog/05/09/2012/getting-meta-tags-views-drupal-7" title="Getting Meta Tags on Views in Drupal 7">Getting Meta Tags on Views in Drupal 7</a></strong></p> <p><strong><a href="https://www.drupal4hu.com/node/324" title="Károly Négyesi: Progress on Entity Field Query Views Backend module">Károly Négyesi: Progress on Entity Field Query Views Backend module</a></strong></p> <p><strong><a href="https://codekarate.com/blog/drupal-6-override-views-pager-theme-function" title="Drupal 6 Override views pager theme function">Drupal 6 Override views pager theme function</a></strong></p> <p><strong><a href="https://dev.nodeone.se/en/features-pipexplosion-a-great-addition" title="NodeOne: Features Pipexplosion - a great addition">NodeOne: Features Pipexplosion - a great addition</a></strong></p> <p><strong><a href="https://www.agileapproach.com/blog-entry/best-practices-reporting-bugs" title="Best Practices for Reporting Bugs">Best Practices for Reporting Bugs</a></strong></p> <h2>Interesting New Modules</h2> <p><strong><a href="https://drupal.org/project/commerce_tickets" title="Commerce Tickets">Commerce Tickets</a></strong> - Allows the site admin to create a ticket purchase system.</p> <p><strong><a href="https://drupal.org/sandbox/jrockowitz/1567660" title="User Access Control">User Access Control</a></strong> - Allows users to grant other users access to update their content.</p> <p><strong><a href="https://drupal.org/sandbox/crantok/1563476" title="User defined permissions">User defined permissions</a></strong> - quickly define new permissions through the UI.</p> <p><strong><a href="https://drupal.org/sandbox/AlexArnaud/1570572" title="OPAC">OPAC</a></strong> - Allows libraries to make Drupal their public catalogue.</p> <p><strong><a href="https://drupal.org/sandbox/rurri/1563790" title="Simplenews SMS">Simplenews SMS</a></strong> - Adds SMS Functionality to Simplenews using Twilio.</p> <p><strong><a href="https://drupal.org/sandbox/Hipfox/1562236" title="WFCC">WFCC</a></strong> - Copy <a href="https://drupal.org/project/webform">Webform</a> components from one form to another.</p> <p><strong><a href="https://drupal.org/project/og_extras" title="OG Extras">OG Extras</a></strong> - Ceated because the default views and blocks that come with <a href="https://drupal.org/project/og">Organic Groups</a> only work in <a href="https://drupal.org/project/panels">Panels</a>. It restores some of the functionality of the D6 version of Organic Groups.</p> <p><strong><a href="https://drupal.org/sandbox/dellintosh/1571260" title="AMQP">AMQP</a></strong> - Provides methods for publishing and consuming messages from an AMQP message queue (https://amqp.org/) compatible server, such as RabbitMQ (https://rabbitmq.org).</p> </div> </div> <span>Wayne Eaker</span>May 11, 2012 <div class="tags"> <div class="container"> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal" hreflang="en">Drupal</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal-commerce" hreflang="en">Drupal Commerce</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/features-module" hreflang="en">Features module</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/media-module" hreflang="en">Media module</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/migration" hreflang="en">Migration</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/organic-groups-module" hreflang="en">Organic Groups module</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/search-engine-optimization" hreflang="en">Search Engine Optimization</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/voip" hreflang="en">VoIP</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/webform-module" hreflang="en">Webform module</a></span> </div> </div> Fri, 11 May 2012 17:14:57 +0000 Wayne Eaker 176 at https://www.zengenuity.com The Week in Drupal: March 9, 2012 https://www.zengenuity.com/blog/2012-03/week-drupal-march-9-2012 <span class="field field--name-title field--type-string field--label-hidden">The Week in Drupal: March 9, 2012</span> <div class="paragraph html"> <div class="container"> <p>A look back at interesting modules, articles and other <a href="https://drupal.org">Drupal</a> news of March 2 - 9, 2012.</p> <p><a href="https://www.flickr.com/photos/stevewall/524803118/" title="drops of spring by Steve took it, on Flickr"><img src="https://farm1.staticflickr.com/224/524803118_99be07a6d1.jpg" alt="drops of spring" width="500" height="358" /></a></p> <h2>Drupal News</h2> <p><strong><a href="https://heyrocker.com/node/238" title="Configuration management system now in place for Drupal 8">Configuration management system now in place for Drupal 8</a></strong></p> <p><strong><a href="https://buytaert.net/layouts-for-drupal-8" title="Dries Buytaert: Layouts for Drupal 8">Dries Buytaert: Layouts for Drupal 8</a></strong></p> <p><strong><span><strong><a href="https://krisandju.e-webindustries.com/blog/drupal-8-blocks-layouts-everywhere" title="Kris Vanderwater: Drupal 8: Blocks & Layouts Everywhere">Kris Vanderwater: Drupal 8: Blocks & Layouts Everywhere</a></strong></span></strong></p> <p><strong><a href="https://denver2012.drupal.org/news/birds-feather-bof-scheduler-now-available" title="Drupalcon: Birds of a Feather (BoF) Scheduler Now Available!">Drupalcon: Birds of a Feather (BoF) Scheduler Now Available!</a></strong></p> <h2>Great Posts and Tutorials</h2> <p><strong><a href="https://www.acquia.com/blog/when-and-how-caching-can-save-your-drupal-site" title="When and how caching can save your Drupal site">When and how caching can save your Drupal site</a></strong></p> <p><strong><span><strong><a href="https://www.metaltoad.com/blog/handling-long-running-background-tasks-drupal-7" title="Handling long-running background tasks in Drupal 7">Handling long-running background tasks in Drupal 7</a></strong></span></strong></p> <p><strong><a href="https://www.midwesternmac.com/blogs/jeff-geerling/creating-image-effect-place" title="Creating an Image Effect to put a play button on Video thumbnails">Creating an Image Effect to put a play button on Video thumbnails</a></strong></p> <p><strong><a href="https://www.lullabot.com/articles/module-monday-rabbit-hole?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+lullabot%2Fplanet-feed+%28Lullabot.com+Drupal+News%29" title="Module Monday: Rabbit Hole">Module Monday: Rabbit Hole</a></strong></p> <p><strong><a href="https://www.angrydonuts.com/the-book-of-druplicon" title="Earl Miles: The Book of Druplicon">Earl Miles: The Book of Druplicon</a></strong></p> <h2>Interesting New Modules</h2> <p><strong><a href="https://drupal.org/sandbox/jlyon/1472346" title="Stripe Webform">Stripe Webform</a></strong> - Integrates the Stripe and Webform modules so you can accept payments during webform submissions.</p> <p><strong><a href="https://drupal.org/project/espn" title="ESPN API Integration">ESPN API Integration</a></strong> - A rich integration with ESPN's public AP!s, providing sports headlines, scores, athlete profiles, and other information.</p> <p><strong><a href="https://drupal.org/sandbox/jthorson/1469928" title="Galleria Commerce">Galleria Commerce</a></strong> - provides a Galleria Node Reference gallery with <a href="https://drupal.org/project/commerce">Drupal Commerce</a> integration, so that users can add gallery images to their shopping cart.</p> <p><strong><a href="https://drupal.org/project/commerce_coupon_batch" title="Commerce coupon batch">Commerce coupon batch</a></strong> - Create hundreds of coupon codes at once.</p> <p><strong><a href="https://drupal.org/sandbox/dman/1469552" title="REL links">REL links</a></strong> - Inserts rel links pointing up, down and sideways to give semantic scrapers clues about the site structure.</p> <p><strong><a href="https://drupal.org/sandbox/dman/1473744" title="RDFviz">RDFviz</a></strong> - Renders the RDFa that your Drupal7 site is outputting in a graphical form.</p> <p><strong><a href="https://drupal.org/sandbox/AndreasRadloff/1474818" title="Apache Solr Field Search">Apache Solr Field Search</a></strong> - Extends the <a href="https://drupal.org/project/apachesolr">Apache Solr module</a>. It lets users limit their search to a specific field instead of searching the full node text.</p> <p><strong><span><strong><a href="https://drupal.org/project/seostats" title="SEO Stats">SEO Stats</a></strong> - Search-related statistics including Google PageRank for your site, in your Drupal site.</span></strong></p> <p><strong><span><strong><a href="https://drupal.org/project/textintegerfield" title="Text & Integer Field">Text & Integer Field</a></strong> - A compound field with a text field and paired integer field.</span></strong></p> <p><strong><span><strong><a href="https://drupal.org/project/views_block_area" title="Views block area">Views block area</a></strong> - Put blocks in <a href="https://drupal.org/project/views">Views</a> headers and footers.</span></strong></p> <p><strong><span><strong><a href="https://drupal.org/sandbox/david.fzs/1467698" title="Views Fields Compare Filter">Views Fields Compare Filter</a></strong> - Adds an exposed filter that allows the user to choose a comparison operation between 2 of the fields selected for the view.</span></strong></p> <p><strong><a href="https://drupal.org/project/block_views" title="Block Views Visibility">Block Views Visibility</a></strong> - Enables you to specify block visibility based on views pages.</p> <p><strong><a href="https://drupal.org/project/pfff" title="Profile Fields Force Filling">Profile Fields Force Filling</a></strong> - Force users to fill any required profile fields at login.</p> <p><strong><a href="https://drupal.org/sandbox/sam/1466118" title="Image Style Quality">Image Style Quality</a></strong> - Set an image quality per image style preset.</p> </div> </div> <span>Wayne Eaker</span>March 9, 2012 <div class="tags"> <div class="container"> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal" hreflang="en">Drupal</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal-8" hreflang="en">Drupal 8</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal-commerce" hreflang="en">Drupal Commerce</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupalcon-denver" hreflang="en">DrupalCon Denver</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/fieldapi" hreflang="en">FieldAPI</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/high-performance" hreflang="en">High Performance</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/image-galleries" hreflang="en">Image Galleries</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/search" hreflang="en">Search</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/search-engine-optimization" hreflang="en">Search Engine Optimization</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/solr" hreflang="en">Solr</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/views-module" hreflang="en">Views module</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/webform-module" hreflang="en">Webform module</a></span> </div> </div> Fri, 09 Mar 2012 15:41:59 +0000 Wayne Eaker 169 at https://www.zengenuity.com The Week in Drupal: December 3, 2010 https://www.zengenuity.com/blog/2010-12/week-drupal-december-3-2010 <span class="field field--name-title field--type-string field--label-hidden">The Week in Drupal: December 3, 2010</span> <div class="paragraph html"> <div class="container"> <p>A look at interesting new modules, articles and other <a href="https://drupal.org">Drupal</a> news of this week.</p> <p><a href="https://www.flickr.com/photos/audreyjm529/2045022175/" title="Frozen Drops On A Daisy by audreyjm529, on Flickr"><img src="https://farm3.static.flickr.com/2210/2045022175_ad087f5f60.jpg" alt="Frozen Drops On A Daisy" width="500" height="375" /></a></p> <h2>Drupal News</h2> <p><strong><a href="https://drupal.org/node/986816">Drupal 7 Release Candidate 1 (RC1) is Out!</a></strong></p> <h2>Great Posts and Tutorials This Week</h2> <p><strong><a href="https://mobiledrupal.com/content/persist-your-session-accross-desktop-and-mobile-site">How to Share Your User Sessions Between Desktop and Mobile Versions of Your Site</a></strong> - Useful tip. Also could be helpful for a bare domain and it's "www.", <a href="https://172.28.128.3/blog/a/201011/fixing-duplicate-content-seo-problems-drupal">though you should never let both of those be accessible. </a></p> <p><strong><a href="https://www.leveltendesign.com/blog/chris/creating-dynamic-custom-pages-views-panels-arguments">Creating Dynamic Custom Pages with Views, Panels and Arguments</a></strong> - Nothing new here, but it's a good screencast for those who don't know how to do this.</p> <p><strong><a href="https://krimson.be/articles/2010/11/30/build-simple-project-tracker-drupal">Build a Simple Project Tracker with Drupal</a></strong></p> <p><strong><a href="https://www.drupalconnect.com/blog/jwhitener/google-maps-and-user-activity-integration">How to Create a Live-Updating User Activity Map</a></strong> - Like the one on <a href="https://www.zappos.com/map/">Zappos.com</a>.</p> <h2>Interesting New Modules</h2> <p><strong><a href="https://drupal.org/project/webform_rules">Webform Rules</a></strong> - <a href="https://drupal.org/project/rules">Rules module</a> integration for the <a href="https://drupal.org/project/webform">Webform module</a>.</p> <p><strong><a href="https://drupal.org/project/context_keywords">Context Keywords</a></strong> - The keywords used to find your site (on Google, Bing, etc.) become available to the <a href="https://drupal.org/project/context">Context module</a>. Wow! Some crazy stuff you could do with that. </p> <p><strong><a href="https://drupal.org/project/imagecache_smushit">Imagecache Smush.it</a></strong> - Optimize images automatically with <a href="https://www.smushit.com/ysmush.it/">Yahoo's Smush.it</a> service and <a href="https://drupal.org/project/imagecache">Imagecache</a>. </p> <p><strong><a href="https://drupal.org/project/squeeze">Squeeze Page</a></strong> - Force users to fill out a form before they can get to a page or download a file.</p> <p><strong><a href="https://drupal.org/project/feeds_comment_processor">Feeds Comment Processor</a></strong> - Import comments with the <a href="https://drupal.org/project/feeds">Feeds module</a>.</p> <p><strong><a href="https://drupal.org/project/salesforce_feeds">Salesforce Feeds</a></strong> - Import Salesforce.com data with the Feeds module.</p> <p><strong><a href="https://drupal.org/project/form_service">Form Service</a></strong> and <strong><a href="https://drupal.org/project/form_client">Form Client</a></strong> - Host your forms on a remote site. I talked to <a href="https://vkareh.net/">Victor</a> (module author) about these the other night after the <a href="https://groups.drupal.org/ann-arbor">Ann Arbor Drupal Users Group</a>. It sounds pretty cool. He's using it to move forms and data in and out of Oracle.</p> <p><strong><a href="https://drupal.org/project/keyword_seo">Keyword SEO</a></strong> - It's an automated <a href="https://en.wikipedia.org/wiki/Article_spinning">article spinning</a> module. </p> </div> </div> <span>Wayne Eaker</span>December 3, 2010 <div class="tags"> <div class="container"> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/context-module" hreflang="en">Context module</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal" hreflang="en">Drupal</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal-7" hreflang="en">Drupal 7</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/feeds-module" hreflang="en">Feeds module</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/imagecache-module" hreflang="en">Imagecache module</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/mobile" hreflang="en">Mobile</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/search-engine-optimization" hreflang="en">Search Engine Optimization</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/webform-module" hreflang="en">Webform module</a></span> </div> </div> Fri, 03 Dec 2010 14:33:12 +0000 Wayne Eaker 121 at https://www.zengenuity.com Widespread SEO Problems with Drupal’s Taxonomy Module https://www.zengenuity.com/blog/2010-11/widespread-seo-problems-drupals-taxonomy-module <span class="field field--name-title field--type-string field--label-hidden">Widespread SEO Problems with Drupal’s Taxonomy Module</span> <div class="paragraph html"> <div class="container"> <p>This week I’ve been working on fixing some <a href="https://172.28.128.3/blog/a/201011/seo-problem-drupals-site-map-module-how-fix-it">duplicate content problems on our site coming from the Site Map module</a>. In doing so, it’s become obvious that the design of <a href="https://drupal.org">Drupal’s</a> taxonomy module makes it very easy to accidentally end up with Google indexing multiple copies of your term pages. This SEO problem isn’t just happening to Drupal rookies. Even top Drupal firms are screwing this up. Take a look at some examples from prominent Drupal company websites:</p> <p><strong>[Update:</strong> Most of these have now been fixed, so the results now are lower than I state. But they originally were correct.<strong>]</strong></p> <p><strong><a href="https://www.google.com/search?q=site%3Ahttp%3A%2F%2Fwww.lullabot.com%2Ftaxonomy%2Fterm%2F4">Lullabot’s Podcast Taxonomy Page</a></strong><br />There are 84 Google-indexed pages for only 10 pager pages for this term. PLUS, there are <a href="https://www.google.com/search?q=site:http%3A%2F%2Facquia.com%2Fcategory%2Ftags%2Facquia-drupal-planet">an additional 20 indexed pages at the aliased URL for this page</a>.</p> <p><strong><a href="https://www.google.com/search?q=site%3Ahttp%3A%2F%2Fdevelopmentseed.org%2Ftaxonomy%2Fterm%2F42">Development Seed’s “Drupal” Taxonomy Page</a></strong><br />60 indexed pages for 31 pager pages, <a href="https://www.google.com/search?q=site:http%3A%2F%2Fdevelopmentseed.org%2Ftags%2Fdrupal">plus 201 indexed pages for the aliased address</a>.</p> <p><strong><a href="https://www.google.com/search?q=site:https://www.leveltendesign.com/taxonomy/term/147">LevelTen’s SEO Taxonomy Page</a></strong><br />19 indexed pages for 10 pager pages, <a href="https://www.google.com/search?q=site:https://www.leveltendesign.com/category/tags/seo">plus 10 indexed pages for the alias address</a>.</p> <p><strong><a href="https://www.google.com/search?q=site%3Ahttp%3A%2F%2Facquia.com%2Ftaxonomy%2Fterm%2F422">Acquia's Drupal Planet Taxonomy Page</a></strong><br />55 indexed pages for 26 pager pages, <a href="https://www.google.com/search?q=site:http%3A%2F%2Facquia.com%2Fcategory%2Ftags%2Facquia-drupal-planet">plus 37 indexed pages indexed for the alias address</a>. </p> <p>It’s clear that Google is routinely picking up duplicates of taxonomy pages for Drupal sites. Why? Examining the results above, I see a few different reasons:</p> <ol><li>Some of these sites are not using the <a href="https://drupal.org/project/globalredirect">Global Redirect module</a>, which means that the internal taxonomy page path “taxonomy/term/##” returns the exact same page as the aliased address. It doesn’t redirect. It just shows the same page. That in itself wouldn’t be a problem if nobody ever linked to the internal path. (because then Google would never pick it up) But, it’s clear that linking mistakes have been made at some point, or some module has exposed the internal links to Google by using them on a page. Now they are in the Google index and they won’t come out on their own.</li><li>The term depth argument for the taxonomy page (and taxonomy_term view) allows identical pages to be indexed at both at “taxonomy/term/##” and “taxonomy/term/0”, and potentially also at “taxonomy/term/##/all”. (The “/all” link may result in different content if you have hierarchical tags. But, in most cases, it’s the same.) The Global Redirect module can take care of the “/0” for you. Handling the “/all” will take some more effort. (see the solution below) </li><li>The taxonomy pages actually allow anything to be put in the depth argument position.  This leads to a problem where if you have an accidental relative link in a node on the page, you will create an entirely new set of indexed pages. For example, on page two of the Development Seed results above are URLs that look like this:<br /><br /> <strong><span>https://developmentseed.org/taxonomy/term/42/www.mapbox.com?page=32</span></strong><br /><br />At some point in the past, there was probably a link that didn’t have an https:// at the beginning, so it was treated like a relative link. Google followed the link, and a whole new series of identical indexed pages was created by the following the pager links on these pages. </li></ol> <h2>Fixing This Problem</h2> <p>There’s a few steps you can take on your Drupal site if you want to prevent these duplicate term pages from getting indexed or if you want to tell Google to remove already indexed pages from their results.</p> <ol><li>If you haven’t, <a href="https://172.28.128.3/blog/a/201011/fixing-duplicate-content-seo-problems-drupal">fix your .htaccess to redirect to a single domain as described in this previous post</a>.</li><li>Install the <a href="https://drupal.org/project/globalredirect">Global Redirect module</a>. This will redirect the taxonomy page's internal path URL with and without the “/0” to your user-friendly alias URL. </li><li>To fix the issue with arbitrary text being appended to the URL, you can add a Rewrite rule to your .htaccess to redirect URLs with additional arguments to the main URL. The one I have put on this site is:<br /><br /><span><strong><span>RewriteRule ^taxonomy/term/([0-9]+)/(.*)$  /taxonomy/term/$1 [NC,L,QSA,R=301] </span></strong></span><br /><br />This rule won’t work for sites that need to use the “/all” address, but I’m sure it can be rewritten to support that. I’m not a RewriteRule expert, though, so if someone has an alternative, please post it in the comments and I’ll update the post.</li><li>If you have hierarchical tags, and you want to make the default taxonomy page function like the “/all” page, you can enable the taxonomy_term view, remove the Term Depth argument, and then set your own depth on the Term ID argument. </li></ol> <h2>Views with Pagers - Should You Index All the Pages?</h2> <p>The last thing you might consider doing is telling Google not to index pager subpages beyond the first one. This is a preference issue. Personally, I think it’s better to have Google focus its results on a single page for each term. In my opinion, it’s better for SEO and better for users who click on result links to go to the first page for a term rather than somewhere in the middle. But, I can understand why some people might want all the pages indexed to make sure nothing is missed.</p> <p>If you do want to remove your pager pages from the Google index, you need to add a NOINDEX,FOLLOW meta tag to all the pager pages, except for the first one. There are two ways you can do this:</p> <ol><li>Change the setting for this in the <a href="https://drupal.org/project/nodewords">Nodewords module</a> - <strong>DO NOT DO THIS</strong>! While there is a configuration option designed for this purpose in Nodewords, it’s got a major bug (<a href="https://drupal.org/node/835172">https://drupal.org/node/835172</a>) in the stable release. Do not mess with this option, or you’ll likely end up getting NOINDEX on the exact pages you want Google to index. The thing is coded backwards or something. This issue's supposedly fixed in the -dev version if you want to try that.</li><li><a href="https://www.seo-expert-blog.com/blog/avoiding-duplicate-title-tags-on-pager-pages-in-drupal">Follow the instructions on this page to modify your theme page template to add the required meta tag to pager pages.</a> This isn’t the best long-term option, especially if you’re using a standard template, since you’ll lose this change in an upgrade. But, until Nodewords is fixed, it’s the best way to go. </li></ol> <h2>Conclusion</h2> <p>I’ve implemented all of the techniques listed above on this site, and now we have a single indexable page for each taxonomy term. All the other variations <a href="https://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=93633">301 redirect</a> to the user-friendly aliased URL. Hopefully, this will allow us to concentrate as much page rank as possible on those pages for those terms. I recommend that everyone who uses the Taxonomy module on their Drupal website and is concerned about SEO take a look at how your site is being indexed. These fixes are pretty easy. But, it's clear (and surprising) that hardly anyone in the Drupal community has noticed this issue. I'm adding these items to my pre-launch checklist for all future websites. </p> </div> </div> <span>Wayne Eaker</span>November 17, 2010 <div class="tags"> <div class="container"> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal" hreflang="en">Drupal</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal-planet" hreflang="en">Drupal Planet</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/search-engine-optimization" hreflang="en">Search Engine Optimization</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/taxonomy-module" hreflang="en">Taxonomy module</a></span> </div> </div> Wed, 17 Nov 2010 16:41:22 +0000 Wayne Eaker 117 at https://www.zengenuity.com An SEO Problem with Drupal's Site Map Module & How to Fix It https://www.zengenuity.com/blog/2010-11/seo-problem-drupals-site-map-module-how-fix-it <span class="field field--name-title field--type-string field--label-hidden">An SEO Problem with Drupal's Site Map Module & How to Fix It</span> <div class="paragraph html"> <div class="container"> <p>Having recently rebuilt the Zengenuity website, it just was this week that I finally got around to setting it up on our SEOmoz account. After the initial site crawl, I was surprised to discover this:</p> <p><img src="https://www.zengenuity.com/sites/default/files/migrated/errors.png" alt="Duplicate Page Title Erros" width="163" height="81" /></p> <p>Duplicate content in <a href="https://drupal.org">Drupal</a> is often a problem. The URL alias system causes content to show up at multiple URLs by default. <a href="https://zengenuity.com/blog/a/201011/fixing-duplicate-content-seo-problems-drupal">I’ve posted about this problem (and it’s solutions) before</a>. But, I thought we doing everything right, so I was surprised to see so many duplicate content errors.</p> <h2>The Problem: The Site Map Module’s Default Settings</h2> <p>After chasing down the issue, I found that the <a href="https://drupal.org/project/site_map" title="Site Map module">Site Map module</a> was the culprit. Site Map creates a simple, human-readable list of your website content using your menus items and taxonomy terms. It’s a good way to ensure that both real users and search engines know about all the content on your site. However, the default settings for the taxonomy part of the module can cause a duplicate content to show up. Here’s how:</p> <p>Drupal has a built in page for each taxonomy term on your site. The URL for this page looks something like this: </p> <p><span><strong><span>https://zengenuity.com/taxonomy/term/8</span></strong></span></p> <p>If you have installed and configured the <a href="https://drupal.org/project/pathauto" title="Pathauto Module">Pathauto module</a>, this URL will probably look more user friendly. Ours looks like this: </p> <p><span><strong>https://zengenuity.com/blog/tags/panels-module</strong></span></p> <p>Theses aliases work great for normal taxonomy page links, like the ones that appear at the bottom of our blog posts. However, the aliases don't work with Site Map. Instead of using the friendly URLs by default, it appends “/all” to the original URLs. So, all the taxonomy links look like this:</p> <p><span><strong>https://zengenuity.com/taxonomy/term/8/all</strong></span></p> <p>The configuration option that controls this is here:<br /><img src="https://www.zengenuity.com/sites/default/files/migrated/site_map_seo_1.png" alt="Site Map Taxonomy Settings" width="550" height="186" /> </p> <p>The reason "all" is the default is that websites with hierarchal taxonomy structures will likely want to display all content tagged with a term or any of its children. That’s what the “/all” option does. However, most sites, including this one, do not use hierarchical tags. So, this option has no effect other than to create duplicate content. When Google and other search engines index the site map page and see these "/all" links, they will index them separately from your friendly taxonomy links, and you may end up getting penalized for the content duplication.</p> <h2>The Solution</h2> <p>You should change the Site Map taxonomy setting setting to “-1” instead of “all”. <br /><img src="https://www.zengenuity.com/sites/default/files/migrated/site_map_seo_2.png" alt="Site Map Taxonomy Settings" width="550" height="186" /> </p> <p>Once this is done, all the links in your Site Map page will change to their Pathauto-generated values. For sites with a flat taxonomy, there is no downside to doing this. For sites that do have hierarchical taxonomies, you can replace the standard Drupal taxonomy pages with the taxonomy_term view that comes with Views. Once you do that, you can remove the depth argument and manage the depth you want to display with the term argument.</p> <h2>Conclusion</h2> <p>Over 30,000 sites currently use the Site Map module. I’m betting that many of them have never noticed this issue before, since as site builders we rarely actually look at the site map. Luckily, this problem is pretty easy to fix, once you know it’s there. It’s just one more thing to add to your pre-launch checklist. </p> </div> </div> <span>Wayne Eaker</span>November 16, 2010 <div class="tags"> <div class="container"> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal" hreflang="en">Drupal</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal-planet" hreflang="en">Drupal Planet</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/search-engine-optimization" hreflang="en">Search Engine Optimization</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/seo" hreflang="en">SEO</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/site-map-module" hreflang="en">Site Map module</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/taxonomy-module" hreflang="en">Taxonomy module</a></span> </div> </div> Tue, 16 Nov 2010 15:05:26 +0000 Wayne Eaker 116 at https://www.zengenuity.com Fixing Duplicate Content SEO Problems in Drupal https://www.zengenuity.com/blog/2010-11/fixing-duplicate-content-seo-problems-drupal <span class="field field--name-title field--type-string field--label-hidden">Fixing Duplicate Content SEO Problems in Drupal</span> <div class="paragraph html"> <div class="container"> <p>Having duplicate content is a major problem for <a href="https://172.28.128.3/services/seo-search-engine-optimization" title="Michigan Search Engine Optimization">search engine optimization</a> (<a href="https://172.28.128.3/services/seo-search-engine-optimization" title="Michigan SEO">SEO</a>). To put it simply, by having multiple copies of the same content online, you’re competing against yourself for search result rankings. And <a href="https://www.google.com/support/webmasters/bin/answer.py?answer=66359">Google has also been explicit that duplicate content on your site may result in lower search ranking</a>. Avoiding this penalty is important for maximizing your site's search rankings, however, Drupal's default configuration can often lead you to unknowingly create duplicate content. Read on to find out how to fix this issue.</p> <p></p> <h2>The Problem: Drupal's URL Path System Causes Duplicate Content</h2> <p>In general, it’s pretty easy to avoid showing content more than one place, but <a href="https://drupal.org">Drupal</a> users need to pay special attention to the way URL paths are managed. Let’s take a made-up example: a page called "My Puppies" on the site https://www.example.com. We'll assume that the page’s internal Drupal path is “node/10”, and we’ve given it a friendly path alias of “my-puppies”. With the default configuration of Drupal, this page will now visible at ALL of the following URLs:</p> <table><tbody><tr><td>https://www.example.com/node/10<br />https://www.example.com/node/10/<br />https://www.example.com/my-puppies<br />https://www.example.com/my-puppies/<br />https://www.example.com/My-Puppies<br />https://www.example.com/My-Puppies/</td><td>https://example.com/node/10<br />https://example.com/node/10/<br />https://example.com/my-puppies<br />https://example.com/my-puppies/<br />https://example.com/My-Puppies<br />https://example.com/My-Puppies/</td></tr></tbody></table> <p>That’s <span>TWELVE</span> different pages with exactly the same content, all from only one node. And it could be even more, since any variation in capitalization ("/mY-pUppIES", "/My-puppiES", etc.) will also load this page. Luckily, this problem is relatively easy to fix by doing the following two things.</p> <h2>Step One: Edit Drupal's .htaccess file to redirect all users to a single domain.</h2> <p>The .htaccess file that comes with Drupal is located at the top level of the website folder tree. (with index.php and update.php) In this file, there is a disabled section of options that looks like this:</p> <pre><pre class=" php;'"> # If your site can be accessed both with and without the 'www.' prefix, you # can use one of the following settings to redirect users to your preferred # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option: # # To redirect all users to access the site WITH the 'www.' prefix, # (https://example.com/... will be redirected to https://www.example.com/...) # adapt and uncomment the following: # RewriteCond %{HTTP_HOST} ^example\.com$ [NC] # RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] # # To redirect all users to access the site WITHOUT the 'www.' prefix, # (https://www.example.com/... will be redirected to https://example.com/...) # uncomment and adapt the following: # RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] # RewriteRule ^(.*)$ https://example.com/$1 [L,R=301] </pre></pre> <p>Pick one of the domain options by deleting the # in front of the two associated lines, and don't forget to actually put your own domain name in there. So, on this website we use:</p> <pre><pre class=" php;'"> # RewriteCond %{HTTP_HOST} ^www\.zengenuity\.com$ [NC] # RewriteRule ^(.*)$ https://zengenuity.com/$1 [L,R=301] </pre></pre> <p>You have now eliminated half of the duplicate URLs in the list above.</p> <h2>Step Two: Install and Enable the Global Redirect Module</h2> <p>The <a href="https://drupal.org/project/globalredirect">Global Redirect module</a> does three things for you. First, it will automatically remove any slash at the end of a URL. Second, it will redirect any URL that has different capitalization to the URL address that you actually selected. So, https://www.example.com/My-Puppies will automatically redirect to https://www.example.com/my-puppies. Finally, Global Redirect will ensure that anyone accessing the original internal Drupal path (https://www.example.com/node/10) gets redirected to the path alias that you created.</p> <h2>Conclusion</h2> <p>After editing .htaccess and enabling Global Redirect, you will be left with a single URL for this content:</p> <p>https://www.example.com/my-puppies</p> <p>Every other variation of the URL will be redirected to this address with search engine friendly <a href="https://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=93633">301 redirects</a>. By following these guidelines, you will eliminate the duplicate content that is generated by the Drupal system itself and take a big step towards maximizing the search engine ranking of your site content. </p> </div> </div> <span>Wayne Eaker</span>November 15, 2010 <div class="tags"> <div class="container"> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal" hreflang="en">Drupal</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/drupal-planet" hreflang="en">Drupal Planet</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/duplicate-content" hreflang="en">Duplicate Content</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/global-redirect-module" hreflang="en">Global Redirect module</a></span> <span class="tag"><a href="https://www.zengenuity.com/blog/tags/search-engine-optimization" hreflang="en">Search Engine Optimization</a></span> </div> </div> Mon, 15 Nov 2010 15:50:30 +0000 Wayne Eaker 115 at https://www.zengenuity.com