Ethernet networks rely on the so-called spanning tree protocol (STP) in order to prevent loops. This protocol imposes a severe penalty on the performance and scalability of metro Ethernet networks, since it makes inefficient use of the links and switches. This paper presents a new scheme that ranks all of the possible spanning trees and finds the best spanning tree not only based on shortest path selection but also based on load balancing on links and switches. Actually, we define three major criterions: load balancing over links, load balancing on switches and shortest path selection. We can weight the importance of each criterion based on our goal. Our solution is not a replacement for STP; it is actually a complement for it. In our approach, after finding the best spanning tree, we can force STP to select it by assigning proper values to switch IDs and link costs. In a failure, STP can immediately select another spanning tree based on its rank by changing switch IDs and link costs. Through some simulations on a typical network, we show effectiveness of our approach.