Yeah, this type of post is so over done. I know. But after doing a couple of Drupal 7 sites (and working on a couple of SaaS solutions that I may be offering later this year), I feel like I need to offer my opinion on what D7 modules you absolutely must have on your website.
First up, we've got the absolute essential contributed modules that you must install. While you can build a Drupal website without these modules, you're really hindering yourself without using these.
- Views, CTools, and Panels - Not a single website should go without these three modules. Okay, you can easily get by without Panels. But Panels is so cool it's addicting! These modules help you build custom displays of data without requiring you to write any code (except in certain unique and arguably rare circumstances). And with Panels, you can do quite a bit of the layout work for your website in the Panels UI.
- Token - While most of the Token module has been moved into core, there's still a few things that aren't. One of these important things is the UI. The Token module lets you use "tokens" to access and assemble certain data, and many other modules make heavy use of (if not depend on) this module.
- Google Analytics - What good is your website if you can't see how it's being used or how people are getting to it? Sure, you could just hardcode the snippet that Google gives you into your theme, but that's not the Drupal way. By using the Google Analytics module, you can also choose what user roles are tracked, as well as a few other options. No website should go without Google Analytics.
Search Engine Optimization
So you've got great content, but what good is it if it can't be found? Using these modules, you can make it easier for search engines to index your website (and index it the way you want it indexed).
- Page Title - The Page Title module gives you greater control over what title is displayed in the <title> tag. You might be wondering why you would want this... After all, you're already giving a title to all of the nodes you create. For quite a while, that's what I thought, but then I put some content on a site where the best title for the user wasn't necessarily the best title to feed search engines or display in the title bar. Now, I'm not talking about a poorly-formed keyword-laden title that makes no sense — I'm talking about a title where likely search terms appear early enough to show up bold in search results. You'll realize at some point that you might need to tailor your page titles a little bit, and this module will help you do this.
- Pathauto - Even if you don't install any other contributed modules on your website, make sure you install Pathauto. Pathauto allows you to have node aliases set according to a pattern of your choice. Want blog posts to show up at /blog/title-of-post or /blog/yyyy/mm/dd/title? Pathauto uses tokens to allow you to set that option. Every time you create a piece of content, an alias will automatically be created conforming to what you've told Pathauto you want.
- Global Redirect - If you're using aliases, you should really be using Global Redirect. By default, a node's "normal" path of /node/123 is still accessible if it is assigned an alias of /title-of-page. What happens here is search engines and users now see two unique pages for the same piece of content. Search engines tend to penalize you for this duplicate content. What Global Redirect does is set up 301 redirects from the /node/123 url to the alias for that node. This is an absolute must-have module if you're using aliases!
- XML Sitemap - Want to make it easy for search engines to index your content? Install this module. This module allows Drupal to automatically create an up-to-date sitemap.xml for your website that you can submit to search engines. These sitemaps help crawlers know what content you have on your website, and this can be a really big help when starting out. The best part about this module is that you can control what gets added to the sitemap. For example, a common exclusion from the sitemap might be the nodes used for the photos in a photo gallery when all you're doing on the site is displaying the image in a modal window. In that instance, you may not want the search engines to index a node that is likely not formatted properly for viewing.
Who is going to be the person running the website? In most cases, the answer is "someone who doesn't know HTML." And even if the answer in your case is "a web programming ninja", that ninja probably doesn't want to write code just to edit content on the website. Either way, the following modules are absolutely essential to a happy content management experience.
- WYSIWYG - One of the most popular criticisms of Drupal is that it doesn't come with a WYSIWYG editor installed by default. When you go to create content in Drupal, you're greeted by a text box that only recognizes line breaks. In my opinion, though, that's a good thing about Drupal. By design, this allows you to choose what editor (if any) you want to use. The WYSIWYG module allows you to install many different editors, and you can even assign different editors to different input filters. My personal preference is CKEditor, by the way.
- Insert - I guess you could use a module like IMCE to allow users to insert images or video into the content they create, but that approach often results in a clumsy mess and doesn't take advantage of D7's Field API. With the Insert module, you can add an image field to your content types. That image field is able to take advantage of D7's Image manipulation tools (formerly known as the contributed module ImageCache). What the Insert module allows you to do is insert the images you upload through the field directly into the node body where your cursor currently is. It will even use your image manipulation presets! But what really rounds it out is the next module...
- Image Resize Filter - We all know that presets don't always fit into your content. You could just create an image of the "right" dimensions on your computer and upload and display it as-is, but why not let Drupal do the work for you? Image Resize Filter makes this easy, especially if you're using the Insert module. What this module allows you to do is directly resize the image by dragging the frame of the image to the desired size. But instead of just changing the display dimensions, it also saves a new image resized to those exact dimensions! I must say that I have fallen in love with this module since I've started using it on new client websites.