21 of 34 A change of this scope is pretty much a new answer. It should be submitted as such instead of attempting to hijack a well-accepted answer.

1. Make the topic stand out.

The purpose of a title is to attract people interested in your topic or who can give you an answer. People scan web pages quickly. Make it easy for them to notice your question. Some people read via the RSS feed (Stack Overflow example), so they don't see tags.

2. Keep it short.

You don't have to put all the details in the title. There's plenty of space to expand your question in the body of the text.

Likewise, don't insist that your title be expressed as a perfectly formed English sentence.

3. Lead with the most important words.

These articles discuss how people read web pages, based on using an eye tracking system to monitor users. For Stack Overflow-like pages people read most of the first and second entries (the bars of the "F"), and then scan down the rest of the list, reading on average the first 16 characters of each line.

Reading Heatmap

4. Don't start with "How do I..."

Writing in that style ensures that your title will fail criteria 1-3, and get less attention than it deserves.

This is a question site, and people will understand your titles are questions.

5. Don't sweat replicating a tag keyword.

The tags are orthogonal to the title. There's a good chance that if a question is about some particular topic, a good title for the question will include the topic name. Glance at the front page and you will see this is quite common.

However, don't explicitly add tags to the title for their own sake. See this post for a more detailed discussion of the relationship between tags and titles.

6. "What is a ..." is fine

Since the "..." is usually just a couple of words, titles like this still capture the essence of the question very briefly.

Some Good Examples

Here are some good titles, taken from existing posts. They succinctly summarize the question and will catch readers' eyes whilst scanning down the list.

  • Turning Linux USB power on and off?
  • How to UPSERT in Oracle (update or insert into a table)?
  • Python: What OS am I running on?
  • Raise an existing X11 window via command line?
  • 64-bit XML-RPC values?
  • Move an existing X11 window via command line?
  • Sum 3 columns in SQL when one column has a null value?
  • Oracle: searching over a range of values?
  • PostgreSQL encrypted backups
  • Readable font for code presentations?
  • Object Oriented vs Relational Databases
  • Oracle: formatting number as xxx-xx-xxxx
  • PostgreSQL Long VACUUM
  • Best timing method in C?
  • Map Routing, a la Google Maps?
  • Constructing images using HTML markup?
  • Inserting PostgreSQL BLOBs at a high-rate?

Some Bad Examples

These titles, also taken from existing posts, accurately present the question when read individually, but make it hard to pick out questions of interest when scanning the list.

  • How can I format xxxxxxxxx like xxx-xx-xxxx in Oracle?
  • How can I programmatically enable and disable the power to a particular USB port on Linux?
  • How can I raise an existing window via command line in X11?
  • How can I quickly insert a BLOB in PostgreSQL?
  • How can I move an existing window via command line in X11?
  • How can I store multiple items in an XML file for easy parsing?
  • What is a good font for code presentations?
  • How can I sum 3 columns when one column has a null value?
  • How can I construct images using HTML markup?
  • What is the best book for software design?
  • How can I generate unique random numbers in PHP?
  • How can I quickly insert a BLOB in PostgreSQL?
  • How can I tell what OS am I running on in Python?

Finally, be flexible

Different questions benefit from different styles of titles. Applying any single hard and fast rule is probably a mistake.