it-swarm-vi.com

Làm thế nào để các công cụ tìm kiếm đối phó với các ứng dụng AngularJS?

Tôi thấy hai vấn đề với ứng dụng AngularJS liên quan đến công cụ tìm kiếm và SEO:

1) Điều gì xảy ra với các thẻ tùy chỉnh? Các công cụ tìm kiếm có bỏ qua toàn bộ nội dung trong các thẻ đó không? tức là tôi cho rằng tôi có

<custom>
  <h1>Hey, this title is important</h1>
</custom>

<h1> sẽ được lập chỉ mục mặc dù nằm trong các thẻ tùy chỉnh?


2) Có cách nào để tránh các công cụ tìm kiếm lập chỉ mục {{}} liên kết theo nghĩa đen không? I E.

<h2>{{title}}</h2>

Tôi biết tôi có thể làm một cái gì đó như

<h2 ng-bind="title"></h2>

nhưng nếu tôi thực sự muốn cho trình thu thập thông tin "xem" tiêu đề thì sao? Là kết xuất phía máy chủ là giải pháp duy nhất?

692
luisfarzati

Cập nhật tháng 5 năm 2014

Trình thu thập dữ liệu của Google hiện thực thi javascript - bạn có thể sử dụng Công cụ quản trị trang web của Google để hiểu rõ hơn cách các trang web của bạn được Google hiển thị.

Câu trả lời gốc
[.___.] Nếu bạn muốn tối ưu hóa ứng dụng của mình cho các công cụ tìm kiếm, thật không may, không có cách nào để phục vụ một phiên bản được kết xuất trước cho trình thu thập thông tin. Bạn có thể đọc thêm về các đề xuất của Google cho các trang web nặng về ajax và javascript tại đây .

Nếu đây là một tùy chọn tôi khuyên bạn nên đọc bài viết này về cách làm SEO cho Angular với kết xuất phía máy chủ.

Tôi không chắc chắn những gì trình thu thập thông tin làm khi gặp các thẻ tùy chỉnh.

404
joakimbl

Sử dụng PushState và tiền phân tích

Cách hiện tại (2015) để làm điều này là sử dụng phương thức JavaScript PushState.

PushState thay đổi URL trong thanh trình duyệt hàng đầu mà không cần tải lại trang. Giả sử bạn có một trang chứa các tab. Các tab ẩn và hiển thị nội dung và nội dung được chèn động, bằng cách sử dụng AJAX hoặc chỉ bằng cách đặt hiển thị: none và display: chặn để ẩn và hiển thị nội dung tab chính xác.

Khi các tab được nhấp, sử dụng PushState để cập nhật url trong thanh địa chỉ. Khi trang được hiển thị, sử dụng giá trị trong thanh địa chỉ để xác định tab nào sẽ hiển thị. Angular định tuyến sẽ tự động làm việc này cho bạn.

Phân hủy

Có hai cách để truy cập Ứng dụng Trang đơn PushState (SPA)

  1. Thông qua PushState, nơi người dùng nhấp vào liên kết PushState và nội dung được AJAXed in.
  2. Bằng cách nhấn URL trực tiếp.

Lần truy cập đầu tiên trên trang web sẽ liên quan đến việc nhấn URL trực tiếp. Các lần truy cập tiếp theo sẽ chỉ đơn giản là AJAX trong nội dung khi PushState cập nhật URL.

Trình thu thập thông tin thu thập liên kết từ một trang sau đó thêm chúng vào hàng đợi để xử lý sau. Điều này có nghĩa là đối với trình thu thập thông tin, mỗi lần truy cập trên máy chủ là lần truy cập trực tiếp, họ không điều hướng qua Pushstate.

Phân tích bó gói tải trọng ban đầu vào phản hồi đầu tiên từ máy chủ, có thể là một đối tượng JSON. Điều này cho phép Công cụ tìm kiếm hiển thị trang mà không thực hiện lệnh gọi AJAX.

Có một số bằng chứng cho thấy rằng Google có thể không thực hiện các yêu cầu AJAX. Thêm về điều này ở đây:

https://web.archive.org/web/20160318211223/http://www.analog-ni.co/precompose-a-spa-may-become-the-holy-grail-to-seo

Công cụ tìm kiếm có thể đọc và thực thi JavaScript

Google đã có thể phân tích cú pháp JavaScript một thời gian rồi, đó là lý do tại sao ban đầu họ phát triển Chrome, để hoạt động như một trình duyệt không đầu đầy đủ tính năng cho nhện Google. Nếu một liên kết có thuộc tính href hợp lệ, URL mới có thể được lập chỉ mục. Không còn gì để làm.

Nếu nhấp vào liên kết ngoài ra sẽ kích hoạt cuộc gọi PushState, trang web có thể được điều hướng bởi người dùng thông qua PushState.

Công cụ tìm kiếm hỗ trợ cho các URL PushState

PushState hiện được Google và Bing hỗ trợ.

Google

Dưới đây là Matt Cutts trả lời câu hỏi của Paul Irish về PushState cho SEO:

http://youtu.be/yiAF9VdvRPw

Dưới đây là Google thông báo hỗ trợ JavaScript đầy đủ cho spider:

http://googlewebmastercentral.blogspot.de/2014/05/under Hiểu-web -pages-better.html

Kết quả cuối cùng là Google hỗ trợ PushState và sẽ lập chỉ mục các URL PushState.

Xem thêm công cụ quản trị trang web của Google 'tìm nạp như Googlebot. Bạn sẽ thấy JavaScript của bạn (bao gồm Angular) được thực thi.

Bing

Dưới đây là thông báo hỗ trợ của Bing cho các URL PushState đẹp ngày tháng 3 năm 2013:

http://bloss.bing.com/webmaster/2013/03/21/search-engine-optimization-best-practices-for-ajax-urls/

Đừng sử dụng HashBangs #!

Các url Hashbang là một điểm dừng xấu xí yêu cầu nhà phát triển cung cấp phiên bản được kết xuất sẵn của trang web tại một vị trí đặc biệt. Chúng vẫn hoạt động, nhưng bạn không cần sử dụng chúng.

URL Hashbang trông như thế này:

domain.com/#!path/to/resource

Điều này sẽ được kết hợp với một thẻ meta như thế này:

<meta name="fragment" content="!">

Google sẽ không lập chỉ mục cho chúng ở dạng này, nhưng thay vào đó sẽ lấy một phiên bản tĩnh của trang web từ URL _esc hành_fragments_ và lập chỉ mục đó.

URL Pushstate trông giống như bất kỳ URL thông thường nào:

domain.com/path/to/resource

Sự khác biệt là Angular xử lý chúng cho bạn bằng cách chặn thay đổi thành document.location xử lý nó trong JavaScript.

Nếu bạn muốn sử dụng URL PushState (và có thể bạn sẽ làm), hãy loại bỏ tất cả các URL và thẻ meta kiểu băm cũ và chỉ cần bật chế độ HTML5 trong khối cấu hình của bạn.

Kiểm tra trang web của bạn

Các công cụ quản trị trang web của Google hiện chứa một công cụ cho phép bạn tìm nạp URL dưới dạng google và hiển thị JavaScript khi Google kết xuất lại.

https://www.google.com/webmasters/tools/googlebot-fetch

Tạo URL PushState trong Angular

Để tạo các URL thực trong Angular, thay vì # tiền tố, hãy đặt chế độ HTML5 trên đối tượng $ locationProvider của bạn.

$locationProvider.html5Mode(true);

Phía máy chủ

Vì bạn đang sử dụng các URL thực, bạn sẽ cần đảm bảo cùng một mẫu (cộng với một số nội dung được phân tách sẵn) được máy chủ của bạn cung cấp cho tất cả các URL hợp lệ. Cách bạn làm điều này sẽ thay đổi tùy thuộc vào kiến ​​trúc máy chủ của bạn.

Sơ đồ trang web

Ứng dụng của bạn có thể sử dụng các hình thức điều hướng khác thường, ví dụ như di chuột hoặc cuộn. Để đảm bảo Google có thể điều khiển ứng dụng của bạn, tôi có thể đề nghị tạo một sơ đồ trang web, một danh sách đơn giản gồm tất cả các url mà ứng dụng của bạn phản hồi. Bạn có thể đặt vị trí này tại vị trí mặc định (/ sitemap hoặc /sitemap.xml) hoặc cho Google biết về nó bằng các công cụ quản trị trang web.

Dù sao thì cũng nên có một sơ đồ trang web.

Hỗ trợ trình duyệt

Pushstate hoạt động trong IE10. Trong các trình duyệt cũ hơn, Angular sẽ tự động quay lại URL kiểu băm

Một trang demo

Nội dung sau được hiển thị bằng cách sử dụng URL đẩy với tiền xử lý:

http://html5.gingerhost.com/london

Như có thể được xác minh, tại liên kết này , nội dung được lập chỉ mục và xuất hiện trong Google.

Phục vụ mã trạng thái 404 và 301 Header

Vì công cụ tìm kiếm sẽ luôn truy cập máy chủ của bạn cho mọi yêu cầu, bạn có thể cung cấp mã trạng thái tiêu đề từ máy chủ của mình và mong đợi Google sẽ xem chúng.

470
superluminary

Hãy dứt khoát về AngularJS và SEO

Google, Yahoo, Bing và các công cụ tìm kiếm khác thu thập dữ liệu web theo cách truyền thống bằng cách sử dụng trình thu thập thông tin truyền thống. Họ chạy robot thu thập dữ liệu HTML trên các trang web, thu thập thông tin trên đường đi. Họ giữ những từ thú vị và tìm kiếm các liên kết khác đến các trang khác (những liên kết này, số lượng chúng và số lượng chúng đi vào hoạt động với SEO).

Vậy tại sao công cụ tìm kiếm không xử lý các trang javascript?

Câu trả lời liên quan đến thực tế là các robot công cụ tìm kiếm hoạt động thông qua các trình duyệt không đầu và chúng thường làm không có một công cụ kết xuất javascript để hiển thị javascript của trang. Điều này hoạt động đối với hầu hết các trang vì hầu hết các trang tĩnh không quan tâm đến việc hiển thị JavaScript trang của họ, vì nội dung của chúng đã có sẵn.

Có thể làm gì về nó?

May mắn thay, trình thu thập dữ liệu của các trang web lớn hơn đã bắt đầu thực hiện cơ chế cho phép chúng tôi làm cho các trang web JavaScript của chúng tôi có thể thu thập dữ liệu, nhưng nó yêu cầu chúng tôi thực hiện thay đổi đối với trang web của mình .

Nếu chúng tôi thay đổi hashPrefix thành #! thay vì chỉ đơn giản là #, thì các công cụ tìm kiếm hiện đại sẽ thay đổi yêu cầu sử dụng _escaped_fragment_ thay vì #!. (Với chế độ HTML5, tức là nơi chúng tôi có các liên kết không có tiền tố băm, chúng tôi có thể triển khai tính năng tương tự này bằng cách xem tiêu đề User Agent trong phần phụ trợ của chúng tôi).

Điều đó có nghĩa là, thay vì một yêu cầu từ một trình duyệt bình thường trông như:

http://www.ng-newsletter.com/#!/signup/page

Một công cụ tìm kiếm sẽ tìm kiếm trang với:

http://www.ng-newsletter.com/?_escaped_fragment_=/signup/page

Chúng tôi có thể đặt tiền tố băm của các ứng dụng Angular bằng cách sử dụng phương thức tích hợp từ ngRoute:

angular.module('myApp', [])
.config(['$location', function($location) {
  $location.hashPrefix('!');
}]);

Và, nếu chúng ta đang sử dụng html5Mode, chúng ta sẽ cần thực hiện điều này bằng cách sử dụng thẻ meta:

<meta name="fragment" content="!">

Nhắc nhở, chúng tôi có thể đặt html5Mode() với dịch vụ $location:

angular.module('myApp', [])
.config(['$location', 
function($location) {
  $location.html5Mode(true);
}]);

Xử lý công cụ tìm kiếm

Chúng tôi có rất nhiều cơ hội để xác định cách chúng tôi xử lý việc cung cấp nội dung thực sự cho các công cụ tìm kiếm dưới dạng HTML tĩnh. Chúng tôi có thể tự lưu trữ một phụ trợ, chúng tôi có thể sử dụng dịch vụ để Lưu trữ back-end cho chúng tôi, chúng tôi có thể sử dụng proxy để phân phối nội dung, v.v. Hãy xem xét một vài tùy chọn:

Tự lưu trữ

Chúng tôi có thể viết một dịch vụ để xử lý việc thu thập dữ liệu trang web của chính mình bằng trình duyệt không đầu, như ph Phantomjs hoặc zombiejs, chụp ảnh nhanh trang với dữ liệu được hiển thị và lưu trữ dưới dạng HTML. Bất cứ khi nào chúng tôi thấy chuỗi truy vấn ?_escaped_fragment_ trong yêu cầu tìm kiếm, chúng tôi có thể phân phối ảnh chụp nhanh HTML tĩnh mà chúng tôi đã lấy trang thay vì trang được kết xuất trước chỉ thông qua JS. Điều này đòi hỏi chúng ta phải có một phụ trợ cung cấp các trang của chúng tôi với logic có điều kiện ở giữa. Chúng ta có thể sử dụng một cái gì đó như prerender.io's backend làm điểm khởi đầu để tự chạy cái này. Tất nhiên, chúng ta vẫn cần xử lý việc ủy ​​quyền và xử lý đoạn mã, nhưng đó là một khởi đầu tốt.

Với dịch vụ trả phí

Cách dễ nhất và nhanh nhất để đưa nội dung vào công cụ tìm kiếm là sử dụng dịch vụ Brombone , seo.js , seo4ajax , và prerender.io là những ví dụ hay về những điều này Điều đó sẽ lưu trữ kết xuất nội dung trên cho bạn. Đây là một lựa chọn tốt cho những lúc chúng ta không muốn đối phó với việc chạy máy chủ/proxy. Ngoài ra, nó thường siêu nhanh.

Để biết thêm thông tin về Angular và SEO, chúng tôi đã viết một hướng dẫn mở rộng về nó tại http://www.ng-newsletter.com/posts/serious-angular-seo.htmlchúng tôi đã nêu chi tiết hơn nữa trong cuốn sách của chúng tôi ng-book: The Complete Book on AngularJS . Kiểm tra nó tại ng-book.com .

106
auser

Bạn thực sự nên xem hướng dẫn xây dựng trang AngularJS thân thiện với SEO trong năm của blog moo. Anh ấy dẫn bạn qua tất cả các bước được nêu trong tài liệu của Angular. http://www.yearofmoo.com/2012/11/angularjs-and-seo.html

Sử dụng kỹ thuật này, công cụ tìm kiếm sẽ thấy HTML mở rộng thay vì các thẻ tùy chỉnh.

56
Brad Green

Điều này đã thay đổi mạnh mẽ.

http://searchengineland.com/bing-offers-recommendations-for-seo-friendly-ajax-suggests-html5-pushstate-152946

Nếu bạn sử dụng: $ locationProvider.html5Mode (true); bạn đã sẵn sàng.

Không có nhiều trang kết xuất.

41
user3330270

Mọi thứ đã thay đổi khá nhiều kể từ khi câu hỏi này được hỏi. Hiện tại có các tùy chọn để cho phép Google lập chỉ mục trang web AngularJS của bạn. Tùy chọn dễ nhất tôi tìm thấy là sử dụnghttp://prerender.iodịch vụ miễn phí sẽ tạo các trang có thể chia sẻ cho bạn và phục vụ điều đó cho các công cụ tìm kiếm. Nó được hỗ trợ trên hầu hết các nền tảng web phía máy chủ. Gần đây tôi đã bắt đầu sử dụng chúng và sự hỗ trợ cũng rất tuyệt vời.

Tôi không có bất kỳ liên kết nào với họ, điều này đến từ một người dùng hạnh phúc.

17
Ketan

Trang web riêng của Angular phục vụ nội dung được đơn giản hóa cho các công cụ tìm kiếm: http://docs.angularjs.org/?_escoped_fragment_=/tutorial/step_09

Giả sử ứng dụng Angular của bạn đang tiêu thụ một api JSON được điều khiển bởi Node.js/Express, như /api/path/to/resource. Có lẽ bạn có thể chuyển hướng bất kỳ yêu cầu nào với ?_escaped_fragment_ sang /api/path/to/resource.html và sử dụng đàm phán nội dung để hiển thị một mẫu HTML của nội dung, thay vì trả về dữ liệu JSON.

Điều duy nhất là, các tuyến Angular của bạn sẽ cần khớp 1: 1 với API REST của bạn.

CHỈNH SỬA: Tôi nhận ra rằng điều này có khả năng thực sự làm vấy bẩn REST api của bạn và tôi không khuyên bạn nên thực hiện bên ngoài các trường hợp sử dụng rất đơn giản trong đó có thể là một phù hợp tự nhiên.

Thay vào đó, bạn có thể sử dụng một bộ tuyến đường và bộ điều khiển hoàn toàn khác cho nội dung thân thiện với robot của bạn. Nhưng sau đó, bạn đang sao chép tất cả các tuyến và bộ điều khiển AngularJS của mình trong Node/Express.

Tôi đã quyết định tạo ảnh chụp nhanh bằng trình duyệt không đầu, mặc dù tôi cảm thấy điều đó hơi kém lý tưởng.

9
Kevin C.

Một thực hành tốt có thể được tìm thấy ở đây:

http://scotch.io/tutorials/javascript/angularjs-seo-with-prerender-io?_escoped_fragment_=tag

8
pixparker

Đến bây giờ Google đã thay đổi đề xuất thu thập thông tin AJAX của họ.

Thời gian đã thay đổi. Ngày nay, miễn là bạn không chặn Googlebot thu thập dữ liệu tệp JavaScript hoặc CSS của mình, chúng tôi thường có thể kết xuất và hiểu các trang web của bạn như các trình duyệt hiện đại.

tl; dr: [Google] không còn đề xuất AJAX đề xuất thu thập thông tin [Google] được thực hiện lại vào năm 2009.

7
Thor

Thông số Ajax Crawlable của Google, như được tham chiếu trong các câu trả lời khác ở đây, về cơ bản là câu trả lời.

Nếu bạn quan tâm đến cách các công cụ tìm kiếm và bot xã hội khác giải quyết các vấn đề tương tự, tôi đã viết lên trạng thái nghệ thuật ở đây: http://blog.ajaxsnapshots.com/2013/11/googles-crawlable-ajax-specification .html

Tôi làm việc cho https://ajaxsnapshots.com , một công ty triển khai Thông số Ajax có thể thu thập thông tin như một dịch vụ - thông tin trong báo cáo đó dựa trên các quan sát từ nhật ký của chúng tôi.

6
Robert AJS

Tôi đã tìm thấy một giải pháp thanh lịch sẽ bao gồm hầu hết các căn cứ của bạn. Tôi đã viết về nó ban đầu ở đây và trả lời một câu hỏi StackOverflow tương tự khác ở đây mà tham chiếu nó.

FYI giải pháp này cũng bao gồm các thẻ dự phòng được mã hóa cứng trong trường hợp Javascript không được trình thu thập thông tin chọn. Tôi đã không phác thảo rõ ràng về nó, nhưng điều đáng nói là bạn nên kích hoạt chế độ HTML5 để được hỗ trợ URL thích hợp.

Cũng lưu ý: đây không phải là các tệp hoàn chỉnh, chỉ là những phần quan trọng của những tệp có liên quan. Nếu bạn cần trợ giúp để viết bản tóm tắt cho các chỉ thị, dịch vụ, vv có thể được tìm thấy ở nơi khác. Dù sao, ở đây đi ...

app.js

Đây là nơi bạn cung cấp siêu dữ liệu tùy chỉnh cho từng tuyến đường của bạn (tiêu đề, mô tả, v.v.)

$routeProvider
   .when('/', {
       templateUrl: 'views/homepage.html',
       controller: 'HomepageCtrl',
       metadata: {
           title: 'The Base Page Title',
           description: 'The Base Page Description' }
   })
   .when('/about', {
       templateUrl: 'views/about.html',
       controller: 'AboutCtrl',
       metadata: {
           title: 'The About Page Title',
           description: 'The About Page Description' }
   })

siêu dữ liệu-service.js (dịch vụ)

Đặt tùy chọn siêu dữ liệu tùy chỉnh hoặc sử dụng mặc định làm dự phòng.

var self = this;

// Set custom options or use provided fallback (default) options
self.loadMetadata = function(metadata) {
  self.title = document.title = metadata.title || 'Fallback Title';
  self.description = metadata.description || 'Fallback Description';
  self.url = metadata.url || $location.absUrl();
  self.image = metadata.image || 'fallbackimage.jpg';
  self.ogpType = metadata.ogpType || 'website';
  self.twitterCard = metadata.twitterCard || 'summary_large_image';
  self.twitterSite = metadata.twitterSite || '@fallback_handle';
};

// Route change handler, sets the route's defined metadata
$rootScope.$on('$routeChangeSuccess', function (event, newRoute) {
  self.loadMetadata(newRoute.metadata);
});

metaproperty.js (chỉ thị)

Gói kết quả dịch vụ siêu dữ liệu cho chế độ xem.

return {
  restrict: 'A',
  scope: {
    metaproperty: '@'
  },
  link: function postLink(scope, element, attrs) {
    scope.default = element.attr('content');
    scope.metadata = metadataService;

    // Watch for metadata changes and set content
    scope.$watch('metadata', function (newVal, oldVal) {
      setContent(newVal);
    }, true);

    // Set the content attribute with new metadataService value or back to the default
    function setContent(metadata) {
      var content = metadata[scope.metaproperty] || scope.default;
      element.attr('content', content);
    }

    setContent(scope.metadata);
  }
};

index.html

Hoàn thành với các thẻ dự phòng được mã hóa cứng được đề cập trước đó, cho các trình thu thập thông tin không thể nhận bất kỳ Javascript nào.

<head>
  <title>Fallback Title</title>
  <meta name="description" metaproperty="description" content="Fallback Description">

  <!-- Open Graph Protocol Tags -->
  <meta property="og:url" content="fallbackurl.com" metaproperty="url">
  <meta property="og:title" content="Fallback Title" metaproperty="title">
  <meta property="og:description" content="Fallback Description" metaproperty="description">
  <meta property="og:type" content="website" metaproperty="ogpType">
  <meta property="og:image" content="fallbackimage.jpg" metaproperty="image">

  <!-- Twitter Card Tags -->
  <meta name="Twitter:card" content="summary_large_image" metaproperty="twitterCard">
  <meta name="Twitter:title" content="Fallback Title" metaproperty="title">
  <meta name="Twitter:description" content="Fallback Description" metaproperty="description">
  <meta name="Twitter:site" content="@fallback_handle" metaproperty="twitterSite">
  <meta name="Twitter:image:src" content="fallbackimage.jpg" metaproperty="image">
</head>

Điều này sẽ giúp đáng kể với hầu hết các trường hợp sử dụng công cụ tìm kiếm. Nếu bạn muốn kết xuất hoàn toàn động cho trình thu thập dữ liệu mạng xã hội (là iffy trên hỗ trợ Javascript), bạn vẫn sẽ phải sử dụng một trong các dịch vụ kết xuất trước được đề cập trong một số câu trả lời khác.

Hi vọng điêu nay co ich!

4
Andrew

Với Angular Universal, bạn có thể tạo các trang đích cho ứng dụng trông giống như ứng dụng hoàn chỉnh và sau đó tải ứng dụng Angular đằng sau nó.
[.__.] Angular Universal tạo HTML thuần có nghĩa là các trang không có javascript ở phía máy chủ và phục vụ chúng cho người dùng mà không bị trì hoãn. Vì vậy, bạn có thể đối phó với bất kỳ trình thu thập thông tin, bot và người dùng nào (những người đã có tốc độ mạng và tốc độ mạng thấp). Sau đó, bạn có thể chuyển hướng chúng bằng các liên kết/nút đến ứng dụng góc thực tế đã được tải phía sau nó. Giải pháp này được đề xuất bởi trang web chính thức. -Nhiều thông tin khác về SEO và Angular Universal-

2
erginduran

Sử dụng một cái gì đó như PreRender, nó làm cho các trang tĩnh của trang web của bạn để các công cụ tìm kiếm có thể lập chỉ mục cho nó.

Tại đây bạn có thể tìm hiểu những nền tảng nào có sẵn: https://prerender.io/documentation/install-middleware#asp-net

2
NicoJuicy

Trình thu thập thông tin (hoặc bot) được thiết kế để thu thập nội dung HTML của các trang web nhưng do hoạt động AJAX để tìm nạp dữ liệu không đồng bộ, điều này đôi khi trở thành vấn đề khi hiển thị trang và hiển thị nội dung động trên đó. Tương tự, AngularJS cũng sử dụng mô hình không đồng bộ, điều này tạo ra sự cố cho trình thu thập dữ liệu của Google.

Một số nhà phát triển tạo các trang html cơ bản với dữ liệu thực và phục vụ các trang này từ phía máy chủ tại thời điểm thu thập thông tin. Chúng tôi có thể kết xuất cùng một trang với PhantomJS ở phía phục vụ có _escaped_fragment_ (Vì Google tìm #! trong url trang web của chúng tôi và sau đó lấy mọi thứ sau #! và thêm nó vào tham số truy vấn _escaped_fragment_). Để biết thêm chi tiết xin vui lòng đọc này blog .

1
Rubi saini

Trình thu thập thông tin không cần một gui khá phong cách, chúng chỉ muốn xem nội dung, vì vậy bạn không cần phải cung cấp cho chúng ảnh chụp nhanh một trang được tạo cho con người.

Giải pháp của tôi: to cung cấp cho trình thu thập thông tin những gì trình thu thập thông tin muốn:

Bạn phải nghĩ xem những gì trình thu thập thông tin muốn, và chỉ cung cấp cho anh ta điều đó.

TIP không lộn xộn với mặt sau. Chỉ cần thêm một chút giao diện phía máy chủ bằng cách sử dụng cùng API

0
pykiss