Cómo generar una URL amigable para SEO en CodeIgniter

La estructura de URL amigable con SEO es una técnica común para la optimización de motores de búsqueda. La URL amigable de SEO contiene las palabras clave que ayudan a mejorar el ranking del motor de búsqueda. La diferencia entre una URL normal y una URL amigable para SEO es como la siguiente.
  • URL de Noraml: http://www.example.com/posts.php?id=123
  • URL amigable para SEO: http://www.example.com/codeigniter-tutorial-for-beginners
El ejemplo anterior muestra claramente que la URL amigable para SEO es más amigable para los humanos que la URL normal. Siempre es una buena idea hacer que la URL del sitio web sea amigable para obtener más tráfico de los motores de búsqueda.
Si su sitio web está creado con CodeIgniter y desea crear una URL amigable para los contenidos dinámicos (publicaciones, productos, páginas, etc.) del sitio web, existe una manera fácil de hacerlo. En este tutorial, le mostraremos cómo generar una URL amigable para SEO en CodeIgniter y almacenar la URL dinámica en la base de datos.
Aquí demostraremos el proceso completo de implementación de URL amigables con SEO mediante la creación de publicaciones o artículos en CodeIgniter. Las siguientes funcionalidades se implementarán en nuestro script de ejemplo.
  • Generar slug URL única desde el título de la publicación.
  • Almacena el slug de URL en la base de datos para cada publicación.
  • Obtenga el slug de URL de SEO de la base de datos y especifique la URL dinámica en la lista de publicaciones.
  • Muestra el contenido de la publicación por la URL de SEO usando las rutas de CodeIgniter.
Antes de comenzar, eche un vistazo a la estructura de archivos de la implementación de URL amigable con CodeIgniter SEO.
codeigniter-seo-friendly-url-files-structure-codexworld

Creación de tablas de base de datos

Para almacenar datos de publicaciones, se necesita crear una tabla en la base de datos. El siguiente SQL crea una poststabla con algunos campos básicos, incluido el campo URL de SEO en la base de datos.
CREAR  TABLA ` mensajes ` (
  `id`  int ( 11 ) NOT NULL AUTO_INCREMENT,
  ` url_slug`  varchar ( 255 ) compilar utf8_unicode_ci NOT NULL ,
  `title`  varchar ( 255 ) compilar utf8_unicode_ci NOT NULL ,
  ` contenido en materia  texto INTERCALAR utf8_unicode_ci NOT NULL ,
  `created` datetime NOT NULL ,
  ` modified` datetime NOT NULL ,
  `status`  tinyint ( 1) NO NULO POR DEFECTO '1' COMENTARIO '1 = Activo, 0 = Inactivo' ,
  CLAVE PRIMARIA ( `id` )
) MOTOR = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

Controlador (Posts.php)

El controlador de Mensajes contiene tres métodos index()details()add().
  • index () : obtiene todos los datos de las publicaciones por el modelo de publicación y los envía a la vista de lista.
  • detalles () : obtiene los datos de la publicación en función del url_slug proporcionado en la URL y los envía a la vista de detalles.
  • add () : genera una URL de SEO única (url_slug) y agrega la nueva publicación a la base de datos.
    • El slug URL limpio, único y amigable con SEO se generará a partir del título de la publicación.
    • El CodeIgniter url_title()se usa para convertir el título de la publicación en una barra de URL.
    • La función de isUrlExists()ayuda personalizada ayuda a verificar si la URL ya se utilizó en url_slugSi ya existe, el sufijo de marca de tiempo se agregará a la barra de URL.
<? php  if (!  defined ( 'BASEPATH' )) exit ( 'No se permite el acceso directo al script' ); / ** 
 * Clase de Gestión de Mensajes creado por CodexWorld 
 * / clase  Mensajes  extiende  CI_Controller  { 
    
    función  __construct () { 
        padres :: __construct (); 
        $ this -> load -> model ( 'post' ); 
        $ this -> load -> helper ( 'common' ); 
        $ esto -> cargar ->biblioteca ( 'form_validation' ); 
    } 
    
índice de     función pública  () { 
        $ data  = array (); 
        
        // obtener los datos de las publicaciones 
        $ data [ 'posts' ] =  $ this -> post -> getRows (array ( 'limit' => 10 )); 
        
        // cargar la vista 
        $ this -> load -> view ( 'posts / index' $ data ); 
    } 
    
detalles de la     función pública  ( $ url_slug ) { 
        $ data  = array ();
        
        // obtener los datos de la entrada 
        $ data [ 'post' ] =  $ this -> post -> getRows (array ( 'url_slug' => $ url_slug )); 
        
        // carga la vista 
        $ this -> load -> view ( 'posts / details' $ data ); 
    } 
    
    función pública  add () { 
        $ data  = array (); 
        $ postData  = array (); 
        if ( $ this -> input -> post ( 'submitBtn' )) { 
            $ this ->form_validation -> set_rules ( 'title' 'Title' 'required' ); 
            $ this -> form_validation -> set_rules ( 'content' 'Content' 'required' ); 

            $ postData  = array ( 
                'title'  =>  strip_tags ( $ this -> input -> post ( 'title' )), 
                'content'  =>  strip_tags ( $ this -> input ->)) 
            ); 

            if ( $ this -> form_validation -> run () ==  true ) { 
                / * 
                 * Generar URL amigable para SEO 
                 * / 
                $ title  strip_tags ( $ this -> input -> post ( 'title' )); 
                $ titleURL  strtolower ( url_title ( $ title )); 
                if ( isUrlExists ( 'posts' , $ titleURL )) { 
                   $ titleURL  $ titleURL . '-' . tiempo (); 
                } 
                $ postData [ 'url_slug' ] =  $ titleURL ; 
                
                // Insertar datos de publicación en la base de datos 
                $ insert  $ this -> post -> insert ( $ postData ); 
                if ( $ insert ) { 
                    $ postData  = array (); 
                    $ data [ 'success_msg' ] =  'Publicar los datos insertados correctamente.' ; 
                } else { 
                    $ data [ 'error_msg' ] = 'Ocurrieron algunos problemas, por favor inténtalo de nuevo' ; 
                } 
            } 
        } 
        
        $ data [ 'post' ] =  $ postData ; 
        
        // carga la vista 
        $ this -> load -> view ( 'posts / add' $ data false ); 
    } 
}

Modelo (Post.php)

El modelo de publicación ayuda a obtener registros de la base de datos e insertar registros en la base de datos. Contiene dos métodos, getRows()insert().
  • getRows () : recupera datos de la poststabla y los devuelve como una matriz.
  • insert () : inserta datos en la poststabla y devuelve el ID de inserción.
<? php  if (!  defined ( 'BASEPATH' )) exit ( 'No se permite el acceso directo al script' ); 
clase de  mensaje  se extiende  CI_Model { 
    / * 
     * Obtener filas de los postes de la tabla 
     * / 
    función  GetRows ( $ params  = array ()) { 
        $ this -> db -> seleccionar ( '*' ); 
        $ this -> db -> from ( 'posts' ); 

        // establece el inicio y el límite 
        if ( array_key_exists ( "start" ,) &&  array_key_exists ( "limit" , $ params )) { 
            $ this -> db -> limit ( $ params [ 'limit' ], $ params [ 'start' ]); 
        } elseif (! array_key_exists ( "start" , $ params ) &&  array_key_exists ( "limit" , $ params )) { 
            $ this -> db -> limit ( $ params [ 'limit' ]); 
        } 
        
        siarray_key_exists ( "url_slug" $ params )) { 
            $ this -> db -> where ( 'url_slug' $ params [ 'url_slug' ]); 
            $ consulta  $ esto -> db -> get (); 
            $ resultado  = ( $ consulta -> num_rows ()>  0 )? $ query -> row_array (): FALSE ; 
        } else { 
            $ query  $ this -> db -> get ();
            $ resultado  = ( $ consulta -> num_rows ()>  0 )? $ consulta -> result_array (): FALSE ; 
        } 

        // devolver los datos recuperados 
        devolver  $ resultado ; 
    } 
    
    / * 
     * Insertar datos de publicación en la tabla 
     * / 
    inserción de función pública  ( $ data  = array ()) {         if (! Array_key_exists ( "created" $ data )) { $ data [ 'created' ] =  date ( "Ymd H : i: s " );

            
        } 
        if (! array_key_exists ( "modificado" $ datos )) { 
            $ datos [ 'modificado' ] =  fecha ( "Ymd H: i: s" ); 
        } 
        
        // insertar datos 
        $ insert  $ this -> db -> insert ( 'posts' $ data ); 
        if ( $ insert ) { 
            return  $ this -> db -> insert_id () ;; 
        } else { 
            devolver  falso ; 
        }
    } 

}

Ver (mensajes)

El directorio de la vista (los mensajes /) contiene tres archivos, index.phpdetails.php, y add.php.
posts / index.php:
este archivo de vista se carga mediante el index()método del controlador Posts. Todas las publicaciones se enumeran en la vista de índice con el enlace de detalles. El slug URL dinámico de SEO se utiliza en el hipervínculo.
<! DOCTYPE html>
< html  lang = "en" >  
< cabeza >
    < título > Generar URL amigable para SEO en CodeIgniter </ título >
</ cabeza >
< cuerpo >
< div  class = "container" >
    < h1 > Lista de publicaciones </ h1 >
    < div  class = "row" >
        < ul  class = "post-list" >
             <? php  if (! empty ( $ posts )): foreach ( $ mensajes  como  $ post ):  ?> 
                < li > < a  href = " <? php  echo  base_url ( 'post / ' . $ post [ ' url_slug ' ]);  ?> " > <? php  echo  $ post [ ' title ' ]; ?> </ a > </ li >
            endforeach else:  ?> 
            < p > Publicaciones no disponibles. </ p >
             <? php  endif; ?> 
        </ ul >
    </ div >
</ div >
</ cuerpo >
</ html >
posts / details.php:
este archivo de vista se carga mediante el details()método del controlador de publicaciones . La información solicitada se muestra en la vista de detalles.
<! DOCTYPE html>
< html  lang = "en" >  
< cabeza >
    < título > Generar URL amigable para SEO en CodeIgniter </ título >
</ cabeza >
< cuerpo >
< div  class = "container" >
    < h1 > <? php  echo  $ post [ 'title' ]; ?> </ h1 >
    < p > <? php  echo  $ post [ 'contenido' ]; ?> </ p >
</ div >
</ cuerpo >
</ html >
posts / add.php:
este archivo de vista se carga mediante el add()método del controlador Posts. Inicialmente, se muestra un formulario para crear una nueva publicación. Una vez que se envía el formulario, la información proporcionada se inserta en la base de datos y se muestra el mensaje de estado.
<! DOCTYPE html>
< html  lang = "en" >  
< cabeza >
< título > Generar URL amigable para SEO en CodeIgniter </ título >
</ cabeza >
< cuerpo >
< div  class = "container" >
    < h1 > Añadir publicación </ h1 >
    < div  class = "row" >
         <? php  echo! empty ( $ success_msg )? '<p>' . $ success_msg . '</p>' : '' ?>         <? php  echo! empty ( $ error_msg )? '<p>' . $ error_msg . '</p>' : '' ?> 
        < form  method = "post" >
            < p > Título de la entrada  : < input type = "text"  name = "title"  value = " <? php  echo! empty ( $ post [ 'title' ])? $ post [ 'title' ]: '' ?> " > </ p >
             <? php  echo  form_error ( 'title' , '<p class =" help-block error ">' , '</p>' ); ?>

            < p > Contenido de la publicación: < textarea  name = "content" > <? php  echo! empty ( $ post [ 'content' ])? $ post [ 'contenido' ]: '' ?> </ textarea > </ p >
             <? php  echo  form_error ( 'content' , '<p class = "error de bloque de ayuda">' , '</p>' ); ?>
            
            < input  type = "submit"  name = "submitBtn"  value = "Add" >
        </ form >
    </ div >
</ div >
</ cuerpo >
</ html >

Ayudante (common_helper.php)

La función de ayuda personalizada nombrada isUrlExists()se define en este archivo. Es útil verificar si el slug de URL ya existe en la tabla de publicaciones.
<? php  if (!  defined ( 'BASEPATH' )) exit ( 'No se permite el acceso directo al script' ); / * 
 * Función de ayuda para comprobar si la babosa URL ya existe 
 * / if (! Function_exists ( 'isUrlExists' )) { 
    función  isUrlExists ( $ tblname $ urlSlug ) { 
        if (! Empty ( $ tblName ) &&! Empty ( $ urlSlug )) { 
            $ ci  = &  get_instance (); 
            $ ci -> db -> from ( $ tblName ); 
            $ ci-> db -> where ( 'url_slug' , $ urlSlug ); 
            $ rowNum  $ ci -> db -> count_all_results (); 
            devuelve ( $ rowNum > 0 )? verdadero : falso ; 
        } else { 
            return  true ; 
        } 
    } 
}

Config

autoload.php:
especifique algunas bibliotecas y ayudantes requeridos autoload.phppara que se carguen automáticamente.
/ * 
| ------------------------------------------------- 
| Bibliotecas de carga automática 
| ------------------------------------------------- 
* / $ autoload [ ' library ' ] = array ( 'database' ); 
/ * 
| ------------------------------------------------- 
| Archivos de ayuda de carga automática 
| ------------------------------------------------- 
* / $ autoload [ 'helper' ] = array ( 'url' , 'form' );
route.php:
para cargar los detalles de la publicación en función de la barra de URL de SEO, se debe especificar una regla de enrutamiento. De acuerdo con la siguiente regla de enrutamiento, si el URI contiene un slug de URL de SEO, details()se cargará el método del controlador de publicaciones.
// especifique la ruta para la página de detalles de publicación $ route [ 'post / (: any)' ] =  'posts / details / $ 1' ;

Conclusión

Puede seguir este proceso para crear una URL amigable con SEO para los contenidos dinámicos de su aplicación CodeIgniter. ¡Esperanza! este simple proceso ayuda a cambiar a la URL amigable para SEO y hacer que su aplicación CodeIgniter sea amigable para SEO. Use las rutas de CodeIgniter para cambiar el formato de la URL según sus requisitos.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.