Робот узнает об изменениях при обходе сайта. Если канонический адрес указан верно и робот не проигнорировал указание, неканоническая страница пропадет из результатов поиска.
Если на одном сайте есть несколько похожих страниц, робот выбирает в качестве канонической ту из них, содержание которой он интерпретирует как наиболее полное и полезное. Она будет сканироваться наиболее часто, а ее копии и варианты – реже. Это позволяет снизить нагрузку на ваш сайт, связанную с индексированием.
Зачем вам статический метод, если вы его дергаете из себя, то логично делать $this->makeTree()просто у меня это не единственная модель где древовидная структура, да кстати можно было бы этот метод вынеси в trait, об этом только сейчас подумал, но я создал отдельный класс TreeServices для этого.
Если у вас дерево ограниченной вложенности (обычно меньше 2-3 уровня), то достаточно воспользоваться дот нотацией в withПроблема в том что нет ограничений для вложенности