To start this off, you should not be using query_posts
for custom queries. Directly from the codex
Note: This function isn’t meant to be used by plugins or themes. As explained later, there are better, more performant options to alter the main query. query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query. It is inefficient (re-runs SQL queries) and will outright fail in some circumstances (especially often when dealing with posts pagination).
You should be using WP_Query
. You should also have a read here
Ok, now to the actual problem. You have the_title()
and wp_title()
mixed up here. the_title()
displays the post title in posts, and should be in the loop. wp_title()
retrieves page title, and should be used in the header. Again I quote from the codex
This function, and not a work-around, is required for publicly by WordPress standards.
So you need to change
<title><?php the_title(); ?></title>
to
<title><?php wp_title();Â ?></title>
in your header