No estoy seguro de que sobrescribir el canónico usando JavaScript funcione, ya que esto es algo que ocurre más a nivel de araña (es decir, la parte que recupera y recopila datos) que a nivel de indexador (la parte de un bot que interpreta los datos y los almacena en el índice de búsqueda).
Consejo no solicitado: quizás quieras leer este tema para que puedas colocar esas sobrescrituras en un plugin: