INTRODUCTION

Drupal is a great CMS but really isn't very powerful out of the box. To harness its power you'll need to use contrib (contributed) modules. Contributed modules are created by the community and are not part of the core Drupal download. But they can be downloaded and installed from the drupal.org website.

At the time of this writing we've been working with Drupal for almost 9 years and we've learned a lot in our journey from Drupal 5 to Drupal 7, including what we consider to be essential Drupal modules. Here is a listing of some of the modules that we install on almost every website that we build and consider most of them to be essential on most of our sites. Some of these modules are common knowledge but hopefully we'll introduce you to some modules that you haven't used yet.

ADMINISTRATION & USER MODULES

Administration menu is a must-have module and is the first thing that we install. This gives you quick access drop-down menus to your site's administrative functions. Be sure to disable the overlay module to make your site admin-friendly (see the tips section below).

Module Filter will group your site's modules into tabbed categories for easier administration and also provides a must-have search filter.

All most every Drupal site is going to have Views installed. It is a powerhouse that Drives the output and display of a great amount of Drupal data. It's so important that it is part of Drupal 8's core modules. We assume that you know what Views is and are already using it on your site.

Views Bulk Operations is a very powerful module that provides Views with a 'field' that gives your View operation options such as bulk deleting, un-publishing, changing node field values & taxonomy terms and much more.

Administration Views replaces your content administration and user administration pages with actual Drupal Views that provide expanded field and filtering capabilities and also the ability to quickly customize your administration pages since they are now real Views.

Views UI: Basic Settings is a handy module. If you've ever had a client or administrator who needs to edit the header or footer content of a View but you don't want to give them Administrative access to Views then this module solves that problem. With Views UI: Basic Settings you can setup your Views and permissions to allow access for privileged users to edit Views header and footer content without access to edit the rest of the View.

Field Group is a very powerful module for organizing, grouping and displaying node information. It can be used to group your node creation form screen or node displays into groups of tabs (horizontal and vertical), fieldsets, divs, accordions and more.

Backup and Migrate is another must-have module. Backup and Migrate allows you to create manual and scheduled automated backups of your database and website files. You can download the backups or store them on your server or on external services like NodeSquirrel.com and Amazon S3. This module is flexible and can be a site-saver if your site crashes. This should be one of the first modules you install. Be sure to set an automated backup right away.

WebForm allows you to quickly and easily create forms on your site to collect information from your users. Do not use Drupal's core Contact module as it is not flexible and you cannot add additional fields to it. Webform allows you to create multiple forms with multiple types of fields (email, text, date, options, etc). You can also setup multiple email workflows to send your form submitting data to admins and messages to the sender.

A newer form sytem is EntityForm and it is much more flexible than Webform. EntityForm allows you to create forms with any Drupal fields, where Webform only allows a select few of its own built-in field types. With EntityForm you can add use address, telephone, link (URL), references, and many more types of fields. It also has more configuration options and customizable submission Views. It does, however, usually take more time and tweaking to get setup. If you want a quick and basic form then use Webform but for anything more advanced then EntityForm is the way to go.

Add Another gives you several options to quickly create additional nodes of the same type. With it you can add a button next to the node Save button to "Save and Add another". This button will save your node and then open another node of the same type ready for creating. You can also add a tab to the node view form for adding a new node of the same type. This can be a valuable time saver when entering multiple nodes of the same type.

Super Login greatly improves the Drupal login page's form with many features and better looks. If nothing else, it's a light weight way to allow users to log in with their email address as well as their username.

Add To Head is a slightly niche module but it has come in handy for us multiple times. It allows you to easily add scripts, styles and meta data to your website through an administrative interface. It also allows you to add it to specific pages only. This is handy when you want to allow someone else to easily add meta tags and scripts to your site without having to grant them access to your actual theme files.

Role Assign is another module that allows further granular control of permissions you can set. You'll often want to allow someone to create new users in a site but you may not want them to be able to assign any role to the users. Role Assign allows you to restrict the roles that a user can assign to accounts. This way you can prevent someone from having the ability to assign themselves or someone else an Administrator type role.

Override Node Options is another module that improves Drupal's permission system and allows you to give granular control to users to have access to edit a Node's published, promoted, authoring, sticky and revision settings without having to grant a user the "Administer content" permission which gives them full access to edit Nodes.

Custom Contextual Links is a very handy module that allows you to create your own contextual links within a site. In case you're not familiar with them, contextual links are the action links that appear when you click on the little gear/cog icon that appears when you hover over certain elements. This modules allows you to create your own content links within Nodes and Views. We use it to make sure content administrators have quick and simple access to create new Nodes from pages that contain that Node type. We also ensure that every node, whether on its own page or listed within a View, will always have links to edit or delete the Node. It also allows you to create your own action text. For example, you can create a context link that says "Delete Photo" to, of course, delete a photo node.

Password Reset Landing Page makes resetting passwords less problematic on your Drupal site. We used to receive frequent complaints from users having issues resetting their passwords. The problem occurs when the user clicks the 'one time password reset' link sent to their email. They are then logged into the site but don't change their password because it's not obvious that they need to do this. This module creates a better password reset landing page that allows the user to create their new password at the same time they log in after clicking their reset link.

Text Formatter is a module that provides a 'field display formatter' with an option to display your field output in a comma separated list.

User Protect is a handy module that allows fine grained control over various user account edits. For example, you can give someone privileges to create and edit user account but prevent them from being able to edit or delete accounts with the administrator role. The can help to protect important user accounts.

Draggable Views is a great way to build a sorting View with drag and drop functionality. Often your content administrators will want to be able to custom sort a View listing. There is no easy way to do this natively with Nodes and Views but with the Draggable Views module you can create a second View of the content you want to sort that contains drag and drop handles. This makes custom sorting of View content a breeze!

Email Field adds an email type field that you can add to your entities. The email field will automatically validation the the value entered is formatted as a proper email address. At a minimum, we use this on contact forms that we build with entityforms.

Disable Password Strength will remove the password strength indicated that is displayed when users are creating their passwords. We used to have users complain that they were having issues creating their password because they thought the low-strength indicator meant their password was invalid or didn't match. We found this caused too many issues and simply installing this module resolved them.

Colorbox is a light-box modules that uses the colorbox library to popup images for a larger view. This is a solid module that integrates colorbox nicely into Nodes displays and Views.

Superfish is our favorite module for making Drupal's nested menus into a drop-down menu system. It works great and has a ton of built in configuration options. It even has support for dynamic mobile menus.

Honeypot is a great spam deterrent module that filters forms submissions that may be spam without having to use a CAPTCHA. Honeypot adds a hidden field to your forms that only a bot would see. If this field gets filled out then the system knows it is spam. Also, there is an adjustable time limit and if the form is filled out faster than this limit then it is also considered spam. There's a support module called Honeypot Entityform that adds an additional option to Honeypot to protect Entityforms as well.

SEO (Search Engine Optimization) MODULES

Meta Tag allows easily setting up meta data for your website such as title and descriptions tags. This meta data can be automated and/or customized per page.

Global Redirect fixes many common SEO penalties that a Drupal site may receive out of the box due to duplicate content issues that are inherent to Drupal.

PathAuto allows the creating of 'patterns' that will automatically create a node's URL alias based on the tokens you setup. This is great to automatically create user friendly URLs and may give your pages a boost in the search engines.

Google Analytics does not help your search rankings per say but it is a quick easy way to integrate your Drupal site with Google Analytics for monitoring of just about any metric you can think of. There are also expansion modules to gather data from your Drupal Commerce or Ubercart ecommerce sites.

SUPPORT MODULES

Support modules do little to nothing on their own but are required for use by other modules. Here are some common support modules that we use on every site:

jQuery Update is a module that updated the version of jQuery that Drupal uses. Drupal core is set with jQuery version 1.4.4 but many modules or custom jQuesr code you use may require a higher version. Simply install this module and select the jQuery version you want you Drupal installation to use.

Entity

Ctools (Chaos Tools)

Libraries

Token

This list isn't exhaustive and is only the modules that we tend to use. What are your essential modules?

BONUS TIP

If you used the default Drupal install then there are likely modules installed that you do not need. It is recommended to disable any modules that you're not using to free up resources and simplify administration on your site. Here is a list of modules that we disable on most sites. Of course, the modules you would disable will depend on your particular site.