Angularjs y Google Bot Experiment -- javascript campo con optimization campo con angular.js campo con web-scraping camp codereview Relacionados El problema

AngularJs and Google Bot experiment


7
vote

problema

Español

He aprendido la pregunta de resolver la optimización de la aplicación angular para los motores de búsqueda, y se frustró que la opción más recomendada es prerendering html.

Después de un tiempo dedicado, sugerí crear una directiva que cargará el BOT después de representar las plantillas o actualizar alcance .

Directiva:

  angular.module('test', []).directive('seoBot', ['$timeout', function($timeout){      return {          link: function($scope, element, attrs) {              //publish event              $scope.$on('runbot', function(){                  //hint for start after render                 $timeout(function () {                      //find previos google's bot                     var googleBot = document.getElementById('googleBot');                      //if found - remove                     if(googleBot) googleBot.parentNode.removeChild(googleBot);                      //this is standard code from GA, but with ID "googleBot"                     (function(i,s,o,g,r,a,m){                         i['GoogleAnalyticsObject']=r;                         i[r]=i[r]||function(){                             (i[r].q=i[r].q||[]).push(arguments)                         },i[r].l=1*new Date();                         a=s.createElement(o),                         m=s.getElementsByTagName(o)[0];                         a.id="googleBot";                         a.async=1;                         a.src=g;                         m.parentNode.insertBefore(a,m);                     })(window,document,'script','//www.google-analytics.com/analytics.js','ga');                      ga('create', 'UA-46685745-1', 'rktdj.com');                     ga('send', 'pageview');                      //log that bot is loaded                     console.log("seo-bot loaded");                      //check page to be rendered completely                     console.log(document.body.innerHTML);                  }, 0, false);              });          }      };  }]);   

en el controlador:

  //get some data from server and update scope $http.get(GLOBAL.api.SERVER_PATH + GLOBAL.api.facultiesByCourse + s_id)         .success(function (data) {              $scope.courses = data;             console.dir($scope.courses);              //broadcast event to seo-bot             $scope.$broadcast('runbot');          } );   

seo-bot Etiqueta en la parte inferior de la plantilla:

  if0  

funciona, y el bot se carga cada vez que la plantilla ha cambiado de actualización o ruta. Puedo verificar que todos los elementos con los datos se estuvieran antes.

Pero ... ¿esta solución realmente funcionará? ¿Google BOT correlatará correctamente la página prestada con el dominio? ¿Puedo ser prohibido por esto?

Original en ingles

I have learned the question of solving Angular app optimization for search engines, and was frustrated that the most recommended option is prerendering HTML.

After some time spent, I suggested to create a directive that will load the bot after rendering templates or update scope.

Directive:

angular.module('test', []).directive('seoBot', ['$timeout', function($timeout){      return {          link: function($scope, element, attrs) {              //publish event              $scope.$on('runbot', function(){                  //hint for start after render                 $timeout(function () {                      //find previos google's bot                     var googleBot = document.getElementById('googleBot');                      //if found - remove                     if(googleBot) googleBot.parentNode.removeChild(googleBot);                      //this is standard code from GA, but with ID "googleBot"                     (function(i,s,o,g,r,a,m){                         i['GoogleAnalyticsObject']=r;                         i[r]=i[r]||function(){                             (i[r].q=i[r].q||[]).push(arguments)                         },i[r].l=1*new Date();                         a=s.createElement(o),                         m=s.getElementsByTagName(o)[0];                         a.id="googleBot";                         a.async=1;                         a.src=g;                         m.parentNode.insertBefore(a,m);                     })(window,document,'script','//www.google-analytics.com/analytics.js','ga');                      ga('create', 'UA-46685745-1', 'rktdj.com');                     ga('send', 'pageview');                      //log that bot is loaded                     console.log("seo-bot loaded");                      //check page to be rendered completely                     console.log(document.body.innerHTML);                  }, 0, false);              });          }      };  }]); 

In controller:

//get some data from server and update scope $http.get(GLOBAL.api.SERVER_PATH + GLOBAL.api.facultiesByCourse + s_id)         .success(function (data) {              $scope.courses = data;             console.dir($scope.courses);              //broadcast event to seo-bot             $scope.$broadcast('runbot');          } ); 

seo-bot tag in the bottom of template:

    <div class="well" id="courseList">          <!-- some template code -->      </div>      <div seo-bot></div> 

It works, and the bot loads every time when template have update or route changed. I can check that all elements with data was rendered before.

But... will this solution really work? Will Google bot correctly correlate rendered page with the domain? Can I be banned for this?

           
   
   

Lista de respuestas

2
 
vote

Como se encuentra, esto tiene que trabajar.

Solo tengo 2 nitpickings menores:

  • NO UTILICE string[] keys = {"Order", "Motion", .....}; 3 En el código de producción.
  • no está usando string[] keys = {"Order", "Motion", .....}; 4 y string[] keys = {"Order", "Motion", .....}; 5 , usted también puede declarar string[] keys = {"Order", "Motion", .....}; 6

código muy bonito.

 

As you found yourself, this has to work.

I only have 2 minor nitpickings:

  • Do not use console.log() in production code..
  • You are not using element and attrs, you might as well declare function($scope)

Very nice code.

 
 

Relacionados problema

2  Utilización de apiss de vapor y raspado web  ( Utilization of steam apis and web scraping ) 
alguna información de fondo aquí: Este es un pequeño proyecto divertido que hice utilizando las API de vapor y el raspado web Esta es la primera vez que ...

6  BFS / DFS Web Crawler  ( Bfs dfs web crawler ) 
He construido un rastreador web que comienza en una URL de origen y rastrea la web con un método BFS o DFS. Todo está funcionando bien, pero la actuación es h...

5  Cómo obtener información de los países de un sitio web que no está utilizando una verbanización consistente  ( Getting information of countries out of a website that isnt using consistent ve ) 
de este sitio web Necesitaba agarrar la información para cada país e insértelo en una hoja de cálculo de Excel. Mi plan original era usar mi programa y ...

11  ¿Es esta la forma en ello a Web-Scrape a una imagen de portada de libros?  ( Is this the clojure way to web scrape a book cover image ) 
¿Hay una manera de escribir esto mejor o más de manera de engaño? Especialmente la última parte con with-open y el let . ¿Debo poner el formulario 9988776...

3  Raspador de noticias de Google para buscar enlaces con historias similares  ( Google news scraper to fetch links with similar stories ) 
El siguiente código lleva una URL o el título a un artículo de noticias existente. busca en Google News usando el título. recoge todos los enlaces de ...

1  Scraper de Python + Selenium para obtener resultados usando la búsqueda inversa  ( Python selenium scraper to grab results using reverse search ) 
He escrito algún código en Python en combinación con Selenium para raspar el resultado poblado de un sitio web después de realizar una búsqueda inversa. Mi ...

4  Raspando html usando sopa hermosa  ( Scraping html using beautiful soup ) 
He escrito un script usando una hermosa sopa para raspar un poco de html y hacer algunas cosas y producir HTML de vuelta. Sin embargo, no estoy convencido con...

2  PHP Crawler para recoger comentarios sobre los artículos  ( Php crawler to collect comments on articles ) 
Tengo código que analiza las páginas web encuentra comentarios y guarda información sobre comentarios en DB. Tengo una matriz donde se almacenan todas las pág...

6  TRIVAGO Hotels Precio Checker  ( Trivago hotels price checker ) 
He decidido escribir mi primer proyecto en Python. Me gustaría escuchar alguna opinión de usted. Descripción del script: Generar URLS TrivAGO para hote...

9  Un raspador web que busca palabras predefinidas en artículos de noticias  ( A web scraper that looks for pre defined words in news articles ) 
Sigo siendo bastante nuevo en Python y Web-rasping, pero un colega me preguntó si podía construir un raspador web que podría ser utilizado por un Think Tank, ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos