Codice PHP:
$q 'SELECT `img`, `articolo`, `nome`, `collezione`, `descrizione` FROM `prodotto`  WHERE `prodotto`.`articolo` LIKE `% '.$cerca .'%` '
" LIKE `% '.$cerca .'%` ';"
c'è uno spazio tra % e '.

qualsiasi stringa tu vada a ricercava diventa: "% stringa%" e quindi ti da come risultati tutti i record che contengono si la stringa, ma precededuta da uno spazio.

Poi ti consiglierei di eliminare tutti i ` nelle query e di utilizzare le " per contenere la seconda query.
Il risultato finale non dovrebbe cambiarti ma almeno hai (secondo me) un codice molto più pulito e più a prova di errore.

Codice PHP:
$cerca $_GET['cerca'];
  if(!(
$cerca)){
    
$q 'SELECT img, articolo, nome, collezione, descrizione FROM prodotto ORDER BY nome ASC LIMIT 0, 30 ';
  }else{
    echo 
"Risultati trovati: ";
    
$q "SELECT img, articolo, nome, collezione, descrizione FROM prodotto  WHERE articolo LIKE '%" .$cerca ."%' ";
  } 
Edit:
Ed invece no, l'uso di ` che hai fatto nel like è errato.
Hai una gestione di errori sull'esecuzione della query?
Se si dovresti trovarti un errore a video sull'uso dei `.
Questo carattere (almeno sul mio ) mi da errore in quanto è "riservato" per i nomi delle colonne e non come identificatore di stringhe.