What do we do instead of DFS on directed graphs?
DFS suffers from the same problem in undirected graphs: if your graph is not connected, then starting DFS with an initial vertex $v$ will only explore the connected component of $v$. In a similar fashion, if the graph is directed, then DFS will only explore the vertices reachable from $v$.

The solution is the same in both cases: loop over all vertices, and start DFS with each of the vertices functioning as the initial vertex. If you skip vertices which you have already discovered, then the resulting algorithm will still run in linear time.