Cree una tabla con todos los meses y luego únala a la izquierda con su consulta. En la línea de
select count(1) as count, months.month, year(published_at) as year
from months left join articles on months.month = month(published_at)
where published_at >= (now() - interval 1 year) and published_at <= now()
group by month(published_at)
order by year asc, month asc
Funcionará, pero le devolverá los resultados de enero a diciembre y no le dará años. Se hizo una pregunta similar antes, luego se me ocurrió una consulta muy compleja, por lo que si no encuentra nada más simple, considere echar un vistazo:
La consulta entre fechas no funciona, ahora estamos en un nuevo año