A Guide to Drupal SEO
Drupal has quickly become my favorite CMS for its flexibility and feature-set. Even for a basic site or a general blog I now use Drupal. Creating pages, polls, posts and administering permissions is very easy. Out of the box Drupal does a lot very well, and with just a few adjustments, it's a powerful SEO platform.
Below is a rundown of what I typically do after a standard Drupal installation to get the most SEO value out of it, including modifications to themes, modules I install, and a few other tidbits.
Modifying the Theme
Drupal themes can be built in various ways and still function, so some of what I recommend doing may not strictly apply to the theme you are using, but if you understand how your theme is built, and the html & php code it's built upon, you should be able to make the necessary adjustments.
First I set the theme to "Default" and make a test post so that I can test the changes I make. Like any CMS theming engine, these changes can have unforeseen consequences, so I want to see (both the front-end and code) what really happens.
Now I take a look at what heading tags the theme has generated. I find a lot of themes wrap the site's logo, name, and sometimes every post listed on the front page in an H1 tag. I remove the heading tags from the logo, and my goal with posts is to have their titles as H1 tags when viewing their respective internal URLs, but have them as H2 tags when listed with teasers on the index page (or any other page which lists multiple posts).
To do the above I need to edit the page.tpl.php and node.tpl.php files (again, it is possible for this to vary depending on theme, but these files are included in any well-made, compliant, Drupal theme).
To remove the heading tag from the logo/site name look for the code which calls them, or do a search for the heading tag it appears wrapped in in your site. Not all themes handle this the same, some may call either the site-name or the logo, others may display both. It'll look something like this:

You can just remove the open and close heading tag, but that may result in the text (site-name) looking a bit funky (this isn't a problem if your utilizing the logo and not site-name option). If you are using the site-name feature in Drupal, you'll want to add CSS styling to make it appear like it did with the heading tag.
Now I need to fix the post titles. To get them to appear as H1 tags when viewing their full posts (not the titles on the index) I need to edit the page.tpl.php file by wrapping the print title command in the H1 tag:

This will help those pages rank organically. But now I want them to appear as H2 headings on the index page so they don't detract from what I will set as the H1 tag there.
In the node.tpl.php file I wrap the call for the title in an H2 tag:

This hasn't identified anything as the H1 tag, or created any unique text, for the index page. To do that I do one of two things. Some themes allow for the incorporation of Drupal's "Mission Statement", which is simply text placed on the index page. I can code an H1 tag in there along with nice keyword-rich content by selecting the "Input Type" of "Full HTML". For themes that do not have the mission statement coded I can either add it:

Or I can place that same H1 tag and content in a Block, and set that block to appear above the posts on the index page only.

Now I view my site's index page and a post's page and check the code to ensure it has worked...which it should.
HTACCESS
Now that I'm happy with my heading tags I'm going to edit the htaccess file to redirect all users to the www version of my domain name. All I need to do is uncomment the code Drupal provides, and change the example to my domain name:

Drupal SEO Modules
I need to install a number of modules to achieve everything I want, so now I'll upload the following modules to /sites/all/modules:
pathauto
global_redirect
nodewords
page_title
path_redirect
xml sitemap
It's important that some of the configuration of these modules happen before creating any content, or even any taxonomy terms. For example, I need to configure pathauto to output the URLs I want for my vocabularies before any of those terms are added. If I were to, for example, add a vocabulary called "States" and then created terms for all 50 states, the URLs for those would be sometime like TAXONOMY/TERM/1. But if I enable pathauto and identify the URL structure for my States vocabulary first, then when I add the 50 states later they will automatically have the URLs I wanted.
Here's a rundown of each module and why I'll use it.
pathauto. This module is an absolute necessity. I don't like the system URLs that are typically generated. By using this module I can create URLs that are search-friendly, including words that I'm targeting. If I had a Vocabulary of "Earth", terms of each country, and sub-terms (child terms) of each state/province and city, pathauto would automatically create the URLs "/united-states/california/los-angeles", "/spain/madrid" and so on by using [catpath-raw] in the "Taxonomy term path settings".
I can also change my blog url from "blog/1" to simply "blog", and have page URLs be "page-title" instead of "content/page-title". Additionally, if I have an active community site I can change the system generated user paths to something more friendly like "user/dan", and have the URLs for forum posts include the title of the post to help it rank for long-tail phrases.
global_redirect. Another must-use. This will automatically perform a 301 redirect to the clean URL (like those created by pathauto) whenever there is a request for the system URL. It also has an option to "Deslash" URLs so you don't end up with duplicate content issues with both "domain.com/page" and "domain.com/page/" indexed. I did recently have the "Remove Trailing Zero Argument" (the "/0" that often appears after term URLs) option disabled and it resulted in some duplicate content. Before you enable the /0 option, however, you should understand the implications.
page_title. While the page titles of posts generally don't need much tweaking, this module allows you to set patterns for your Drupal content types (pages, blog posts, stories, articles...). You can also create a unique title for your index page here.
nodewords. This allows you to create meta data for each piece of content you create. There's a number of tags you can set, from robots, copyright, revisit after to the basic keywords and description among others. For many sites I utilize nodewords simply for the meta description. It's better to write my own description than to have Google use a snippet from the page to present to a searcher.
path_redirect. When moving from another CMS, or a static site, to Drupal you can identify old pages for path_redirect to 301 redirect to new ones. This will help reduce the loss of any link juice pointing to those pages, and help the reindexing of the site.
xml_sitemap. This simply creates an xml sitemap that you can submit to the search engines.
Another technique I like to use is to create blocks which have internal links in them with keyword anchor text. For example, if I have a site on the United States, I would likely want to capture as much traffic to the major cities as possible. So I might link to my Los Angeles page with appropriate anchor text within a block that appears on all other California city pages. Within that same block I could link to San Diego, Sacramento, San Jose, or any other California city I was focused on.
A last technique which is powerful is to utilize your menu system. Many themes come with suckerfish/superfish (basically just drop-downs) menus. I can create links to my most valuable pages with good keyword anchor text and place them in a menu. Now these links will appear on every page of my website! Don't discount the power of your own links.
Update:
Adding nofollow to 'Create new account' and 'Request new password' Links
I've wanted to do this, but needed the motivation...which I thankfully got from the SEOBook.com forum.
Adding the rel="nofollow" attribute to the login form links ("Create new account" and "Request new password") is easy, but does require changing code in Drupal's core, so you do this at your own risk.
That done, here's how.
Open the modules/user/user.module file in Notepad or some other text editor. Find the below:
$items[] = l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.'))));
}
$items[] = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'))));
and change to:
$items[] = l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.'), 'rel' => t('nofollow'))));
}
$items[] = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'), 'rel' => t('nofollow'))));
Update: 2
Adding nofollow to "Login" and "Register" Links for Commments
Again, this involves a slight tweak to the core files of Drupal, so 1) use at your own risk, and 2) every time you upgrade you'll need to make the change.
To add the "nofollow" attribute to the two links in "Login or register to post comments", example from this page:

Open /modules/comment/comment.module
Find:
if (variable_get('user_register', 1)) {
// Users can register themselves.
return t('<a href="@login">Login</a> or <a href="@register">register</a> to post comments', array('@login' => url('user/login', array('query' => $destination)), '@register' => url('user/register', array('query' => $destination))));
}
and replace with:
if (variable_get('user_register', 1)) {
// Users can register themselves.
return t('<a rel="nofollow" href="@login">Login</a> or <a rel="nofollow" href="@register">register</a> to post comments', array('@login' => url('user/login', array('query' => $destination)), '@register' => url('user/register', array('query' => $destination))));
}
Easy. This should also work on these links that appear on teasers, but note this only works for sites set to allow users to register themselves.
I hope that helps others utilizing Drupal to get the most out of the very cool CMS. Hit me up with any questions.
- Dan's blog
- Login or register to post comments
website Design Development Philiphines
website Design Development Philiphines
Web Design Toronto
Oilchange.com is Toronto, Canada based web design and web development company offering search engine optimization (SEO), PPC, web design and web development services
Visit:
Web Design Toronto
web design company
Web design is a kind of graphic design intended for development and styling of objects of the Internet's information environment to provide them with high-end consumer features and aesthetic qualities web design company
This is excellent guide, i
This is excellent guide, i think this is the must follow guide for a beginner of drupal. Its very helpful and can make work effective and better also...
http://www.4rentgta.com | http://www.shishahost.com | http://www.srigurugita.com
Cheers to the author for
Cheers to the author for giving me some solid ideas
internet marketing(http://www.internet-marketing-australia.com/)
Why nodewords?
Could you please talk about your choice of the nodewords module rather than Integrated Metatags (/project/int_meta)?
Cheers
Miriam
Asset Protection
A commercial bank is a type of financial intermediary and a type of bank. Commercial banking is also known as business banking. It is a bank that provides checking accounts, savings accounts, and money market accounts and that accepts time deposits...........
http://www.AssetProtectionAtty.com
Sensational info. I look
Sensational info. I look forward to seeing more.
Global SEO
http://www.proxmx.com/
It has to do with my
It has to do with my familiarity with nodewords. Other modules may work just as well.
nofollow is unneeded
actually, adding rel="nofollow" to those links is completely unneeded since those paths are already in robots.txt
all search engines etc. will follow those instructions and thus never even visit those pages
if you add an alias to those pages, just add them to robots.txt yourself and search engines won't visit them.
see for an example: http://www.dandurick.com/robots.txt and http://drupal.org/robots.txt
The goal wasn't to keep them
The goal wasn't to keep them out of the index, it was to pass PageRank to other pages that may have been sent through those links. This is now not affective since Matt Cutts announced the change in how PageRank is handled with nofollow links.
It works on another website
Now I tried it on one my other sites, and it works. ???
Nofollow create new account and request password links
I have followed steps for "Adding nofollow to 'Create new account' and 'Request new password' Links", but they are still regular dofollow links. Any idea why is that?
I thought maybe it didn't work because I have absolute internal urls across the site, so I tried this also:
$items[] = l(t('Create new account'), 'http://webmasterformat.com/user/register', array('attributes' => array('title' => t('Create a new user account.'), 'rel' => t('nofollow'))));
}
$items[] = l(t('Request new password'), 'http://webmasterformat.com/user/password', array('attributes' => array('title' => t('Request new password via e-mail.'), 'rel' => t('nofollow'))));
But the final result is still unchanged. The links are without rel="nofollow".
Ideas to make money
In 2008, North American advertisers spent US$13.5 billion on search engine marketing. The largest SEM vendors are Google AdWords, Yahoo! Search Marketing and Microsoft adCenter...
http://www.dormroomcash.com/
Hi. I wanted to drop you a
Hi. I wanted to drop you a quick note to express my thanks. I've been following your blog for a month or so and have picked up a ton of good information as well as enjoyed the way you've structured your site. I am attempting to run my own blog but I think its too general and I want to focus more on smaller topics. Being all things to all people is not all that its cracked up to be.
http://seo-services-experts.com/onsite_optimization.htm
Inward investment Sweden
As an Internet marketing strategy, SEO considers how search engines work and what people search for....
http://www.locations4business.com/europe/sweden
You may need to clear your
You may need to clear your cache in Drupal. Go to Performance and scroll down to Clear Cache.
I was having the same
I was having the same problem. Thanks for helping me out of it. cleared the cache now is fine.
SEO in Dubai
Utah Search Engine Marketing
As an Internet marketing strategy, SEO considers how search engines work and what people search for....
http://www.taylorwarnick.com/
web design new york
Amazing poster.good work.v ill look further
web design new york


Comments