The Giants won for the fourth time in six games and expanded their lead in the National League West over the Los Angeles Dodgers to seven games.
After falling behind early, the Rockies came no closer than three runs the rest of the way, losing for the second time in the three-game series.
Marco Scutaro, Joaquin Arias and Hector Sanchez all had RBI singles in the opening inning before Crawford came through with his double. Scutaro added a run-scoring base hit in the sixth and Arias had a sacrifice fly in the ninth.
Tim Lincecum (9-14) allowed three runs on six hits with four walks and eight strikeouts in six innings to collect the victory. All of his last five starts have come on the road.
Jeff Francis (5-5) was charged with the loss after giving up five runs on seven hits in three innings. The Rockies have dropped eight of their last 10 games.