国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解在不使用ssr的情況下解決Vue單頁面SEO問題

2024-05-06 15:28:07
字體:
來源:轉載
供稿:網友

遇到的問題:

近來在寫個人博客的時候遇到了大家可能都會遇到的問題

Vue單頁面在SEO時顯得很無力,尤其是百度不會抓取動態腳本

Vue-Router配合前后端分離無法讓meta標簽在蜘蛛抓取時動態填充

Vue單頁面又是大勢所趨,寫起來也不止是一個爽,當然也可以選擇多頁面

但即使是多頁面在面對文章和文檔時候也不可能說給每篇文章生成個Vue頁面

SSR當然能解決這個問題,但是仔細想想SSR不就跟以前的.php頁面一樣了么

都是預先拉取所有數據然后填充返回給瀏覽器,需要多消耗服務器資源,而且配置繁瑣

當然預渲染也不能解決這個問題

那么問題來了,我只是想讓百度抓取下我的動態文章,但是配置個繁瑣的SSR并不是最好選擇

我的解決辦法:

既然只是想讓百度抓取下我的動態文章,其實就是讓蜘蛛抓取我的靜態頁面時候,html的meta標簽是已經填充好的

那么就很簡單了,我們只需要實現一個極其簡單的閹割版的SSR不就好了么

PS:我百度了很久沒有找到相關的文章,不知道是不是我百度的姿勢不對😅

具體思路:

因為我的服務器后端語言是php,service是nginx,所以我這里展示的所有后端代碼都是基于php,大家當然可以選擇nodejs或者其他的語言去實現,這里提供個簡單的思路

上面說到我們要實現個閹割版SSR,其實就是在服務器有請求過來的時候在靜態html的meta標簽上填充好數據然后返回給請求端

這里的實現都是基于已經構建好的Vue單頁面,所以請先構建好一個Vue單頁面

先把構建好的dist下的index.html改造下

在頂部將變量拿取到,因為接口都是現成的,所以偷個懶直接調取接口

<?php$valDescription = '前端入門,進階總結記錄,個人日志博客,分享web學習經驗的小窩。';$valKeywords = 'web窩,前端,vue,js,博客,JavaScript,css,入門,教程';$valTitle = 'web窩';/** * 發送HTTP請求方法 * @param string $url  請求URL * @param array $params 請求參數 * @param string $method 請求方法GET/POST * @return array $data  響應數據 */function http_Req($url, $params, $method = 'GET', $header = array("Content-type: text/html; charset=utf-8"), $multi = false){  if($method == 'POST'){    $header = ["Content-type: application/x-www-form-urlencoded"];  }  $opts = array(    CURLOPT_TIMEOUT    => 30,    CURLOPT_RETURNTRANSFER => 1,    CURLOPT_SSL_VERIFYPEER => false,    CURLOPT_SSL_VERIFYHOST => false,    CURLOPT_HTTPHEADER   => $header  );  /* 根據請求類型設置特定參數 */  switch(strtoupper($method)){    case 'GET':      $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);      break;    case 'POST':      //判斷是否傳輸文件      $params = $multi ? $params : http_build_query($params);      $opts[CURLOPT_URL] = $url;      $opts[CURLOPT_POST] = 1;      $opts[CURLOPT_POSTFIELDS] = $params;      break;    default:      throw new Exception('不支持的請求方式!');  }  /* 初始化并執行curl請求 */  $ch = curl_init();  curl_setopt_array($ch, $opts);  $data = curl_exec($ch);  $error = curl_error($ch);  curl_close($ch);  if($error) throw new Exception('請求發生錯誤:' . $error);  return $data;}//分割當前請求的路徑$urlExp = explode('/',$_SERVER['REQUEST_URI']);//如果當前的路徑是文章內容if(count($urlExp)>2 && $urlExp[1] == 'article'){//請求當前文章的標題和描述  $ret = json_decode(http_Req('http://127.0.0.1/api/Blog/getsinglelist',['tuid'=>$urlExp[2]],'POST'),true);  $valKeywords = $ret['info'][0]['tt'].','.$valKeywords;  $valDescription = $ret['info'][0]['txt'].' - '.$valTitle.','.$valDescription;  $valTitle = $ret['info'][0]['tt'].' - '.$valTitle;}?>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 南澳县| 湘潭市| 碌曲县| 克拉玛依市| 疏勒县| 扎囊县| 临湘市| 江城| 肇东市| 阿合奇县| 砀山县| 安达市| 怀安县| 霞浦县| 东海县| 临城县| 富平县| 玉门市| 古蔺县| 高州市| 罗源县| 临夏市| 宁城县| 慈利县| 连南| 广丰县| 万州区| 藁城市| 吉林省| 聂荣县| 花垣县| 梅河口市| 周口市| 灵宝市| 横峰县| 奎屯市| 招远市| 昌宁县| 天祝| 湾仔区| 天祝|