После 30 000 - 40 000 тестов я заметил, что вы действительно сталкиваетесь с множеством различных ситуаций, с которыми нужно работать.
Отправной точкой является, конечно, где-нибудь, чтобы только посмотреть на тег rel и найти его, но по пути вы найдете все больше и больше ситуаций, которые вам придется охватить.
На тот случай, если кто-нибудь посмотрит эту ветку и попытается приблизиться к 100% совершенству, я загрузил свой (PHP) код здесь: https://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php. Это часть (GPL) плагина WordPress, который извлекает Favicons, более или меньше по запросу тогда, из-за ограничений стандартного Google (как упомянуто выше). Код находит значительно больше значков, чем код Google. Но также включает в себя Google и других в качестве поставщиков изображений для сокращения дальнейших итераций при попытке получить значок.
Когда вы читаете код, вы, вероятно, увидите некоторые ситуации, с которыми вы столкнетесь, например, данные base64, страницы перенаправляются на 404 страницы или перенаправляются раз в миллионы раз, извлекаются странные коды состояния HTTP и приходится проверять правильность каждого возможного кода возврата HTTP, сами значки имеют неправильный тип mime, теги обновления на стороне клиента, значки в корневая папка и ничего в html-коде и т.д ... и т.д ... и т.д ...
Если вы зайдете в каталог, то найдете другие классы, которые затем будут хранить фактические значки в соответствии с их URL-адресом (и, конечно же, вам нужно будет выяснить, какие «ветви» используют один и тот же значок, а какие нет), и найти если они принадлежат одному «владельцу» или действительно являются разными частями, но находятся в одном домене.