Hola!!!, estoy programando un webcrawler en php, extrae las url, titulo, y metaetiquetas que necesito, pero tengo un problema.

Guarda mal las url, les doy un ejemplo:

Id Titulo Desc Url Keywords
1 titulo1 desc1 url2 keys1
2 titulo2 desc2 url1 keys2
3 titulo3 desc3 url4 keys3

No se que es lo que está mal en el código. Me registre en el foro porque no logro dar con la solución, debe ser por los nervios y el cansancio jajaja. Iba a presentar el webcrawler como proyecto para el colegio pero me surgieron varios errores justo cuando faltan pocos días :(

Espero que puedan ayudarme!!, les dejo el código a continuación:

Código PHP :

<?php
error_reporting(E_ALL | E_STRICT);
set_time_limit(0);
 
$server_link = mysql_connect("localhost", "root", "");
if(!$server_link) {
    die("Fall&oacute; la Conexi&oacute;n ". mysql_error()); 
}
 
$db_selected = mysql_select_db("test", $server_link);
if(!$db_selected) {
    die("No se pudo seleccionar la Base de Datos ". mysql_error()); 
}
 
 
function storeLink($titulo,$descripcion,$url,$keywords)
{
    $query = "INSERT INTO webs (webTitulo, webDescripcion, weburl, webkeywords) VALUES ('$titulo', '$descripcion', '$url', '$keywords')";
    mysql_query($query) or die('Error, falló la inserción de datos');
}
 
function extraer($url, $prof, $patron)
{
 
    $userAgent = 'Robot';
 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(("Accept-Language: es-es,en")));
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 2);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    $html= curl_exec($ch);
 
    if (!$html) {
        echo "<br />cURL error number:" .curl_errno($ch);
        echo "<br />cURL error:" . curl_error($ch);
        exit;
    }
 
    $dom = new DOMDocument();
    $dom->loadHTML($html);
 
    $xpath = new DOMXPath($dom);
    $hrefs = $xpath->evaluate("/html/body//a");
 
    for ($i = 0; $i < $hrefs->length; $i++) {
        $href = $hrefs->item($i);
        $url2 = $href->getAttribute('href');
    
        $var = strstr($url2, '#', true);
        if ($var !== false ) {
            $url2 = $var;
        }
    
        if ($url2 != $url && $url2 != '') {
            if (saveUrl($url2, $prof,$patron, $html)) {
                extraer($url2, $prof ++, $patron); 
            }
        }
    }
}
 
 
function saveUrl($url, $prof, $patron, $html)
{
    $retorno = false;
    $busqueda = mysql_query("SELECT weburl FROM webs WHERE weburl='$url'");
    $cantidad = mysql_num_rows($busqueda);
    $pos      = strpos($url, $patron);
 
    if( $prof <= 1 and $cantidad == 0 and $pos !== false) {
        preg_match_all ("(<title>(.*)<\/title>)siU", $html, $title);
        preg_match_all ("(<meta name=\"description\" content=\"(.*)\"\/>)siU", $html, $description);
        preg_match_all ("(<meta name=\"keywords\" content=\"(.*)\"\/>)siU", $html, $keys);
        $titulo = $title[1][0];
        $descripcion = $description[1][0];
        $keywords = $keys[1][0];
        storeLink($titulo,$descripcion,$url,$keywords);
        $retorno = true;
        echo 'Guardada pagina : ' . $url . ' con profundidad ' . $prof . '<br>' . "\n\r"; 
    }
    return $retorno;
}
 
 
$url = "http://foros.cristalab.com";
$patron = "http://foros.cristalab.com";
$prof = 1;
 
libxml_use_internal_errors(true);
extraer($url, 1, $patron);
$errores = libxml_get_errors();
libxml_clear_errors();
?>