Graphs often compress a great deal of information into a simple visualizable structure. So it is not uncommon that vertex labels include more information than a simple index. For example, vertex labels might be lists. Graph handles this brilliantly:
graph = Graph[{{1, 2} \[DirectedEdge] {1, 3},
{1, 3} \[DirectedEdge] {2, 3},
{2, 3} \[DirectedEdge] {3, 2},
{3, 2} \[DirectedEdge] {1, 2}}, VertexLabels -> "Name"]
Nicely yields the graph
The issue here is EdgeContract. It does not seem to operate on such graphs. For example:
EdgeContract[graph, First[EdgeList[graph]]]
returns exactly the same graph. It does not contract the first edge.