Any kind of heuristic weighting scheme like this can and usually should be replaced with a machine learning approach.
During heuristic weight development, the developer sets the weights, experiments with it for a while, notes whether particular URIs are not ranking highly which should be (or vice versa), and then changes the weights.
Doing this the "right" way formalizes this process. The developer assigns a desired rank to each URI (or NA if he just ranks the top few) and compares this to the computed rank (as a function of the features, e.g. visitation time, visitation frequency, etc.).
A few rounds of this on different computers and eventually the coefficients settle such that the computed rank matches the desired rank most of the time. Moreover the process is more transparent and can be re-run should new features be included.
During heuristic weight development, the developer sets the weights, experiments with it for a while, notes whether particular URIs are not ranking highly which should be (or vice versa), and then changes the weights.
Doing this the "right" way formalizes this process. The developer assigns a desired rank to each URI (or NA if he just ranks the top few) and compares this to the computed rank (as a function of the features, e.g. visitation time, visitation frequency, etc.).
A few rounds of this on different computers and eventually the coefficients settle such that the computed rank matches the desired rank most of the time. Moreover the process is more transparent and can be re-run should new features be included.