草庐IT

angularjs - Laravel、AngularJS 和 SEO

coder 2024-02-28 原文

我正在开发一个带有 AngularJS 前端和 Laravel API 后端的应用程序。 Laravel 后端只是监听请求,处理它们并返回一个答案。前端和后端是不同的独立应用程序......到目前为止。我这样做是为了以后能够开发一个可以使用 API 的移动应用程序。我还使用 JWT 对用户进行身份验证,所以我根本没有使用 Laravel 的 session 。此时我只需要一个webapp。我构建了一个使用 angular ui-router 的 webapp。

到目前为止一切顺利。前端和后端运行良好。然而,一些前端 View 将是公开的并且需要共享按钮,它们还需要被谷歌索引。

我读过有一些替代方案。

  1. Make some hack使用 apache mod_rewrite 为人们提供 Angular 应用程序,并由后端直接提供它的静态版本。我认为使用 Laravel 不会很困难。
  2. 使用 Prerender.js。就我而言,这与选项 1 的工作几乎相同,但方式更完整。

但是我正在考虑使用第三种选择。鉴于我现在只需要 webapp 并且 API 正在工作,我正在考虑使用 Laravel 的内置 webapp 功能。我可以从 Angular 使用 Controller 、指令和工厂,让 Laravel 处理 webapp 路由。

这样做的一个优点是我可以使用 Blade 呈现元标记(这完全解决了 SEO 问题)并使用 angular 和 API 提供其余内容。

你们中的任何人都可以看出这种解决方案的缺点吗?或者你们知道使用 Angular 和 Laravel 实现 SEO 目的的更好方法吗?

最佳答案

渲染站点:

如果你想让它对 SEO 友好,你必须从服务器端呈现页面。但是,是的,如果您仅将服务器呈现的页面提供给机器人会怎么样。对于真实用户,客户端渲染将起作用。

了解 Rendertron它将检测用户代理并相应地提供 html。

元标签:

使用Sluggable并将 id 替换为 url 中的 slug。可以关注https://oodavid.com/article/angularjs-meta-tags-management/

关于angularjs - Laravel、AngularJS 和 SEO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36189498/

有关angularjs - Laravel、AngularJS 和 SEO的更多相关文章

  1. ruby-on-rails - 获取 ActionController::RoutingError(当尝试使用 AngularJS 将数据发布到 Rails 服务器时,没有路由匹配 [OPTIONS] "/users" - 2

    尝试从我的AngularJS端将数据发布到Rails服务器时出现问题。服务器错误:ActionController::RoutingError(Noroutematches[OPTIONS]"/users"):actionpack(4.1.9)lib/action_dispatch/middleware/debug_exceptions.rb:21:in`call'actionpack(4.1.9)lib/action_dispatch/middleware/show_exceptions.rb:30:in`call'railties(4.1.9)lib/rails/rack/logg

  2. ruby-on-rails - 知道@vendor.name 后如何使 Ruby on Rails 中的 URL 对 SEO 友好? - 2

    我的应用程序在RoR中我有一个名为showsummary的操作/View,其中ID已传递到URL,并且Controller使用它来实例化@vendor,其中@vendor.name是公司的名称。我希望URL是showsummary/1/而不是在URL中包含/vendor-name。我该怎么做? 最佳答案 所有这些解决方案都使用find_by_name,这肯定需要在该列上有一个索引并且要求它们是唯一的。我们使用的一个更好的解决方案是在供应商名称前加上其ID,但牺牲了一点美观。这意味着您不必在名称列上有索引和/或要求唯一性。供应商.rb

  3. javascript - angularjs $state 和 $rootScope.$on($stateChangeStart) 问题 - 2

    我已经回答了多个问题,但还没有找到解决方案。我对状态处理有疑问。$urlRouterProvider.otherwise(function($injector,$location){var$state=$injector.get("$state");$state.go("cover");});$stateProvider.state('auth',{url:'/auth',templateUrl:'../views/authView.html',controller:'AuthControllerasauth'}).state('users',{url:'/users',templat

  4. javascript - 在具有静态内容的 angularjs bootstrap 选项卡上处于事件状态 - 2

    我正在使用AngularBootstrapUI来显示带有静态内容的标签集。我对此感到沮丧,因为UIBootstrapTab文档仅显示导航到通过绑定(bind)ng-repeat创建的选项卡。tab1GotoTab3tab2我发现了一些东西听到Stackoverflow但这不适用于当前版本的AngularBootstrapUI..Plunker 最佳答案 要将选项卡设置为事件状态,您需要在范围内将bool标志设置为“true”并将其与给定选项卡的active属性相关联。这看起来像tab1tab2当tabOneActive设置为true

  5. javascript - 结合 AngularJS、jQueryUI、Angular-Drag-Drop 排序列表 - 2

    我遇到以下情况,我需要允许用户从列表中选择对象并将它们拖/放到某个插槽中:对象的大小可以是插槽的一到三倍。所以如果用户将Object1拖到Slot0,那么它只占用Slot0(startSlot=0和endSlot=0)。但是,如果用户将对象3拖动到插槽3,则它会占用插槽3、4和5(startSlot=3和endSlot=5)。将对象放入槽中后,用户可以通过在槽中单击并上下拖动对象来重新排序对象。对象不能相互重叠:我正在使用Angular,所以我正在从数据库中读取对象列表,并且我有一个槽数变量。我尝试了几种解决方案。我相信使用jQuery和jQueryUI可拖动、可放置和可排序是解决方案

  6. javascript - AngularJS 中添加的自定义 header 仅显示在 Access-Control-Request-Headers 上 - 2

    我正在尝试使用拦截器使用以下代码向AngularJS应用程序中的每个请求添加自定义header:angular.module('app').factory('httpRequestInterceptor',function(){return{request:function(config){config.headers['testheader']='testheaderworks';returnconfig;}};});angular.module('app').config(function($httpProvider){$httpProvider.interceptors.push

  7. javascript - 这个 AngularJS 工厂示例究竟是如何工作的?一些疑惑 - 2

    我是AngularJS的新手,我正在学习教程。我对Angular中工厂的使用有疑问。我知道工厂是一种用于根据请求创建对象的模式。所以在例子中有如下代码://Createsvaluesorobjectsondemandangular.module("myApp")//Getthe"myApp"modulecreatedintotheroot.jsfile(intothismoduleisinjectedthe"serviceModule"service.value("testValue","AngularJSUdemy")//Defineafactorynamed"courseFacto

  8. javascript - 带有数据切换的 AngularJS ng-click - 2

    我有一个列表项,它切换模式并使用ng-click设置一个参数问题是在记录Course.SelectedCourse的任何其他地方调用函数时,它是未定义的,尽管Course.ID有一个值。 最佳答案 在Controller中使用一个函数,这可能看起来像这样:在View中:在Controller中functionsetSelectedCourse(course_id){$scope.Course.SelectedCourse=course_id;} 关于javascript-带有数据切换的A

  9. javascript - AngularJS:如何使用 ng-idle - 2

    我目前的情况是:myApp.config(['$routeProvider',function($routeProvider){$routeProvider.when('/home',{templateUrl:'partials/home.html',controller:'homeCtrl'});}这是我当前的.config()我如何将波纹管代码集成到我的上层代码中:.config(function(IdleProvider,KeepaliveProvider){IdleProvider.idle(10*60);//10minutesidleIdleProvider.timeout(

  10. javascript - AngularJS:让元素跟随光标 - 2

    jsfiddle在这里:https://jsfiddle.net/Flignats/jzrzo56u/3/我的页面上有一个最初隐藏的元素(弹出窗口)。当页面上的另一个元素悬停时,我希望弹出窗口显示在光标旁边。在我的fiddle中,我有3个段落和弹出框。当用户的光标进入段落​​时,将显示弹出框。当用户的光标离开该元素时,弹出窗口将不再显示。我在检索光标坐标和将弹出窗口定位在光标附近时遇到问题。感谢任何帮助:)Angular代码:varapp=angular.module('myApp',[]);app.controller('Ctrl',['$scope',function($scope

随机推荐