jQuery: วิธีเปลี่ยนหัวเรื่องของเอกสารระหว่าง. Ready ()?


146

ฉันใช้เลย์เอาต์ที่ซ้อนกันใน Ruby on Rails และหนึ่งในเลย์เอาท์ที่ฉันต้องการอ่านในสตริงจาก div และตั้งเป็นชื่อของเอกสาร วิธีที่ถูกต้อง (ถ้ามี) ในการตั้งชื่อของเอกสารคืออะไร?

<script type="text/javascript">
$(document).ready(function() {

    // ???

});
</script>

เพียงคำอธิบายสำหรับสิ่งที่สงสัยว่าทำไมไม่เพียง แต่ตั้งค่าเซิร์ฟเวอร์แท็ก title: บางครั้งหน้านั้นถูกสร้างขึ้นด้วยเนื้อหาและการดำเนินการที่หลากหลาย นั่นคือคุณอาจมีไฟล์ที่ไม่เหมาะสมก่อนซึ่งจะทำให้ส่วนหัวจากนั้นเนื้อหาจะถูกดึงจากฐานข้อมูลเช่นชื่อลูกค้า ซึ่งหมายความว่าในเวลาที่ชื่อถูกส่งชื่อลูกค้าไม่เป็นที่รู้จัก มันเป็นการเขียนที่เลอะเทอะไม่แยกตรรกะทางธุรกิจและงานนำเสนอรับข้อมูลทั้งหมดก่อนจากนั้นแยกออก แต่บางครั้งนั่นคือสิ่งที่คุณมี บอส: "เพียงแค่ใส่ชื่อที่กำหนดเองในชื่อ" คุณ "ฉันต้อง refactor รหัสทั้งหมด"
Leif Neland

คำตอบ:


310

ต่อไปนี้ควรใช้งานได้ แต่จะไม่เข้ากันกับ SEO เป็นการดีที่สุดที่จะใส่ชื่อในแท็กชื่อ

<script type="text/javascript">

    $(document).ready(function() {
        document.title = 'blah';
    });

</script>

14
HTML ใดที่สร้างด้วยจาวาสคริปต์จะไม่เข้ากันกับ SEO หรือไม่? ฉันค่อนข้างมั่นใจว่า googlebot จะไม่เรียกใช้จาวาสคริปต์ ...
Orion Edwards

1
ฉันอ่านมาแล้วว่ามีวิธีบอก Google Bot ว่าควรอ่านอะไรเมื่อหน้าเว็บของคุณสร้างด้วย Ajax ... ลองใช้ Google
trusktr

2
@trusktr: ฉันคิดว่าคุณกำลังพูดถึงบทความ Google นี้: การทำให้แอปพลิเคชัน AJAX สามารถรวบรวมข้อมูลได้ แต่มันไม่มีอะไรเกี่ยวข้องกับปัญหาแบบนี้ดังนั้น Orion Edwards จึงถูกต้อง เป็นเพียงวิธีการที่ให้ Google อ่านเนื้อหาที่สร้างขึ้นโดยปกติด้วย AJAX ผ่านทางสแน็ปช็อต HTML และการแก้ไขด้านเซิร์ฟเวอร์
Sk8erPeter

1
ใช้งานไม่ได้กับ FF 29.0.1 สำหรับฉัน แต่โซลูชันนี้อธิบายไว้ด้านล่างใช้งานได้: stackoverflow.com/a/11171548/1915920
Andreas Dietrich

2
@OrionEdwards ตอนนี้มากกว่าห้าปีต่อมาrimmkaufman.com/blog/googlebot-crawling-javascript-site-ready/…
kqr

48

อย่าใช้$('title').text('hi')เพราะ IE ไม่รองรับ

มันจะดีกว่าที่จะใช้ document.title = 'new title';



36

แบบนี้:

$(document).ready(function ()
{
    document.title = "Hello World!";
});

ตรวจสอบให้แน่ใจว่าได้ตั้งชื่อเริ่มต้นหากคุณต้องการให้ดัชนีเว็บไซต์ของคุณถูกต้องโดยเครื่องมือค้นหา

เคล็ดลับเล็กน้อย:

$(function ()
{
    // this is a shorthand for the whole document-ready thing
    // In my opinion, it's more readable 
});

3
คุณควรโพสต์สิ่งที่จดชวเลขเป็น "คำถาม" ใหม่ในตัวเอง ที่เป็นประโยชน์!
MDCore

ไม่แน่ใจว่าฉันเข้าใจคุณ MDCore
cllpse

Jeff ได้แนะนำให้ใช้ stackoverflow สำหรับเคล็ดลับทางเทคนิคเหล่านั้นที่อาจวางในบล็อกของตน ฉันแนะนำให้โพสต์เคล็ดลับเป็นคำถามใหม่ที่คุณตอบเอง
MDCore


6

document.title ไม่ทำงานสำหรับฉัน

นี่เป็นอีกวิธีในการใช้ JQuery

$('html head').find('title').text("My New Page Title");

สำหรับฉันอย่างใดอย่างหนึ่ง (FF 29.0.1) และหากไม่มีการ<title>ตั้งค่าเลยแม้$('html head').add('<title>override default title</title>')จะไม่ทำงาน
Andreas Dietrich

2
SEO นี้เป็นมิตรหรือไม่
SearchForKnowledge

5

ฉันใช้เลย์เอาต์ที่ซ้อนกันใน Ruby on Rails และหนึ่งในเลย์เอาท์ที่ฉันต้องการอ่านในสตริงจาก div และตั้งเป็นชื่อของเอกสาร

วิธีที่ถูกต้องในการทำเช่นนี้คือฝั่งเซิร์ฟเวอร์

ในรูปแบบของคุณมีในบางจุดจะมีรหัสบางอย่างที่ทำให้ข้อความใน div ทำให้รหัสนี้ยังตั้งค่าตัวแปรอินสแตนซ์บางอย่างเช่น@page_title, จากนั้นในเลย์เอาต์ด้านนอกของคุณให้ทำเช่นนั้น<%= @page_title || 'Default Title' %>


-2

หากคุณมีสคริปต์ฝั่งเซิร์ฟเวอร์ get_title.php ที่สะท้อนเซสชันชื่อปัจจุบันซึ่งสามารถใช้งานได้ดีใน jQuery:

$.get('get_title.php',function(*respons*){
    title=*respons* + 'whatever you want'   
    $(document).attr('title',title)
})

2
การทำคำขออาแจ็กซ์สำหรับการตั้งชื่อเป็นเรื่องที่สิ้นเปลืองในความคิดของฉัน
Jason Miesionczek

2
OP ขอวิธีแก้ไขปัญหา jQuery โดยเฉพาะให้กับปัญหาฝั่งไคลเอ็นต์
Joel Etherton

1
การตั้งค่าชื่อผ่าน ajax นั้นมีประโยชน์เนื่องจากสามารถช่วยระบุแท็บเบราว์เซอร์ปัจจุบันสำหรับผู้ใช้เมื่ออยู่ในหน้าอื่น
chim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.