On February 10, 2011, Cabrera signed a one-year contract for $1 million with the Cleveland Indians. With Asdrúbal Cabrera in place at shortstop, Cabrera switched to playing second base. On June 12, 2011, Cabrera got his 2,000th hit in Yankee Stadium off of pitcher Freddy García.
On July 30, 2011, Cabrera was traded to the San Francisco Giants for minor league outfielder Thomas Neal. He was originally given the number 6, but opted to wear number 43, out of respect for J. T. Snow.
Cabrera became a naturalized U.S. citizen on May 19, 2011, in South Carolina. Cabrera, a Colombian national, had faced extra scrutiny when traveling through customs due to Colombia's reputation for drug trafficking. As of 2014, he lives in Windham, New Hampshire.