2010-03-02 29 views
31

Tôi muốn xây dựng trang web ajax mà không phải hy sinh SEO. Câu hỏi của tôi là: Nếu tôi có liên kết trên trang web của tôi như thế này:Gắn thẻ bắt đầu bằng # vào URL với javascript

<a href="http://example.com/cats" id="cats">Cats</a> 
    <a href="http://example.com/dogs" id="dogs">Dogs</a> 

... khi mỗi liên kết được nhấp Tôi muốn cập nhật vào thanh địa chỉ với hashtag tương ứng. Vì vậy, nếu liên kết "Mèo" được nhấp, vị trí hiện tại sẽ là http://example.com/#cats và tôi có thể sử dụng liên kết này để hiển thị nội dung ajax của mình. Nếu javascript bị tắt hoặc người dùng là công cụ tìm kiếm, họ sẽ truy cập trực tiếp vào/cats

+2

Chỉ cần hai ghi chú: 1) Điều đó không được gọi là "hashtag" (đó là biệt ngữ Twitter cho một cái gì đó hoàn toàn không liên quan); nó được gọi là định danh phân đoạn hoặc mã định danh neo (xem thông số HTML). 2) Bạn không nên có biểu tượng # trong id của phần tử, tức là nó phải là id = "cats", tương ứng với/some-url # cats. –

Trả lời

44

Bạn có thể thay đổi location.hash tài sản, nó sẽ làm thay đổi nhận dạng neo hiện tại mà không hướng đi tạo trang, ví dụ bạn có thể:

<a href="http://mysite.com/cats" id="cats" class="ajaxLink">Cats</a> 
<a href="http://mysite.com/dogs" id="dogs" class="ajaxLink">Dogs</a> 

Sau đó:

$('.ajaxLink').click(function (e) { 
    location.hash = this.id; // get the clicked link id 
    e.preventDefault(); // cancel navigation 

    // get content with Ajax... 
});​ 
+1

WOW! Tôi không biết nó dễ đến vậy. Bây giờ tôi có thể làm cho tất cả các trang web trong tương lai của tôi trong ajax và vẫn nhận được trang web của tôi thu thập dữ liệu và lập chỉ mục! : D – alooficha

+0

Chỉ một điều mặc dù, nếu người dùng đánh dấu URL này hoặc nhấp chuột vào URL đó từ một trang web khác, id không trả về giá trị băm hiện tại. Nó trả về sản phẩm nào. Có một giải pháp cho điều này? Làm thế nào tôi có thể kiểm tra hash onload cũng như onclick? – alooficha

+1

Bạn chỉ cần kiểm tra giá trị của thuộc tính 'location.hash' khi trang tải, nó sẽ chứa mã định danh, bao gồm ký hiệu' # ', ví dụ:' if (location.hash == '#dogs') { /*...*/} ' – CMS

0

Bạn không thể đặt window.location.href mà không tải lại trang trong javascript vì lý do bảo mật.

Từ những gì tôi thấy một số người nói rằng Google sẽ lập chỉ mụC# url nhưng chúng sẽ không được coi là các trang riêng biệt và tôi nghĩ đó không phải là điều bạn muốn. Tôi cũng có rất ít kinh nghiệm với SEO.

-1

BenMills, không ai đề cập location.href, đó là khoảng location.hash mà không yêu cầu tải lại trang.

0

Mặc dù đơn giản là tốt nhất, nhưng nếu bạn chỉ muốn để tự động hóa quá trình này hoặc làm cho nó genericise sau đó bạn có thể sử dụng bản lite này Plugin jquery.hashTag.js

$('a').hashTag({ 
    source: function() { 
     return $(this).attr('id'); 
    } 
    }); 

Chỉ cần đặt đoạn mã này bên trong $ (document) .ready.

Nó sẽ tự làm phần còn lại của công việc. Giống như tự động nhấp vào liên kết có id được cung cấp dưới dạng băm.

Các vấn đề liên quan