On April 5, 2012, Hafner became only the 12th player in Cleveland Indians history to make at least 10 starts on Opening Day in a Cleveland Indians uniform. On April 15, 2012, Hafner hit a home run off Kansas City Royals starting pitcher Luis Mendoza that was estimated at having traveled 456 feet. It was the longest homer hit at Kauffman Stadium since 2001. When Hafner was placed on the injured list in May for surgery to repair an injured right knee, it was his sixth appearance on the list in the last five seasons. Against the Detroit Tigers on August 5, Hafner a solo home run in the 10th inning, his 200th home run of his career. He was again placed on the disabled list in August, with lower back inflammation. On November 1, the Indians declined Hafner's option, making him a free agent.